6fe9b57748
Summary: This diff does two things: * Rethinks how we call Recover() with read_only option. Before, we call it with pointer to memtable where we'd like to apply those changes to. This memtable is set in db_impl_readonly.cc and it's actually DBImpl::mem_. Why don't we just apply updates to mem_ right away? It seems more intuitive. * Changes when we apply updates to manifest. Before, the process is to recover all the logs, flush it to sst files and then do one giant commit that atomically adds all recovered sst files and sets the next log number. This works good enough, but causes some small troubles for my column family approach, since I can't have one VersionEdit apply to more than single column family[1]. The change here is to commit the files recovered from logs right away. Here is the state of the world before the change: 1. Recover log 5, add new sst files to edit 2. Recover log 7, add new sst files to edit 3. Recover log 8, add new sst files to edit 4. Commit all added sst files to manifest and mark log files 5, 7 and 8 as recoverd (via SetLogNumber(9) function) After the change, we'll do: 1. Recover log 5, commit the new sst files and set log 5 as recovered 2. Recover log 7, commit the new sst files and set log 7 as recovered 3. Recover log 8, commit the new sst files and set log 8 as recovered The added (small) benefit is that if we fail after (2), the new recovery will only have to recover log 8. In previous case, we'll have to restart the recovery from the beginning. The bigger benefit will be to enable easier integration of multiple column families in Recovery code path. [1] I'm happy to dicuss this decison, but I believe this is the cleanest way to go. It also makes backward compatibility much easier. We don't have a requirement of adding multiple column families atomically. Test Plan: make check Reviewers: dhruba, haobo, kailiu, sdong Reviewed By: kailiu CC: leveldb Differential Revision: https://reviews.facebook.net/D15237 |
||
---|---|---|
.. | ||
builder.cc | ||
builder.h | ||
c_test.c | ||
c.cc | ||
compaction_picker.cc | ||
compaction_picker.h | ||
compaction.cc | ||
compaction.h | ||
corruption_test.cc | ||
db_bench.cc | ||
db_filesnapshot.cc | ||
db_impl_readonly.cc | ||
db_impl_readonly.h | ||
db_impl.cc | ||
db_impl.h | ||
db_iter.cc | ||
db_iter.h | ||
db_stats_logger.cc | ||
db_test.cc | ||
dbformat_test.cc | ||
dbformat.cc | ||
dbformat.h | ||
deletefile_test.cc | ||
filename_test.cc | ||
filename.cc | ||
filename.h | ||
log_format.h | ||
log_reader.cc | ||
log_reader.h | ||
log_test.cc | ||
log_writer.cc | ||
log_writer.h | ||
memtable.cc | ||
memtable.h | ||
memtablelist.cc | ||
memtablelist.h | ||
merge_context.h | ||
merge_helper.cc | ||
merge_helper.h | ||
merge_operator.cc | ||
merge_test.cc | ||
perf_context_test.cc | ||
prefix_filter_iterator.h | ||
prefix_test.cc | ||
repair.cc | ||
simple_table_db_test.cc | ||
skiplist_test.cc | ||
skiplist.h | ||
snapshot.h | ||
table_cache.cc | ||
table_cache.h | ||
table_properties_collector_test.cc | ||
table_properties_collector.cc | ||
table_properties_collector.h | ||
transaction_log_impl.cc | ||
transaction_log_impl.h | ||
version_edit_test.cc | ||
version_edit.cc | ||
version_edit.h | ||
version_set_reduce_num_levels.cc | ||
version_set_test.cc | ||
version_set.cc | ||
version_set.h | ||
write_batch_internal.h | ||
write_batch_test.cc | ||
write_batch.cc |