From 72ee067b90796a54d5190089773e141943003074 Mon Sep 17 00:00:00 2001 From: Jermy Li Date: Thu, 27 Feb 2020 12:16:27 -0800 Subject: [PATCH] fix assert error while db.getDefaultColumnFamily().getDescriptor() (#6006) Summary: Threw assert error at assert(isOwningHandle()) in ColumnFamilyHandle.getDescriptor(), because default CF don't own a handle, due to [RocksDB.getDefaultColumnFamily()](https://github.com/facebook/rocksdb/blob/3a408eeae95614150ac930fc7f244524ed8c6f1c/java/src/main/java/org/rocksdb/RocksDB.java#L3702) called cfHandle.disOwnNativeHandle(). Pull Request resolved: https://github.com/facebook/rocksdb/pull/6006 Differential Revision: D19031448 fbshipit-source-id: 2420c45e835bda0e552e919b1b63708472b91538 --- java/src/main/java/org/rocksdb/ColumnFamilyHandle.java | 8 +++++++- java/src/test/java/org/rocksdb/ColumnFamilyTest.java | 1 + 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/java/src/main/java/org/rocksdb/ColumnFamilyHandle.java b/java/src/main/java/org/rocksdb/ColumnFamilyHandle.java index 9cda136b7..3a2e97efb 100644 --- a/java/src/main/java/org/rocksdb/ColumnFamilyHandle.java +++ b/java/src/main/java/org/rocksdb/ColumnFamilyHandle.java @@ -32,6 +32,7 @@ public class ColumnFamilyHandle extends RocksObject { * @throws RocksDBException if an error occurs whilst retrieving the name. */ public byte[] getName() throws RocksDBException { + assert(isOwningHandle() || isDefaultColumnFamily()); return getName(nativeHandle_); } @@ -41,6 +42,7 @@ public class ColumnFamilyHandle extends RocksObject { * @return the ID of the Column Family. */ public int getID() { + assert(isOwningHandle() || isDefaultColumnFamily()); return getID(nativeHandle_); } @@ -59,7 +61,7 @@ public class ColumnFamilyHandle extends RocksObject { * descriptor. */ public ColumnFamilyDescriptor getDescriptor() throws RocksDBException { - assert(isOwningHandle()); + assert(isOwningHandle() || isDefaultColumnFamily()); return getDescriptor(nativeHandle_); } @@ -91,6 +93,10 @@ public class ColumnFamilyHandle extends RocksObject { } } + protected boolean isDefaultColumnFamily() { + return nativeHandle_ == rocksDB_.getDefaultColumnFamily().nativeHandle_; + } + /** *

Deletes underlying C++ iterator pointer.

* diff --git a/java/src/test/java/org/rocksdb/ColumnFamilyTest.java b/java/src/test/java/org/rocksdb/ColumnFamilyTest.java index cc8199ec4..a9a087635 100644 --- a/java/src/test/java/org/rocksdb/ColumnFamilyTest.java +++ b/java/src/test/java/org/rocksdb/ColumnFamilyTest.java @@ -75,6 +75,7 @@ public class ColumnFamilyTest { assertThat(cfh.getName()).isEqualTo("default".getBytes(UTF_8)); assertThat(cfh.getID()).isEqualTo(0); + assertThat(cfh.getDescriptor().getName()).isEqualTo("default".getBytes(UTF_8)); final byte[] key = "key".getBytes(); final byte[] value = "value".getBytes();