diff --git a/db/builder.cc b/db/builder.cc index 34a7b873f..f41988219 100644 --- a/db/builder.cc +++ b/db/builder.cc @@ -85,4 +85,4 @@ Status BuildTable(const std::string& dbname, return s; } -} +} // namespace leveldb diff --git a/db/builder.h b/db/builder.h index b2aeabf9f..62431fcf4 100644 --- a/db/builder.h +++ b/db/builder.h @@ -29,6 +29,6 @@ extern Status BuildTable(const std::string& dbname, Iterator* iter, FileMetaData* meta); -} +} // namespace leveldb #endif // STORAGE_LEVELDB_DB_BUILDER_H_ diff --git a/db/corruption_test.cc b/db/corruption_test.cc index 1edcd84b7..31b2d5f41 100644 --- a/db/corruption_test.cc +++ b/db/corruption_test.cc @@ -352,7 +352,7 @@ TEST(CorruptionTest, UnrelatedKeys) { ASSERT_EQ(Value(1000, &tmp2).ToString(), v); } -} +} // namespace leveldb int main(int argc, char** argv) { return leveldb::test::RunAllTests(); diff --git a/db/db_bench.cc b/db/db_bench.cc index cf9bb6583..bbfd618e9 100644 --- a/db/db_bench.cc +++ b/db/db_bench.cc @@ -288,7 +288,7 @@ struct ThreadState { } }; -} +} // namespace class Benchmark { private: @@ -829,7 +829,7 @@ class Benchmark { } }; -} +} // namespace leveldb int main(int argc, char** argv) { FLAGS_write_buffer_size = leveldb::Options().write_buffer_size; diff --git a/db/db_impl.cc b/db/db_impl.cc index 56182a07d..b4df80d53 100644 --- a/db/db_impl.cc +++ b/db/db_impl.cc @@ -985,7 +985,7 @@ static void CleanupIteratorState(void* arg1, void* arg2) { state->mu->Unlock(); delete state; } -} +} // namespace Iterator* DBImpl::NewInternalIterator(const ReadOptions& options, SequenceNumber* latest_snapshot) { @@ -1378,4 +1378,4 @@ Status DestroyDB(const std::string& dbname, const Options& options) { return result; } -} +} // namespace leveldb diff --git a/db/db_impl.h b/db/db_impl.h index ab0318110..fc40d1e45 100644 --- a/db/db_impl.h +++ b/db/db_impl.h @@ -187,6 +187,6 @@ extern Options SanitizeOptions(const std::string& db, const InternalKeyComparator* icmp, const Options& src); -} +} // namespace leveldb #endif // STORAGE_LEVELDB_DB_DB_IMPL_H_ diff --git a/db/db_iter.cc b/db/db_iter.cc index 8849f928c..87dca2ded 100644 --- a/db/db_iter.cc +++ b/db/db_iter.cc @@ -296,4 +296,4 @@ Iterator* NewDBIterator( return new DBIter(dbname, env, user_key_comparator, internal_iter, sequence); } -} +} // namespace leveldb diff --git a/db/db_iter.h b/db/db_iter.h index 195f3d3d6..d9e1b174a 100644 --- a/db/db_iter.h +++ b/db/db_iter.h @@ -21,6 +21,6 @@ extern Iterator* NewDBIterator( Iterator* internal_iter, const SequenceNumber& sequence); -} +} // namespace leveldb #endif // STORAGE_LEVELDB_DB_DB_ITER_H_ diff --git a/db/db_test.cc b/db/db_test.cc index ab71c5170..f1cb94921 100644 --- a/db/db_test.cc +++ b/db/db_test.cc @@ -136,6 +136,33 @@ class DBTest { return result; } + // Return a string that contains all key,value pairs in order, + // formatted like "(k1->v1)(k2->v2)". + std::string Contents() { + std::vector forward; + std::string result; + Iterator* iter = db_->NewIterator(ReadOptions()); + for (iter->SeekToFirst(); iter->Valid(); iter->Next()) { + std::string s = IterStatus(iter); + result.push_back('('); + result.append(s); + result.push_back(')'); + forward.push_back(s); + } + + // Check reverse iteration results are the reverse of forward results + int matched = 0; + for (iter->SeekToLast(); iter->Valid(); iter->Prev()) { + ASSERT_LT(matched, forward.size()); + ASSERT_EQ(IterStatus(iter), forward[forward.size() - matched - 1]); + matched++; + } + ASSERT_EQ(matched, forward.size()); + + delete iter; + return result; + } + std::string AllEntriesFor(const Slice& user_key) { Iterator* iter = dbfull()->TEST_NewInternalIterator(); InternalKey target(user_key, kMaxSequenceNumber, kTypeValue); @@ -1048,6 +1075,49 @@ TEST(DBTest, OverlapInLevel0) { ASSERT_EQ("NOT_FOUND", Get("600")); } +TEST(DBTest, L0_CompactionBug_Issue44_a) { + Reopen(); + ASSERT_OK(Put("b", "v")); + Reopen(); + ASSERT_OK(Delete("b")); + ASSERT_OK(Delete("a")); + Reopen(); + ASSERT_OK(Delete("a")); + Reopen(); + ASSERT_OK(Put("a", "v")); + Reopen(); + Reopen(); + ASSERT_EQ("(a->v)", Contents()); + env_->SleepForMicroseconds(1000000); // Wait for compaction to finish + ASSERT_EQ("(a->v)", Contents()); +} + +TEST(DBTest, L0_CompactionBug_Issue44_b) { + Reopen(); + Put("",""); + Reopen(); + Delete("e"); + Put("",""); + Reopen(); + Put("c", "cv"); + Reopen(); + Put("",""); + Reopen(); + Put("",""); + env_->SleepForMicroseconds(1000000); // Wait for compaction to finish + Reopen(); + Put("d","dv"); + Reopen(); + Put("",""); + Reopen(); + Delete("d"); + Delete("b"); + Reopen(); + ASSERT_EQ("(->)(c->cv)", Contents()); + env_->SleepForMicroseconds(1000000); // Wait for compaction to finish + ASSERT_EQ("(->)(c->cv)", Contents()); +} + TEST(DBTest, ComparatorCheck) { class NewComparator : public Comparator { public: @@ -1071,6 +1141,34 @@ TEST(DBTest, ComparatorCheck) { << s.ToString(); } +TEST(DBTest, CustomComparator) { + class NumberComparator : public Comparator { + public: + virtual const char* Name() const { return "test.NumberComparator"; } + virtual int Compare(const Slice& a, const Slice& b) const { + return (strtol(a.ToString().c_str(), NULL, 0) - + strtol(b.ToString().c_str(), NULL, 0)); + } + virtual void FindShortestSeparator(std::string* s, const Slice& l) const {} + virtual void FindShortSuccessor(std::string* key) const {} + }; + NumberComparator cmp; + Options new_options; + new_options.create_if_missing = true; + new_options.comparator = &cmp; + DestroyAndReopen(&new_options); + ASSERT_OK(Put("10", "ten")); + ASSERT_OK(Put("0x14", "twenty")); + for (int i = 0; i < 2; i++) { + ASSERT_EQ("ten", Get("10")); + ASSERT_EQ("ten", Get("0xa")); + ASSERT_EQ("twenty", Get("20")); + ASSERT_EQ("twenty", Get("0x14")); + Compact("0", "9999"); + fprintf(stderr, "ss\n%s\n", DumpSSTableList().c_str()); + } +} + TEST(DBTest, ManualCompaction) { ASSERT_EQ(config::kMaxMemCompactLevel, 2) << "Need to update this test to match kMaxMemCompactLevel"; @@ -1207,7 +1305,7 @@ static void MTThreadBody(void* arg) { fprintf(stderr, "... stopping thread %d after %d ops\n", t->id, int(counter)); } -} +} // namespace TEST(DBTest, MultiThreaded) { // Initialize state @@ -1525,7 +1623,7 @@ void BM_LogAndApply(int iters, int num_base_files) { buf, iters, us, ((float)us) / iters); } -} +} // namespace leveldb int main(int argc, char** argv) { if (argc > 1 && std::string(argv[1]) == "--benchmark") { diff --git a/db/dbformat.cc b/db/dbformat.cc index 4fb3531ad..4594a5700 100644 --- a/db/dbformat.cc +++ b/db/dbformat.cc @@ -115,4 +115,4 @@ LookupKey::LookupKey(const Slice& user_key, SequenceNumber s) { end_ = dst; } -} +} // namespace leveldb diff --git a/db/dbformat.h b/db/dbformat.h index d046990f3..044717dbf 100644 --- a/db/dbformat.h +++ b/db/dbformat.h @@ -37,7 +37,7 @@ static const int kL0_StopWritesTrigger = 12; // space if the same key space is being repeatedly overwritten. static const int kMaxMemCompactLevel = 2; -} +} // namespace config class InternalKey; @@ -210,6 +210,6 @@ inline LookupKey::~LookupKey() { if (start_ != space_) delete[] start_; } -} +} // namespace leveldb #endif // STORAGE_LEVELDB_DB_FORMAT_H_ diff --git a/db/dbformat_test.cc b/db/dbformat_test.cc index 57c557803..5d82f5d31 100644 --- a/db/dbformat_test.cc +++ b/db/dbformat_test.cc @@ -105,7 +105,7 @@ TEST(FormatTest, InternalKeyShortestSuccessor) { ShortSuccessor(IKey("\xff\xff", 100, kTypeValue))); } -} +} // namespace leveldb int main(int argc, char** argv) { return leveldb::test::RunAllTests(); diff --git a/db/filename.cc b/db/filename.cc index b3a917c69..24fd14091 100644 --- a/db/filename.cc +++ b/db/filename.cc @@ -132,4 +132,4 @@ Status SetCurrentFile(Env* env, const std::string& dbname, return s; } -} +} // namespace leveldb diff --git a/db/filename.h b/db/filename.h index e9ec8a784..d5d09b114 100644 --- a/db/filename.h +++ b/db/filename.h @@ -75,6 +75,6 @@ extern Status SetCurrentFile(Env* env, const std::string& dbname, uint64_t descriptor_number); -} +} // namespace leveldb #endif // STORAGE_LEVELDB_DB_FILENAME_H_ diff --git a/db/filename_test.cc b/db/filename_test.cc index 2f61e8d42..47353d6c9 100644 --- a/db/filename_test.cc +++ b/db/filename_test.cc @@ -115,7 +115,7 @@ TEST(FileNameTest, Construction) { ASSERT_EQ(kTempFile, type); } -} +} // namespace leveldb int main(int argc, char** argv) { return leveldb::test::RunAllTests(); diff --git a/db/log_format.h b/db/log_format.h index 353eff892..2690cb978 100644 --- a/db/log_format.h +++ b/db/log_format.h @@ -29,7 +29,7 @@ static const int kBlockSize = 32768; // Header is checksum (4 bytes), type (1 byte), length (2 bytes). static const int kHeaderSize = 4 + 1 + 2; -} -} +} // namespace log +} // namespace leveldb #endif // STORAGE_LEVELDB_DB_LOG_FORMAT_H_ diff --git a/db/log_reader.cc b/db/log_reader.cc index fcb3aa7ef..b35f115aa 100644 --- a/db/log_reader.cc +++ b/db/log_reader.cc @@ -255,5 +255,5 @@ unsigned int Reader::ReadPhysicalRecord(Slice* result) { } } -} -} +} // namespace log +} // namespace leveldb diff --git a/db/log_reader.h b/db/log_reader.h index 61cc41496..82d4bee68 100644 --- a/db/log_reader.h +++ b/db/log_reader.h @@ -102,7 +102,7 @@ class Reader { void operator=(const Reader&); }; -} -} +} // namespace log +} // namespace leveldb #endif // STORAGE_LEVELDB_DB_LOG_READER_H_ diff --git a/db/log_test.cc b/db/log_test.cc index 06e08935f..4c5cf8757 100644 --- a/db/log_test.cc +++ b/db/log_test.cc @@ -492,8 +492,8 @@ TEST(LogTest, ReadPastEnd) { CheckOffsetPastEndReturnsNoRecords(5); } -} -} +} // namespace log +} // namespace leveldb int main(int argc, char** argv) { return leveldb::test::RunAllTests(); diff --git a/db/log_writer.cc b/db/log_writer.cc index 0887f6c8b..2da99ac08 100644 --- a/db/log_writer.cc +++ b/db/log_writer.cc @@ -99,5 +99,5 @@ Status Writer::EmitPhysicalRecord(RecordType t, const char* ptr, size_t n) { return s; } -} -} +} // namespace log +} // namespace leveldb diff --git a/db/log_writer.h b/db/log_writer.h index d3cf27d35..a3a954d96 100644 --- a/db/log_writer.h +++ b/db/log_writer.h @@ -42,7 +42,7 @@ class Writer { void operator=(const Writer&); }; -} -} +} // namespace log +} // namespace leveldb #endif // STORAGE_LEVELDB_DB_LOG_WRITER_H_ diff --git a/db/memtable.cc b/db/memtable.cc index 4555abb0f..bfec0a7e7 100644 --- a/db/memtable.cc +++ b/db/memtable.cc @@ -142,4 +142,4 @@ bool MemTable::Get(const LookupKey& key, std::string* value, Status* s) { return false; } -} +} // namespace leveldb diff --git a/db/memtable.h b/db/memtable.h index 1898b5e1b..92e90bb09 100644 --- a/db/memtable.h +++ b/db/memtable.h @@ -86,6 +86,6 @@ class MemTable { void operator=(const MemTable&); }; -} +} // namespace leveldb #endif // STORAGE_LEVELDB_DB_MEMTABLE_H_ diff --git a/db/repair.cc b/db/repair.cc index 5bcdb5651..511c66b8d 100644 --- a/db/repair.cc +++ b/db/repair.cc @@ -377,11 +377,11 @@ class Repairer { fname.c_str(), s.ToString().c_str()); } }; -} +} // namespace Status RepairDB(const std::string& dbname, const Options& options) { Repairer repairer(dbname, options); return repairer.Run(); } -} +} // namespace leveldb diff --git a/db/skiplist.h b/db/skiplist.h index be393543a..0481575b2 100644 --- a/db/skiplist.h +++ b/db/skiplist.h @@ -375,4 +375,4 @@ bool SkipList::Contains(const Key& key) const { } } -} +} // namespace leveldb diff --git a/db/skiplist_test.cc b/db/skiplist_test.cc index 2bd8d2275..c78f4b4fb 100644 --- a/db/skiplist_test.cc +++ b/db/skiplist_test.cc @@ -371,7 +371,7 @@ TEST(SkipTest, Concurrent3) { RunConcurrent(3); } TEST(SkipTest, Concurrent4) { RunConcurrent(4); } TEST(SkipTest, Concurrent5) { RunConcurrent(5); } -} +} // namespace leveldb int main(int argc, char** argv) { return leveldb::test::RunAllTests(); diff --git a/db/snapshot.h b/db/snapshot.h index a08dbd31b..e7f8fd2c3 100644 --- a/db/snapshot.h +++ b/db/snapshot.h @@ -61,6 +61,6 @@ class SnapshotList { SnapshotImpl list_; }; -} +} // namespace leveldb #endif // STORAGE_LEVELDB_DB_SNAPSHOT_H_ diff --git a/db/table_cache.cc b/db/table_cache.cc index 325d707ad..cae79bdf8 100644 --- a/db/table_cache.cc +++ b/db/table_cache.cc @@ -92,4 +92,4 @@ void TableCache::Evict(uint64_t file_number) { cache_->Erase(Slice(buf, sizeof(buf))); } -} +} // namespace leveldb diff --git a/db/table_cache.h b/db/table_cache.h index 53761944d..0f3c73b76 100644 --- a/db/table_cache.h +++ b/db/table_cache.h @@ -45,6 +45,6 @@ class TableCache { Cache* cache_; }; -} +} // namespace leveldb #endif // STORAGE_LEVELDB_DB_TABLE_CACHE_H_ diff --git a/db/version_edit.cc b/db/version_edit.cc index 9891c3236..f10a2d58b 100644 --- a/db/version_edit.cc +++ b/db/version_edit.cc @@ -263,4 +263,4 @@ std::string VersionEdit::DebugString() const { return r; } -} +} // namespace leveldb diff --git a/db/version_edit.h b/db/version_edit.h index a069893af..eaef77b32 100644 --- a/db/version_edit.h +++ b/db/version_edit.h @@ -102,6 +102,6 @@ class VersionEdit { std::vector< std::pair > new_files_; }; -} +} // namespace leveldb #endif // STORAGE_LEVELDB_DB_VERSION_EDIT_H_ diff --git a/db/version_edit_test.cc b/db/version_edit_test.cc index 67959f7f5..280310b49 100644 --- a/db/version_edit_test.cc +++ b/db/version_edit_test.cc @@ -39,7 +39,7 @@ TEST(VersionEditTest, EncodeDecode) { TestEncodeDecode(edit); } -} +} // namespace leveldb int main(int argc, char** argv) { return leveldb::test::RunAllTests(); diff --git a/db/version_set.cc b/db/version_set.cc index 8b96af003..7cf51976a 100644 --- a/db/version_set.cc +++ b/db/version_set.cc @@ -61,7 +61,7 @@ std::string IntSetToString(const std::set& s) { result += "}"; return result; } -} +} // namespace Version::~Version() { assert(refs_ == 0); @@ -253,7 +253,8 @@ void Version::AddIterators(const ReadOptions& options, // If "*iter" points at a value or deletion for user_key, store // either the value, or a NotFound error and return true. // Else return false. -static bool GetValue(Iterator* iter, const Slice& user_key, +static bool GetValue(const Comparator* cmp, + Iterator* iter, const Slice& user_key, std::string* value, Status* s) { if (!iter->Valid()) { @@ -264,7 +265,7 @@ static bool GetValue(Iterator* iter, const Slice& user_key, *s = Status::Corruption("corrupted key for ", user_key); return true; } - if (parsed_key.user_key != user_key) { + if (cmp->Compare(parsed_key.user_key, user_key) != 0) { return false; } switch (parsed_key.type) { @@ -360,7 +361,7 @@ Status Version::Get(const ReadOptions& options, f->number, f->file_size); iter->Seek(ikey); - const bool done = GetValue(iter, user_key, value, &s); + const bool done = GetValue(ucmp, iter, user_key, value, &s); if (!iter->status().ok()) { s = iter->status(); delete iter; @@ -450,16 +451,29 @@ void Version::GetOverlappingInputs( user_end = end->user_key(); } const Comparator* user_cmp = vset_->icmp_.user_comparator(); - for (size_t i = 0; i < files_[level].size(); i++) { - FileMetaData* f = files_[level][i]; - if (begin != NULL && - user_cmp->Compare(f->largest.user_key(), user_begin) < 0) { + for (size_t i = 0; i < files_[level].size(); ) { + FileMetaData* f = files_[level][i++]; + const Slice file_start = f->smallest.user_key(); + const Slice file_limit = f->largest.user_key(); + if (begin != NULL && user_cmp->Compare(file_limit, user_begin) < 0) { // "f" is completely before specified range; skip it - } else if (end != NULL && - user_cmp->Compare(f->smallest.user_key(), user_end) > 0) { + } else if (end != NULL && user_cmp->Compare(file_start, user_end) > 0) { // "f" is completely after specified range; skip it } else { inputs->push_back(f); + if (level == 0) { + // Level-0 files may overlap each other. So check if the newly + // added file has expanded the range. If so, restart search. + if (begin != NULL && user_cmp->Compare(file_start, user_begin) < 0) { + user_begin = file_start; + inputs->clear(); + i = 0; + } else if (end != NULL && user_cmp->Compare(file_limit, user_end) > 0) { + user_end = file_limit; + inputs->clear(); + i = 0; + } + } } } } @@ -1369,4 +1383,4 @@ void Compaction::ReleaseInputs() { } } -} +} // namespace leveldb diff --git a/db/version_set.h b/db/version_set.h index b866b2a1c..572602eb5 100644 --- a/db/version_set.h +++ b/db/version_set.h @@ -365,6 +365,6 @@ class Compaction { size_t level_ptrs_[config::kNumLevels]; }; -} +} // namespace leveldb #endif // STORAGE_LEVELDB_DB_VERSION_SET_H_ diff --git a/db/version_set_test.cc b/db/version_set_test.cc index 06f8bbd40..501e34d13 100644 --- a/db/version_set_test.cc +++ b/db/version_set_test.cc @@ -172,7 +172,7 @@ TEST(FindFileTest, OverlappingFiles) { ASSERT_TRUE(Overlaps("600", "700")); } -} +} // namespace leveldb int main(int argc, char** argv) { return leveldb::test::RunAllTests(); diff --git a/db/write_batch.cc b/db/write_batch.cc index 4e1e899d4..a0e812f33 100644 --- a/db/write_batch.cc +++ b/db/write_batch.cc @@ -120,7 +120,7 @@ class MemTableInserter : public WriteBatch::Handler { sequence_++; } }; -} +} // namespace Status WriteBatchInternal::InsertInto(const WriteBatch* b, MemTable* memtable) { @@ -135,4 +135,4 @@ void WriteBatchInternal::SetContents(WriteBatch* b, const Slice& contents) { b->rep_.assign(contents.data(), contents.size()); } -} +} // namespace leveldb diff --git a/db/write_batch_internal.h b/db/write_batch_internal.h index 6d65eed02..49aeb84fb 100644 --- a/db/write_batch_internal.h +++ b/db/write_batch_internal.h @@ -41,7 +41,7 @@ class WriteBatchInternal { static Status InsertInto(const WriteBatch* batch, MemTable* memtable); }; -} +} // namespace leveldb #endif // STORAGE_LEVELDB_DB_WRITE_BATCH_INTERNAL_H_ diff --git a/db/write_batch_test.cc b/db/write_batch_test.cc index 73d68fdda..1ee6d7b60 100644 --- a/db/write_batch_test.cc +++ b/db/write_batch_test.cc @@ -82,7 +82,7 @@ TEST(WriteBatchTest, Corruption) { PrintContents(&batch)); } -} +} // namespace leveldb int main(int argc, char** argv) { return leveldb::test::RunAllTests(); diff --git a/doc/bench/db_bench_sqlite3.cc b/doc/bench/db_bench_sqlite3.cc index e11db52c4..6951a1430 100644 --- a/doc/bench/db_bench_sqlite3.cc +++ b/doc/bench/db_bench_sqlite3.cc @@ -155,7 +155,7 @@ static Slice TrimSpace(Slice s) { return Slice(s.data() + start, limit - start); } -} +} // namespace class Benchmark { private: @@ -652,7 +652,7 @@ class Benchmark { }; -} +} // namespace leveldb int main(int argc, char** argv) { for (int i = 1; i < argc; i++) { diff --git a/doc/bench/db_bench_tree_db.cc b/doc/bench/db_bench_tree_db.cc index d42e3060d..214d9b7a3 100644 --- a/doc/bench/db_bench_tree_db.cc +++ b/doc/bench/db_bench_tree_db.cc @@ -124,7 +124,7 @@ static Slice TrimSpace(Slice s) { return Slice(s.data() + start, limit - start); } -} +} // namespace class Benchmark { private: @@ -467,7 +467,7 @@ class Benchmark { } }; -} +} // namespace leveldb int main(int argc, char** argv) { for (int i = 1; i < argc; i++) { diff --git a/helpers/memenv/memenv.cc b/helpers/memenv/memenv.cc index dab80fe8f..2082083b3 100644 --- a/helpers/memenv/memenv.cc +++ b/helpers/memenv/memenv.cc @@ -365,10 +365,10 @@ class InMemoryEnv : public EnvWrapper { FileSystem file_map_; // Protected by mutex_. }; -} +} // namespace Env* NewMemEnv(Env* base_env) { return new InMemoryEnv(base_env); } -} +} // namespace leveldb diff --git a/helpers/memenv/memenv.h b/helpers/memenv/memenv.h index 835b944f4..03b88de76 100644 --- a/helpers/memenv/memenv.h +++ b/helpers/memenv/memenv.h @@ -15,6 +15,6 @@ class Env; // *base_env must remain live while the result is in use. Env* NewMemEnv(Env* base_env); -} +} // namespace leveldb #endif // STORAGE_LEVELDB_HELPERS_MEMENV_MEMENV_H_ diff --git a/helpers/memenv/memenv_test.cc b/helpers/memenv/memenv_test.cc index 3791dc38c..a44310fed 100644 --- a/helpers/memenv/memenv_test.cc +++ b/helpers/memenv/memenv_test.cc @@ -225,7 +225,7 @@ TEST(MemEnvTest, DBTest) { delete db; } -} +} // namespace leveldb int main(int argc, char** argv) { return leveldb::test::RunAllTests(); diff --git a/include/leveldb/cache.h b/include/leveldb/cache.h index 79196d19d..5e3b47637 100644 --- a/include/leveldb/cache.h +++ b/include/leveldb/cache.h @@ -94,6 +94,6 @@ class Cache { void operator=(const Cache&); }; -} +} // namespace leveldb #endif // STORAGE_LEVELDB_UTIL_CACHE_H_ diff --git a/include/leveldb/comparator.h b/include/leveldb/comparator.h index c215facfc..556b984c7 100644 --- a/include/leveldb/comparator.h +++ b/include/leveldb/comparator.h @@ -58,6 +58,6 @@ class Comparator { // must not be deleted. extern const Comparator* BytewiseComparator(); -} +} // namespace leveldb #endif // STORAGE_LEVELDB_INCLUDE_COMPARATOR_H_ diff --git a/include/leveldb/db.h b/include/leveldb/db.h index 7fb2965f7..c1182b759 100644 --- a/include/leveldb/db.h +++ b/include/leveldb/db.h @@ -155,6 +155,6 @@ Status DestroyDB(const std::string& name, const Options& options); // on a database that contains important information. Status RepairDB(const std::string& dbname, const Options& options); -} +} // namespace leveldb #endif // STORAGE_LEVELDB_INCLUDE_DB_H_ diff --git a/include/leveldb/env.h b/include/leveldb/env.h index a39d66f34..272066718 100644 --- a/include/leveldb/env.h +++ b/include/leveldb/env.h @@ -318,6 +318,6 @@ class EnvWrapper : public Env { Env* target_; }; -} +} // namespace leveldb #endif // STORAGE_LEVELDB_INCLUDE_ENV_H_ diff --git a/include/leveldb/iterator.h b/include/leveldb/iterator.h index 6821d853f..ad543eb46 100644 --- a/include/leveldb/iterator.h +++ b/include/leveldb/iterator.h @@ -95,6 +95,6 @@ extern Iterator* NewEmptyIterator(); // Return an empty iterator with the specified status. extern Iterator* NewErrorIterator(const Status& status); -} +} // namespace leveldb #endif // STORAGE_LEVELDB_INCLUDE_ITERATOR_H_ diff --git a/include/leveldb/options.h b/include/leveldb/options.h index 84ac7fca2..79111a019 100644 --- a/include/leveldb/options.h +++ b/include/leveldb/options.h @@ -182,6 +182,6 @@ struct WriteOptions { } }; -} +} // namespace leveldb #endif // STORAGE_LEVELDB_INCLUDE_OPTIONS_H_ diff --git a/include/leveldb/slice.h b/include/leveldb/slice.h index 7c66d1b85..74ea8fa49 100644 --- a/include/leveldb/slice.h +++ b/include/leveldb/slice.h @@ -103,7 +103,7 @@ inline int Slice::compare(const Slice& b) const { return r; } -} +} // namespace leveldb #endif // STORAGE_LEVELDB_INCLUDE_SLICE_H_ diff --git a/include/leveldb/status.h b/include/leveldb/status.h index 8fe4442de..3355fac4c 100644 --- a/include/leveldb/status.h +++ b/include/leveldb/status.h @@ -95,6 +95,6 @@ inline void Status::operator=(const Status& s) { } } -} +} // namespace leveldb #endif // STORAGE_LEVELDB_INCLUDE_STATUS_H_ diff --git a/include/leveldb/table.h b/include/leveldb/table.h index 35e5d22f3..0cbdd40c6 100644 --- a/include/leveldb/table.h +++ b/include/leveldb/table.h @@ -65,6 +65,6 @@ class Table { void operator=(const Table&); }; -} +} // namespace leveldb #endif // STORAGE_LEVELDB_INCLUDE_TABLE_H_ diff --git a/include/leveldb/table_builder.h b/include/leveldb/table_builder.h index 23851de43..9ac0868ac 100644 --- a/include/leveldb/table_builder.h +++ b/include/leveldb/table_builder.h @@ -86,6 +86,6 @@ class TableBuilder { void operator=(const TableBuilder&); }; -} +} // namespace leveldb #endif // STORAGE_LEVELDB_INCLUDE_TABLE_BUILDER_H_ diff --git a/include/leveldb/write_batch.h b/include/leveldb/write_batch.h index b4446c220..ee9aab68e 100644 --- a/include/leveldb/write_batch.h +++ b/include/leveldb/write_batch.h @@ -59,6 +59,6 @@ class WriteBatch { // Intentionally copyable }; -} +} // namespace leveldb #endif // STORAGE_LEVELDB_INCLUDE_WRITE_BATCH_H_ diff --git a/port/atomic_pointer.h b/port/atomic_pointer.h index c20b1bdfb..35ae5500d 100644 --- a/port/atomic_pointer.h +++ b/port/atomic_pointer.h @@ -138,7 +138,7 @@ class AtomicPointer { #undef ARCH_CPU_X86_FAMILY #undef ARCH_CPU_ARM_FAMILY -} // namespace leveldb::port -} // namespace leveldb +} // namespace port +} // namespace leveldb #endif // PORT_ATOMIC_POINTER_H_ diff --git a/port/port_android.cc b/port/port_android.cc index 240e9cacd..815abf299 100644 --- a/port/port_android.cc +++ b/port/port_android.cc @@ -60,5 +60,5 @@ void CondVar::SignalAll() { PthreadCall("broadcast", pthread_cond_broadcast(&cv_)); } -} -} +} // namespace port +} // namespace leveldb diff --git a/port/port_android.h b/port/port_android.h index d68b6c035..64cdcbf0f 100644 --- a/port/port_android.h +++ b/port/port_android.h @@ -150,7 +150,7 @@ inline bool GetHeapProfile(void (*func)(void*, const char*, int), void* arg) { return false; } -} -} +} // namespace port +} // namespace leveldb #endif // STORAGE_LEVELDB_PORT_PORT_ANDROID_H_ diff --git a/port/port_example.h b/port/port_example.h index 6bd9b49eb..036c7d1cf 100644 --- a/port/port_example.h +++ b/port/port_example.h @@ -119,7 +119,7 @@ extern bool Snappy_Uncompress(const char* input_data, size_t input_length, // The concatenation of all "data[0,n-1]" fragments is the heap profile. extern bool GetHeapProfile(void (*func)(void*, const char*, int), void* arg); -} -} +} // namespace port +} // namespace leveldb #endif // STORAGE_LEVELDB_PORT_PORT_EXAMPLE_H_ diff --git a/port/port_posix.cc b/port/port_posix.cc index e75da8b9f..c44cc99bd 100644 --- a/port/port_posix.cc +++ b/port/port_posix.cc @@ -46,5 +46,5 @@ void CondVar::SignalAll() { PthreadCall("broadcast", pthread_cond_broadcast(&cv_)); } -} -} +} // namespace port +} // namespace leveldb diff --git a/table/block.cc b/table/block.cc index c20bb38ce..40aa318ef 100644 --- a/table/block.cc +++ b/table/block.cc @@ -260,4 +260,4 @@ Iterator* Block::NewIterator(const Comparator* cmp) { } } -} +} // namespace leveldb diff --git a/table/block.h b/table/block.h index cdf059842..9eb6f0282 100644 --- a/table/block.h +++ b/table/block.h @@ -38,6 +38,6 @@ class Block { class Iter; }; -} +} // namespace leveldb #endif // STORAGE_LEVELDB_TABLE_BLOCK_H_ diff --git a/table/block_builder.cc b/table/block_builder.cc index d2ffa21be..db660cd07 100644 --- a/table/block_builder.cc +++ b/table/block_builder.cc @@ -106,4 +106,4 @@ void BlockBuilder::Add(const Slice& key, const Slice& value) { counter_++; } -} +} // namespace leveldb diff --git a/table/block_builder.h b/table/block_builder.h index bf92a0f19..5b545bd1a 100644 --- a/table/block_builder.h +++ b/table/block_builder.h @@ -52,6 +52,6 @@ class BlockBuilder { void operator=(const BlockBuilder&); }; -} +} // namespace leveldb #endif // STORAGE_LEVELDB_TABLE_BLOCK_BUILDER_H_ diff --git a/table/format.cc b/table/format.cc index ba7838c23..23728d8a2 100644 --- a/table/format.cc +++ b/table/format.cc @@ -132,4 +132,4 @@ Status ReadBlock(RandomAccessFile* file, return Status::OK(); } -} +} // namespace leveldb diff --git a/table/format.h b/table/format.h index a6ab964f5..2a3e1ac7c 100644 --- a/table/format.h +++ b/table/format.h @@ -98,6 +98,6 @@ inline BlockHandle::BlockHandle() size_(~static_cast(0)) { } -} +} // namespace leveldb #endif // STORAGE_LEVELDB_TABLE_FORMAT_H_ diff --git a/table/iterator.cc b/table/iterator.cc index 33bc8a242..3d1c87fde 100644 --- a/table/iterator.cc +++ b/table/iterator.cc @@ -54,7 +54,7 @@ class EmptyIterator : public Iterator { private: Status status_; }; -} +} // namespace Iterator* NewEmptyIterator() { return new EmptyIterator(Status::OK()); @@ -64,4 +64,4 @@ Iterator* NewErrorIterator(const Status& status) { return new EmptyIterator(status); } -} +} // namespace leveldb diff --git a/table/merger.cc b/table/merger.cc index 6ce06bb58..2dde4dc21 100644 --- a/table/merger.cc +++ b/table/merger.cc @@ -181,7 +181,7 @@ void MergingIterator::FindLargest() { } current_ = largest; } -} +} // namespace Iterator* NewMergingIterator(const Comparator* cmp, Iterator** list, int n) { assert(n >= 0); @@ -194,4 +194,4 @@ Iterator* NewMergingIterator(const Comparator* cmp, Iterator** list, int n) { } } -} +} // namespace leveldb diff --git a/table/merger.h b/table/merger.h index 71d9dc564..91ddd80fa 100644 --- a/table/merger.h +++ b/table/merger.h @@ -21,6 +21,6 @@ class Iterator; extern Iterator* NewMergingIterator( const Comparator* comparator, Iterator** children, int n); -} +} // namespace leveldb #endif // STORAGE_LEVELDB_TABLE_MERGER_H_ diff --git a/table/table.cc b/table/table.cc index 9820753b7..5f9238e0c 100644 --- a/table/table.cc +++ b/table/table.cc @@ -172,4 +172,4 @@ uint64_t Table::ApproximateOffsetOf(const Slice& key) const { return result; } -} +} // namespace leveldb diff --git a/table/table_builder.cc b/table/table_builder.cc index 7ec7ad261..682ce5b59 100644 --- a/table/table_builder.cc +++ b/table/table_builder.cc @@ -224,4 +224,4 @@ uint64_t TableBuilder::FileSize() const { return rep_->offset; } -} +} // namespace leveldb diff --git a/table/table_test.cc b/table/table_test.cc index c69a386dc..cd85b4b2c 100644 --- a/table/table_test.cc +++ b/table/table_test.cc @@ -60,7 +60,7 @@ class ReverseKeyComparator : public Comparator { *key = Reverse(s); } }; -} +} // namespace static ReverseKeyComparator reverse_key_comparator; static void Increment(const Comparator* cmp, std::string* key) { @@ -85,7 +85,7 @@ struct STLLessThan { return cmp->Compare(Slice(a), Slice(b)) < 0; } }; -} +} // namespace class StringSink: public WritableFile { public: @@ -847,7 +847,7 @@ TEST(TableTest, ApproximateOffsetOfCompressed) { ASSERT_TRUE(Between(c.ApproximateOffsetOf("xyz"), 4000, 6000)); } -} +} // namespace leveldb int main(int argc, char** argv) { return leveldb::test::RunAllTests(); diff --git a/table/two_level_iterator.cc b/table/two_level_iterator.cc index 24a12412d..7822ebab9 100644 --- a/table/two_level_iterator.cc +++ b/table/two_level_iterator.cc @@ -169,7 +169,7 @@ void TwoLevelIterator::InitDataBlock() { } } -} +} // namespace Iterator* NewTwoLevelIterator( Iterator* index_iter, @@ -179,4 +179,4 @@ Iterator* NewTwoLevelIterator( return new TwoLevelIterator(index_iter, block_function, arg, options); } -} +} // namespace leveldb diff --git a/table/two_level_iterator.h b/table/two_level_iterator.h index 5909e2b93..629ca3452 100644 --- a/table/two_level_iterator.h +++ b/table/two_level_iterator.h @@ -29,6 +29,6 @@ extern Iterator* NewTwoLevelIterator( void* arg, const ReadOptions& options); -} +} // namespace leveldb #endif // STORAGE_LEVELDB_TABLE_TWO_LEVEL_ITERATOR_H_ diff --git a/util/arena.cc b/util/arena.cc index 40ab99d92..9551d6a3a 100644 --- a/util/arena.cc +++ b/util/arena.cc @@ -65,4 +65,4 @@ char* Arena::AllocateNewBlock(size_t block_bytes) { return result; } -} +} // namespace leveldb diff --git a/util/arena.h b/util/arena.h index fcb5d5b83..8f7dde226 100644 --- a/util/arena.h +++ b/util/arena.h @@ -63,6 +63,6 @@ inline char* Arena::Allocate(size_t bytes) { return AllocateFallback(bytes); } -} +} // namespace leveldb #endif // STORAGE_LEVELDB_UTIL_ARENA_H_ diff --git a/util/arena_test.cc b/util/arena_test.cc index c33b55278..63d177803 100644 --- a/util/arena_test.cc +++ b/util/arena_test.cc @@ -61,7 +61,7 @@ TEST(ArenaTest, Simple) { } } -} +} // namespace leveldb int main(int argc, char** argv) { return leveldb::test::RunAllTests(); diff --git a/util/cache.cc b/util/cache.cc index 7d1ebc12b..24f1f63f4 100644 --- a/util/cache.cc +++ b/util/cache.cc @@ -325,4 +325,4 @@ Cache* NewLRUCache(size_t capacity) { return new ShardedLRUCache(capacity); } -} +} // namespace leveldb diff --git a/util/cache_test.cc b/util/cache_test.cc index 8a7f1c4c6..43716715a 100644 --- a/util/cache_test.cc +++ b/util/cache_test.cc @@ -179,7 +179,7 @@ TEST(CacheTest, NewId) { ASSERT_NE(a, b); } -} +} // namespace leveldb int main(int argc, char** argv) { return leveldb::test::RunAllTests(); diff --git a/util/coding.cc b/util/coding.cc index 14f21f79c..dbd7a6545 100644 --- a/util/coding.cc +++ b/util/coding.cc @@ -191,4 +191,4 @@ bool GetLengthPrefixedSlice(Slice* input, Slice* result) { } } -} +} // namespace leveldb diff --git a/util/coding.h b/util/coding.h index c47b9d8dd..3993c4a75 100644 --- a/util/coding.h +++ b/util/coding.h @@ -99,6 +99,6 @@ inline const char* GetVarint32Ptr(const char* p, return GetVarint32PtrFallback(p, limit, value); } -} +} // namespace leveldb #endif // STORAGE_LEVELDB_UTIL_CODING_H_ diff --git a/util/coding_test.cc b/util/coding_test.cc index a8dba0496..4cc856c06 100644 --- a/util/coding_test.cc +++ b/util/coding_test.cc @@ -166,7 +166,7 @@ TEST(Coding, Strings) { ASSERT_EQ("", input.ToString()); } -} +} // namespace leveldb int main(int argc, char** argv) { return leveldb::test::RunAllTests(); diff --git a/util/comparator.cc b/util/comparator.cc index 2d7544d79..cfb49ceed 100644 --- a/util/comparator.cc +++ b/util/comparator.cc @@ -63,11 +63,11 @@ class BytewiseComparatorImpl : public Comparator { // *key is a run of 0xffs. Leave it alone. } }; -} +} // namespace static const BytewiseComparatorImpl bytewise; const Comparator* BytewiseComparator() { return &bytewise; } -} +} // namespace leveldb diff --git a/util/crc32c.cc b/util/crc32c.cc index 28c24017c..6db9e7707 100644 --- a/util/crc32c.cc +++ b/util/crc32c.cc @@ -328,5 +328,5 @@ uint32_t Extend(uint32_t crc, const char* buf, size_t size) { return l ^ 0xffffffffu; } -} -} +} // namespace crc32c +} // namespace leveldb diff --git a/util/crc32c.h b/util/crc32c.h index 938d8ff34..1d7e5c075 100644 --- a/util/crc32c.h +++ b/util/crc32c.h @@ -39,7 +39,7 @@ inline uint32_t Unmask(uint32_t masked_crc) { return ((rot >> 17) | (rot << 15)); } -} -} +} // namespace crc32c +} // namespace leveldb #endif // STORAGE_LEVELDB_UTIL_CRC32C_H_ diff --git a/util/crc32c_test.cc b/util/crc32c_test.cc index ba9e80411..4b957ee12 100644 --- a/util/crc32c_test.cc +++ b/util/crc32c_test.cc @@ -64,8 +64,8 @@ TEST(CRC, Mask) { ASSERT_EQ(crc, Unmask(Unmask(Mask(Mask(crc))))); } -} -} +} // namespace crc32c +} // namespace leveldb int main(int argc, char** argv) { return leveldb::test::RunAllTests(); diff --git a/util/env.cc b/util/env.cc index 79e493e99..594811bdd 100644 --- a/util/env.cc +++ b/util/env.cc @@ -79,4 +79,4 @@ Status ReadFileToString(Env* env, const std::string& fname, std::string* data) { EnvWrapper::~EnvWrapper() { } -} +} // namespace leveldb diff --git a/util/env_posix.cc b/util/env_posix.cc index 5127c8932..cc733483b 100644 --- a/util/env_posix.cc +++ b/util/env_posix.cc @@ -553,7 +553,7 @@ void PosixEnv::StartThread(void (*function)(void* arg), void* arg) { pthread_create(&t, NULL, &StartThreadWrapper, state)); } -} +} // namespace static pthread_once_t once = PTHREAD_ONCE_INIT; static Env* default_env; @@ -564,4 +564,4 @@ Env* Env::Default() { return default_env; } -} +} // namespace leveldb diff --git a/util/env_test.cc b/util/env_test.cc index 3c253be18..3f8a8a2dc 100644 --- a/util/env_test.cc +++ b/util/env_test.cc @@ -95,7 +95,7 @@ TEST(EnvPosixTest, StartThread) { ASSERT_EQ(state.val, 3); } -} +} // namespace leveldb int main(int argc, char** argv) { return leveldb::test::RunAllTests(); diff --git a/util/hash.cc b/util/hash.cc index d19afd134..ba1818082 100644 --- a/util/hash.cc +++ b/util/hash.cc @@ -42,4 +42,4 @@ uint32_t Hash(const char* data, size_t n, uint32_t seed) { } -} +} // namespace leveldb diff --git a/util/histogram.cc b/util/histogram.cc index 12ec3cfcd..bb95f583e 100644 --- a/util/histogram.cc +++ b/util/histogram.cc @@ -136,4 +136,4 @@ std::string Histogram::ToString() const { return r; } -} +} // namespace leveldb diff --git a/util/histogram.h b/util/histogram.h index 32484c079..1ef9f3c8a 100644 --- a/util/histogram.h +++ b/util/histogram.h @@ -37,6 +37,6 @@ class Histogram { double StandardDeviation() const; }; -} +} // namespace leveldb #endif // STORAGE_LEVELDB_UTIL_HISTOGRAM_H_ diff --git a/util/logging.cc b/util/logging.cc index 760d33572..22cf27851 100644 --- a/util/logging.cc +++ b/util/logging.cc @@ -78,4 +78,4 @@ bool ConsumeDecimalNumber(Slice* in, uint64_t* val) { return (digits > 0); } -} +} // namespace leveldb diff --git a/util/logging.h b/util/logging.h index 1cd0a4b2d..b0c5da813 100644 --- a/util/logging.h +++ b/util/logging.h @@ -42,6 +42,6 @@ extern bool ConsumeChar(Slice* in, char c); // unspecified state. extern bool ConsumeDecimalNumber(Slice* in, uint64_t* val); -} +} // namespace leveldb #endif // STORAGE_LEVELDB_UTIL_LOGGING_H_ diff --git a/util/mutexlock.h b/util/mutexlock.h index 05fe2794e..c3f3306d3 100644 --- a/util/mutexlock.h +++ b/util/mutexlock.h @@ -33,7 +33,7 @@ class MutexLock { void operator=(const MutexLock&); }; -} +} // namespace leveldb #endif // STORAGE_LEVELDB_UTIL_MUTEXLOCK_H_ diff --git a/util/options.cc b/util/options.cc index 0ea5c98c9..bb9783843 100644 --- a/util/options.cc +++ b/util/options.cc @@ -25,4 +25,4 @@ Options::Options() } -} +} // namespace leveldb diff --git a/util/posix_logger.h b/util/posix_logger.h index 55428e52c..9741b1afa 100644 --- a/util/posix_logger.h +++ b/util/posix_logger.h @@ -93,6 +93,6 @@ class PosixLogger : public Logger { } }; -} +} // namespace leveldb #endif // STORAGE_LEVELDB_UTIL_POSIX_LOGGER_H_ diff --git a/util/random.h b/util/random.h index d886b4ec1..07538242e 100644 --- a/util/random.h +++ b/util/random.h @@ -54,6 +54,6 @@ class Random { } }; -} +} // namespace leveldb #endif // STORAGE_LEVELDB_UTIL_RANDOM_H_ diff --git a/util/status.cc b/util/status.cc index 02051a9da..a44f35b31 100644 --- a/util/status.cc +++ b/util/status.cc @@ -72,4 +72,4 @@ std::string Status::ToString() const { } } -} +} // namespace leveldb diff --git a/util/testharness.cc b/util/testharness.cc index 6f4270024..eb1bdd554 100644 --- a/util/testharness.cc +++ b/util/testharness.cc @@ -73,5 +73,5 @@ int RandomSeed() { return result; } -} -} +} // namespace test +} // namespace leveldb diff --git a/util/testharness.h b/util/testharness.h index 6f1a9c328..da4fe68bb 100644 --- a/util/testharness.h +++ b/util/testharness.h @@ -132,7 +132,7 @@ void TCONCAT(_Test_,name)::_Run() extern bool RegisterTest(const char* base, const char* name, void (*func)()); -} -} +} // namespace test +} // namespace leveldb #endif // STORAGE_LEVELDB_UTIL_TESTHARNESS_H_ diff --git a/util/testutil.cc b/util/testutil.cc index 8d6cf3c96..538d09516 100644 --- a/util/testutil.cc +++ b/util/testutil.cc @@ -47,5 +47,5 @@ extern Slice CompressibleString(Random* rnd, double compressed_fraction, return Slice(*dst); } -} -} +} // namespace test +} // namespace leveldb diff --git a/util/testutil.h b/util/testutil.h index a150c1a79..824e655bd 100644 --- a/util/testutil.h +++ b/util/testutil.h @@ -47,7 +47,7 @@ class ErrorEnv : public EnvWrapper { } }; -} -} +} // namespace test +} // namespace leveldb #endif // STORAGE_LEVELDB_UTIL_TESTUTIL_H_