Fix crash in JNI getApproximateSizes (#6652)
Summary: This change is fixing a crash happening in getApproximateSizes JNI implementation. It also reenables Java test that was crashing most likelly because if this bug. Pull Request resolved: https://github.com/facebook/rocksdb/pull/6652 Reviewed By: cheng-chang Differential Revision: D20874865 Pulled By: pdillinger fbshipit-source-id: da95516f15e5df2efe1a4e5690a2ce172cb53f87
This commit is contained in:
parent
487ebe4fd5
commit
0b136308b0
@ -2277,10 +2277,11 @@ jlongArray Java_org_rocksdb_RocksDB_getApproximateSizes(
|
|||||||
|
|
||||||
auto ranges = std::unique_ptr<ROCKSDB_NAMESPACE::Range[]>(
|
auto ranges = std::unique_ptr<ROCKSDB_NAMESPACE::Range[]>(
|
||||||
new ROCKSDB_NAMESPACE::Range[range_count]);
|
new ROCKSDB_NAMESPACE::Range[range_count]);
|
||||||
|
size_t range_offset = 0;
|
||||||
for (jsize i = 0; i < jlen; ++i) {
|
for (jsize i = 0; i < jlen; ++i) {
|
||||||
auto* start = reinterpret_cast<ROCKSDB_NAMESPACE::Slice*>(jranges[i]);
|
auto* start = reinterpret_cast<ROCKSDB_NAMESPACE::Slice*>(jranges[i]);
|
||||||
auto* limit = reinterpret_cast<ROCKSDB_NAMESPACE::Slice*>(jranges[++i]);
|
auto* limit = reinterpret_cast<ROCKSDB_NAMESPACE::Slice*>(jranges[++i]);
|
||||||
ranges.get()[i] = ROCKSDB_NAMESPACE::Range(*start, *limit);
|
ranges.get()[range_offset++] = ROCKSDB_NAMESPACE::Range(*start, *limit);
|
||||||
}
|
}
|
||||||
|
|
||||||
auto* db = reinterpret_cast<ROCKSDB_NAMESPACE::DB*>(jdb_handle);
|
auto* db = reinterpret_cast<ROCKSDB_NAMESPACE::DB*>(jdb_handle);
|
||||||
|
@ -1221,7 +1221,6 @@ public class RocksDBTest {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Ignore("This test crashes. Re-enable after fixing.")
|
|
||||||
@Test
|
@Test
|
||||||
public void getApproximateSizes() throws RocksDBException {
|
public void getApproximateSizes() throws RocksDBException {
|
||||||
final byte key1[] = "key1".getBytes(UTF_8);
|
final byte key1[] = "key1".getBytes(UTF_8);
|
||||||
@ -1236,7 +1235,7 @@ public class RocksDBTest {
|
|||||||
|
|
||||||
final long[] sizes = db.getApproximateSizes(
|
final long[] sizes = db.getApproximateSizes(
|
||||||
Arrays.asList(
|
Arrays.asList(
|
||||||
new Range(new Slice(key1), new Slice(key2)),
|
new Range(new Slice(key1), new Slice(key1)),
|
||||||
new Range(new Slice(key2), new Slice(key3))
|
new Range(new Slice(key2), new Slice(key3))
|
||||||
),
|
),
|
||||||
SizeApproximationFlag.INCLUDE_FILES,
|
SizeApproximationFlag.INCLUDE_FILES,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user