1 |
blueness 14/06/30 01:08:11 |
2 |
|
3 |
Added: leveldb-1.9.0-forwardcompat.patch |
4 |
Log: |
5 |
Add forward compat patch, bug #506184 |
6 |
|
7 |
(Portage version: 2.2.8-r1/cvs/Linux x86_64, signed Manifest commit with key 0xF52D4BBA) |
8 |
|
9 |
Revision Changes Path |
10 |
1.1 dev-libs/leveldb/files/leveldb-1.9.0-forwardcompat.patch |
11 |
|
12 |
file : http://sources.gentoo.org/viewvc.cgi/gentoo-x86/dev-libs/leveldb/files/leveldb-1.9.0-forwardcompat.patch?rev=1.1&view=markup |
13 |
plain: http://sources.gentoo.org/viewvc.cgi/gentoo-x86/dev-libs/leveldb/files/leveldb-1.9.0-forwardcompat.patch?rev=1.1&content-type=text/plain |
14 |
|
15 |
Index: leveldb-1.9.0-forwardcompat.patch |
16 |
=================================================================== |
17 |
diff -ur leveldb-1.9.0.orig/db/db_test.cc leveldb-1.9.0/db/db_test.cc |
18 |
--- leveldb-1.9.0.orig/db/db_test.cc 2013-01-07 21:07:29.000000000 +0000 |
19 |
+++ leveldb-1.9.0/db/db_test.cc 2014-03-28 22:58:59.000000000 +0000 |
20 |
@@ -139,7 +139,7 @@ |
21 |
|
22 |
Status s = target()->NewWritableFile(f, r); |
23 |
if (s.ok()) { |
24 |
- if (strstr(f.c_str(), ".sst") != NULL) { |
25 |
+ if (strstr(f.c_str(), ".sst") != NULL || strstr(f.c_str(), ".ldb") != NULL) { |
26 |
*r = new SSTableFile(this, *r); |
27 |
} else if (strstr(f.c_str(), "MANIFEST") != NULL) { |
28 |
*r = new ManifestFile(this, *r); |
29 |
diff -ur leveldb-1.9.0.orig/db/filename.cc leveldb-1.9.0/db/filename.cc |
30 |
--- leveldb-1.9.0.orig/db/filename.cc 2013-01-07 21:07:29.000000000 +0000 |
31 |
+++ leveldb-1.9.0/db/filename.cc 2014-03-28 23:07:48.000000000 +0000 |
32 |
@@ -34,6 +34,11 @@ |
33 |
return MakeFileName(name, number, "sst"); |
34 |
} |
35 |
|
36 |
+std::string LDBTableFileName(const std::string& name, uint64_t number) { |
37 |
+ assert(number > 0); |
38 |
+ return MakeFileName(name, number, "ldb"); |
39 |
+} |
40 |
+ |
41 |
std::string DescriptorFileName(const std::string& dbname, uint64_t number) { |
42 |
assert(number > 0); |
43 |
char buf[100]; |
44 |
@@ -106,7 +111,7 @@ |
45 |
Slice suffix = rest; |
46 |
if (suffix == Slice(".log")) { |
47 |
*type = kLogFile; |
48 |
- } else if (suffix == Slice(".sst")) { |
49 |
+ } else if (suffix == Slice(".sst") || suffix == Slice(".ldb")) { |
50 |
*type = kTableFile; |
51 |
} else if (suffix == Slice(".dbtmp")) { |
52 |
*type = kTempFile; |
53 |
diff -ur leveldb-1.9.0.orig/db/filename.h leveldb-1.9.0/db/filename.h |
54 |
--- leveldb-1.9.0.orig/db/filename.h 2013-01-07 21:07:29.000000000 +0000 |
55 |
+++ leveldb-1.9.0/db/filename.h 2014-03-28 23:07:43.000000000 +0000 |
56 |
@@ -36,6 +36,7 @@ |
57 |
// in the db named by "dbname". The result will be prefixed with |
58 |
// "dbname". |
59 |
extern std::string TableFileName(const std::string& dbname, uint64_t number); |
60 |
+extern std::string LDBTableFileName(const std::string& dbname, uint64_t number); |
61 |
|
62 |
// Return the name of the descriptor file for the db named by |
63 |
// "dbname" and the specified incarnation number. The result will be |
64 |
diff -ur leveldb-1.9.0.orig/db/repair.cc leveldb-1.9.0/db/repair.cc |
65 |
--- leveldb-1.9.0.orig/db/repair.cc 2013-01-07 21:07:29.000000000 +0000 |
66 |
+++ leveldb-1.9.0/db/repair.cc 2014-03-28 23:13:28.000000000 +0000 |
67 |
@@ -263,6 +263,14 @@ |
68 |
std::string fname = TableFileName(dbname_, t->meta.number); |
69 |
int counter = 0; |
70 |
Status status = env_->GetFileSize(fname, &t->meta.file_size); |
71 |
+ if (!status.ok()) { |
72 |
+ // Try alternate file name. |
73 |
+ fname = LDBTableFileName(dbname_, t->meta.number); |
74 |
+ Status s2 = env_->GetFileSize(fname, &t->meta.file_size); |
75 |
+ if (s2.ok()) { |
76 |
+ status = Status::OK(); |
77 |
+ } |
78 |
+ } |
79 |
if (status.ok()) { |
80 |
Iterator* iter = table_cache_->NewIterator( |
81 |
ReadOptions(), t->meta.number, t->meta.file_size); |
82 |
diff -ur leveldb-1.9.0.orig/db/table_cache.cc leveldb-1.9.0/db/table_cache.cc |
83 |
--- leveldb-1.9.0.orig/db/table_cache.cc 2013-01-07 21:07:29.000000000 +0000 |
84 |
+++ leveldb-1.9.0/db/table_cache.cc 2014-03-28 23:12:39.000000000 +0000 |
85 |
@@ -54,6 +54,12 @@ |
86 |
RandomAccessFile* file = NULL; |
87 |
Table* table = NULL; |
88 |
s = env_->NewRandomAccessFile(fname, &file); |
89 |
+ if (!s.ok()) { |
90 |
+ std::string ldb_fname = LDBTableFileName(dbname_, file_number); |
91 |
+ if (env_->NewRandomAccessFile(ldb_fname, &file).ok()) { |
92 |
+ s = Status::OK(); |
93 |
+ } |
94 |
+ } |
95 |
if (s.ok()) { |
96 |
s = Table::Open(*options_, file, file_size, &table); |
97 |
} |