}
jmethodID mid = env->GetMethodID(
- jclazz, "<init>", "(Ljava/lang/String;Ljava/lang/String;JJJ[B[BJZJJ)V");
+ jclazz, "<init>",
+ "(Ljava/lang/String;Ljava/lang/String;JJJ[B[BJZJJ[B)V");
if (mid == nullptr) {
// exception thrown: NoSuchMethodException or OutOfMemoryError
return nullptr;
return nullptr;
}
+ jbyteArray jfile_checksum = ROCKSDB_NAMESPACE::JniUtil::copyBytes(
+ env, sst_file_meta_data->file_checksum);
+ if (env->ExceptionCheck()) {
+ // exception occurred creating java string
+ env->DeleteLocalRef(jfile_name);
+ env->DeleteLocalRef(jpath);
+ env->DeleteLocalRef(jsmallest_key);
+ env->DeleteLocalRef(jlargest_key);
+ return nullptr;
+ }
+
jobject jsst_file_meta_data = env->NewObject(
jclazz, mid, jfile_name, jpath,
static_cast<jlong>(sst_file_meta_data->size),
jlargest_key, static_cast<jlong>(sst_file_meta_data->num_reads_sampled),
static_cast<jboolean>(sst_file_meta_data->being_compacted),
static_cast<jlong>(sst_file_meta_data->num_entries),
- static_cast<jlong>(sst_file_meta_data->num_deletions));
+ static_cast<jlong>(sst_file_meta_data->num_deletions), jfile_checksum);
if (env->ExceptionCheck()) {
env->DeleteLocalRef(jfile_name);
env->DeleteLocalRef(jpath);
env->DeleteLocalRef(jsmallest_key);
env->DeleteLocalRef(jlargest_key);
+ env->DeleteLocalRef(jfile_checksum);
return nullptr;
}
env->DeleteLocalRef(jpath);
env->DeleteLocalRef(jsmallest_key);
env->DeleteLocalRef(jlargest_key);
+ env->DeleteLocalRef(jfile_checksum);
return jsst_file_meta_data;
}
}
}
+ @Test
+ public void getColumnFamilyMetadataWithChecksum() throws RocksDBException {
+ final Properties props = new Properties();
+ props.put("file_checksum_gen_factory", "FileChecksumGenCrc32cFactory");
+ final String dbPath = dbFolder.getRoot().getAbsolutePath();
+
+ try (final DBOptions dbOptions = DBOptions.getDBOptionsFromProps(props);
+ final ColumnFamilyOptions cfOptions = new ColumnFamilyOptions();
+ final Options options = new Options(dbOptions, cfOptions).setCreateIfMissing(true)) {
+ try (final RocksDB db = RocksDB.open(options, dbPath);
+ final WriteOptions writeOptions = new WriteOptions().setDisableWAL(true)) {
+ db.put("key".getBytes(UTF_8), "value".getBytes(UTF_8));
+ }
+
+ try (final RocksDB db = RocksDB.open(options, dbFolder.getRoot().getAbsolutePath())) {
+ ColumnFamilyMetaData metadata = db.getColumnFamilyMetaData(); // Exception here
+ List<LevelMetaData> levels = metadata.levels();
+ assertThat(levels).isNotEmpty();
+ List<SstFileMetaData> filesMetadata = levels.get(0).files();
+ assertThat(filesMetadata).isNotEmpty();
+ assertThat(filesMetadata.get(0).fileChecksum()).isNotNull();
+ assertThat(filesMetadata.get(0).fileChecksum()).hasSize(4);
+ assertThat(filesMetadata.get(0).fileChecksum()).isNotEqualTo(new byte[] {0, 0, 0, 0});
+ }
+ }
+ }
+
@Ignore("TODO(AR) re-enable when ready!")
@Test
public void compactFiles() throws RocksDBException {