Last active
December 21, 2015 04:18
-
-
Save luke-jr/6248543 to your computer and use it in GitHub Desktop.
Diff from current Bitcoin master (Ripple LevelDB 1.12 fork) to Bitcoin 1.7 fork merged with upstream LevelDB 1.12
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/.gitignore b/.gitignore | |
index 55ba072..71d87a4 100644 | |
--- a/.gitignore | |
+++ b/.gitignore | |
@@ -6,6 +6,7 @@ build_config.mk | |
*.so.* | |
*_test | |
db_bench | |
+leveldbutil | |
Release | |
Debug | |
Benchmark | |
diff --git a/Makefile b/Makefile | |
index 38b9bf7..96af776 100644 | |
--- a/Makefile | |
+++ b/Makefile | |
@@ -12,7 +12,7 @@ OPT ?= -O2 -DNDEBUG # (A) Production use (optimized mode) | |
#----------------------------------------------- | |
# detect what platform we're building on | |
-$(shell CC=$(CC) CXX=$(CXX) TARGET_OS=$(TARGET_OS) \ | |
+$(shell CC="$(CC)" CXX="$(CXX)" TARGET_OS="$(TARGET_OS)" \ | |
./build_detect_platform build_config.mk ./) | |
# this file is generated by the previous line to set build flags and sources | |
include build_config.mk | |
diff --git a/build_detect_platform b/build_detect_platform | |
index a3ad057..bdfd641 100755 | |
--- a/build_detect_platform | |
+++ b/build_detect_platform | |
@@ -44,6 +44,10 @@ if test -z "$CXX"; then | |
CXX=g++ | |
fi | |
+if test -z "$TMPDIR"; then | |
+ TMPDIR=/tmp | |
+fi | |
+ | |
# Detect OS | |
if test -z "$TARGET_OS"; then | |
TARGET_OS=`uname -s` | |
@@ -169,8 +173,10 @@ if [ "$CROSS_COMPILE" = "true" ]; then | |
# Cross-compiling; do not try any compilation tests. | |
true | |
else | |
+ CXXOUTPUT="${TMPDIR}/leveldb_build_detect_platform-cxx.$$" | |
+ | |
# If -std=c++0x works, use <cstdatomic>. Otherwise use port_posix.h. | |
- $CXX $CXXFLAGS -std=c++0x -x c++ - -o /dev/null 2>/dev/null <<EOF | |
+ $CXX $CXXFLAGS -std=c++0x -x c++ - -o $CXXOUTPUT 2>/dev/null <<EOF | |
#include <cstdatomic> | |
int main() {} | |
EOF | |
@@ -182,12 +188,14 @@ EOF | |
fi | |
# Test whether tcmalloc is available | |
- $CXX $CXXFLAGS -x c++ - -o /dev/null -ltcmalloc 2>/dev/null <<EOF | |
+ $CXX $CXXFLAGS -x c++ - -o $CXXOUTPUT -ltcmalloc 2>/dev/null <<EOF | |
int main() {} | |
EOF | |
if [ "$?" = 0 ]; then | |
PLATFORM_LIBS="$PLATFORM_LIBS -ltcmalloc" | |
fi | |
+ | |
+ rm -f $CXXOUTPUT 2>/dev/null | |
fi | |
PLATFORM_CCFLAGS="$PLATFORM_CCFLAGS $COMMON_FLAGS" | |
diff --git a/db/db_impl.cc b/db/db_impl.cc | |
index af02467..395d317 100644 | |
--- a/db/db_impl.cc | |
+++ b/db/db_impl.cc | |
@@ -822,9 +822,6 @@ Status DBImpl::FinishCompactionOutputFile(CompactionState* compact, | |
(unsigned long long) output_number, | |
(unsigned long long) current_entries, | |
(unsigned long long) current_bytes); | |
- | |
- // rate-limit compaction file creation with a 100ms pause | |
- env_->SleepForMicroseconds(100000); | |
} | |
} | |
return s; | |
diff --git a/issues/issue178_test.cc b/issues/issue178_test.cc | |
new file mode 100644 | |
index 0000000..1b1cf8b | |
--- /dev/null | |
+++ b/issues/issue178_test.cc | |
@@ -0,0 +1,92 @@ | |
+// Copyright (c) 2013 The LevelDB Authors. All rights reserved. | |
+// Use of this source code is governed by a BSD-style license that can be | |
+// found in the LICENSE file. See the AUTHORS file for names of contributors. | |
+ | |
+// Test for issue 178: a manual compaction causes deleted data to reappear. | |
+#include <iostream> | |
+#include <sstream> | |
+#include <cstdlib> | |
+ | |
+#include "leveldb/db.h" | |
+#include "leveldb/write_batch.h" | |
+#include "util/testharness.h" | |
+ | |
+namespace { | |
+ | |
+const int kNumKeys = 1100000; | |
+ | |
+std::string Key1(int i) { | |
+ char buf[100]; | |
+ snprintf(buf, sizeof(buf), "my_key_%d", i); | |
+ return buf; | |
+} | |
+ | |
+std::string Key2(int i) { | |
+ return Key1(i) + "_xxx"; | |
+} | |
+ | |
+class Issue178 { }; | |
+ | |
+TEST(Issue178, Test) { | |
+ // Get rid of any state from an old run. | |
+ std::string dbpath = leveldb::test::TmpDir() + "/leveldb_cbug_test"; | |
+ DestroyDB(dbpath, leveldb::Options()); | |
+ | |
+ // Open database. Disable compression since it affects the creation | |
+ // of layers and the code below is trying to test against a very | |
+ // specific scenario. | |
+ leveldb::DB* db; | |
+ leveldb::Options db_options; | |
+ db_options.create_if_missing = true; | |
+ db_options.compression = leveldb::kNoCompression; | |
+ ASSERT_OK(leveldb::DB::Open(db_options, dbpath, &db)); | |
+ | |
+ // create first key range | |
+ leveldb::WriteBatch batch; | |
+ for (size_t i = 0; i < kNumKeys; i++) { | |
+ batch.Put(Key1(i), "value for range 1 key"); | |
+ } | |
+ ASSERT_OK(db->Write(leveldb::WriteOptions(), &batch)); | |
+ | |
+ // create second key range | |
+ batch.Clear(); | |
+ for (size_t i = 0; i < kNumKeys; i++) { | |
+ batch.Put(Key2(i), "value for range 2 key"); | |
+ } | |
+ ASSERT_OK(db->Write(leveldb::WriteOptions(), &batch)); | |
+ | |
+ // delete second key range | |
+ batch.Clear(); | |
+ for (size_t i = 0; i < kNumKeys; i++) { | |
+ batch.Delete(Key2(i)); | |
+ } | |
+ ASSERT_OK(db->Write(leveldb::WriteOptions(), &batch)); | |
+ | |
+ // compact database | |
+ std::string start_key = Key1(0); | |
+ std::string end_key = Key1(kNumKeys - 1); | |
+ leveldb::Slice least(start_key.data(), start_key.size()); | |
+ leveldb::Slice greatest(end_key.data(), end_key.size()); | |
+ | |
+ // commenting out the line below causes the example to work correctly | |
+ db->CompactRange(&least, &greatest); | |
+ | |
+ // count the keys | |
+ leveldb::Iterator* iter = db->NewIterator(leveldb::ReadOptions()); | |
+ size_t num_keys = 0; | |
+ for (iter->SeekToFirst(); iter->Valid(); iter->Next()) { | |
+ num_keys++; | |
+ } | |
+ delete iter; | |
+ ASSERT_EQ(kNumKeys, num_keys) << "Bad number of keys"; | |
+ | |
+ // close database | |
+ delete db; | |
+ DestroyDB(dbpath, leveldb::Options()); | |
+} | |
+ | |
+} // anonymous namespace | |
+ | |
+int main(int argc, char** argv) { | |
+ return leveldb::test::RunAllTests(); | |
+} | |
diff --git a/port/port_win.cc b/port/port_win.cc | |
index 1b0f060..99c1d8e 100644 | |
--- a/port/port_win.cc | |
+++ b/port/port_win.cc | |
@@ -109,11 +109,13 @@ void CondVar::Signal() { | |
void CondVar::SignalAll() { | |
wait_mtx_.Lock(); | |
- ::ReleaseSemaphore(sem1_, waiting_, NULL); | |
+ for(long i = 0; i < waiting_; ++i) { | |
+ ::ReleaseSemaphore(sem1_, 1, NULL); | |
while(waiting_ > 0) { | |
--waiting_; | |
::WaitForSingleObject(sem2_, INFINITE); | |
} | |
+ } | |
wait_mtx_.Unlock(); | |
} | |
diff --git a/util/comparator.cc b/util/comparator.cc | |
index 6cc3192..4b7b572 100644 | |
--- a/util/comparator.cc | |
+++ b/util/comparator.cc | |
@@ -66,7 +66,7 @@ class BytewiseComparatorImpl : public Comparator { | |
}; | |
} // namespace | |
-static port::OnceType once_comparator = LEVELDB_ONCE_INIT; | |
+static port::OnceType once = LEVELDB_ONCE_INIT; | |
static const Comparator* bytewise; | |
static void InitModule() { | |
@@ -74,7 +74,7 @@ static void InitModule() { | |
} | |
const Comparator* BytewiseComparator() { | |
- port::InitOnce(&once_comparator, InitModule); | |
+ port::InitOnce(&once, InitModule); | |
return bytewise; | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment