Igor Canadi dbbffbd772 Mark the log_number file number used
Summary:
VersionSet::next_file_number_ is always assumed to be strictly greater than VersionSet::log_number_. In our new recovery code, we artificially set log_number_  to be (log_number + 1), so that once we flush, we don't recover from the same log file again (this is important because of merge operator non-idempotence)

When we set VersionSet::log_number_ to (log_number + 1), we also have to mark that file number used, such that next_file_number_ is increased to a legal level. Otherwise, VersionSet might assert.

This has not be a problem so far because here's what happens:
1. assume next_file_number is 5, we're recovering log_number 10
2. in DBImpl::Recover() we call MarkFileNumberUsed with 10. This will set VersionSet::next_file_number_ to 11.
3. If there are some updates, we will call WriteTable0ForRecovery(), which will use file number 11 as a new table file and advance VersionSet::next_file_number_ to 12.
4. When we LogAndApply() with log_number 11, assertion is true: assert(11 <= 12);

However, this was a lucky occurrence. Even though this diff doesn't cause a bug, I think the issue is important to fix.

Test Plan: In column families I have different recovery logic and this code path asserted. When adding MarkFileNumberUsed(log_number + 1) assert is gone.

Reviewers: dhruba, kailiu

Reviewed By: kailiu

CC: leveldb

Differential Revision: https://reviews.facebook.net/D15783
2014-01-31 14:43:16 -08:00
..
2013-12-10 10:48:35 +02:00
2014-01-22 10:55:16 -08:00
2014-01-22 10:55:16 -08:00
2013-10-28 17:54:09 -07:00
2014-01-22 10:45:26 -08:00
2014-01-29 20:40:41 -08:00
2013-12-03 11:17:58 -08:00
2013-10-28 17:54:09 -07:00
2013-10-25 08:32:14 -07:00
2014-01-29 20:40:41 -08:00
2014-01-29 20:40:41 -08:00
2014-01-27 14:49:10 -08:00
2014-01-27 14:49:10 -08:00
2014-01-27 14:49:10 -08:00
2014-01-17 12:46:06 -08:00
2014-01-17 12:46:06 -08:00
2013-12-03 12:42:15 -08:00
2013-12-03 12:42:15 -08:00
2014-01-14 15:27:09 -08:00
2014-01-23 16:26:08 -08:00
2014-01-16 14:06:53 -08:00
2014-01-16 14:06:53 -08:00
2014-01-17 12:46:06 -08:00