From 491fa696fa8d2676b1f424b06734d7a823d6ea79 Mon Sep 17 00:00:00 2001 From: Mikhail Antonov Date: Wed, 29 Mar 2017 17:13:43 -0700 Subject: [PATCH] Added SstFileWriter construtor without explicit comparator to JNI api Summary: Adding API missing after https://github.com/facebook/rocksdb/commit/1ffbdfd9a7637b6517053842386d71df2cd00d9b#diff-b94146418eed4a9c1bf324041b95b279. adamretter IslamAbdelRahman Tested locally. Closes https://github.com/facebook/rocksdb/pull/2028 Differential Revision: D4762817 Pulled By: IslamAbdelRahman fbshipit-source-id: 833f478 --- java/rocksjni/sst_file_writerjni.cc | 18 +++++++- .../main/java/org/rocksdb/SstFileWriter.java | 8 ++++ .../java/org/rocksdb/SstFileWriterTest.java | 42 ++++++++++++++----- 3 files changed, 57 insertions(+), 11 deletions(-) diff --git a/java/rocksjni/sst_file_writerjni.cc b/java/rocksjni/sst_file_writerjni.cc index fe3ec394036..879f93e0781 100644 --- a/java/rocksjni/sst_file_writerjni.cc +++ b/java/rocksjni/sst_file_writerjni.cc @@ -22,7 +22,7 @@ * Method: newSstFileWriter * Signature: (JJJ)J */ -jlong Java_org_rocksdb_SstFileWriter_newSstFileWriter(JNIEnv *env, jclass jcls, +jlong Java_org_rocksdb_SstFileWriter_newSstFileWriter__JJJ(JNIEnv *env, jclass jcls, jlong jenvoptions, jlong joptions, jlong jcomparator) { @@ -35,6 +35,22 @@ jlong Java_org_rocksdb_SstFileWriter_newSstFileWriter(JNIEnv *env, jclass jcls, return reinterpret_cast(sst_file_writer); } +/* + * Class: org_rocksdb_SstFileWriter + * Method: newSstFileWriter + * Signature: (JJ)J + */ +jlong Java_org_rocksdb_SstFileWriter_newSstFileWriter__JJ(JNIEnv *env, jclass jcls, + jlong jenvoptions, + jlong joptions) { + auto *env_options = + reinterpret_cast(jenvoptions); + auto *options = reinterpret_cast(joptions); + rocksdb::SstFileWriter *sst_file_writer = + new rocksdb::SstFileWriter(*env_options, *options); + return reinterpret_cast(sst_file_writer); +} + /* * Class: org_rocksdb_SstFileWriter * Method: open diff --git a/java/src/main/java/org/rocksdb/SstFileWriter.java b/java/src/main/java/org/rocksdb/SstFileWriter.java index 38d819aaa5b..130a496203f 100644 --- a/java/src/main/java/org/rocksdb/SstFileWriter.java +++ b/java/src/main/java/org/rocksdb/SstFileWriter.java @@ -16,6 +16,11 @@ public SstFileWriter(final EnvOptions envOptions, final Options options, envOptions.nativeHandle_, options.nativeHandle_, comparator.getNativeHandle())); } + public SstFileWriter(final EnvOptions envOptions, final Options options) { + super(newSstFileWriter( + envOptions.nativeHandle_, options.nativeHandle_)); + } + public void open(final String filePath) throws RocksDBException { open(nativeHandle_, filePath); } @@ -35,6 +40,9 @@ public void finish() throws RocksDBException { private native static long newSstFileWriter( final long envOptionsHandle, final long optionsHandle, final long userComparatorHandle); + private native static long newSstFileWriter(final long envOptionsHandle, + final long optionsHandle); + private native void open(final long handle, final String filePath) throws RocksDBException; private native void add(final long handle, final long keyHandle, final long valueHandle) diff --git a/java/src/test/java/org/rocksdb/SstFileWriterTest.java b/java/src/test/java/org/rocksdb/SstFileWriterTest.java index eb8c76d3491..5f2a4b10ef0 100644 --- a/java/src/test/java/org/rocksdb/SstFileWriterTest.java +++ b/java/src/test/java/org/rocksdb/SstFileWriterTest.java @@ -27,13 +27,23 @@ public class SstFileWriterTest { @Rule public TemporaryFolder parentFolder = new TemporaryFolder(); - private File newSstFile(final TreeMap keyValues) + private File newSstFile(final TreeMap keyValues, + boolean useJavaBytewiseComparator) throws IOException, RocksDBException { final EnvOptions envOptions = new EnvOptions(); - final ComparatorOptions comparatorOptions = new ComparatorOptions(); - final BytewiseComparator comparator = new BytewiseComparator(comparatorOptions); - final Options options = new Options().setComparator(comparator); - final SstFileWriter sstFileWriter = new SstFileWriter(envOptions, options, comparator); + final Options options = new Options(); + SstFileWriter sstFileWriter = null; + ComparatorOptions comparatorOptions = null; + BytewiseComparator comparator = null; + if (useJavaBytewiseComparator) { + comparatorOptions = new ComparatorOptions(); + comparator = new BytewiseComparator(comparatorOptions); + options.setComparator(comparator); + sstFileWriter = new SstFileWriter(envOptions, options, comparator); + } else { + sstFileWriter = new SstFileWriter(envOptions, options); + } + final File sstFile = parentFolder.newFile(SST_FILE_NAME); try { sstFileWriter.open(sstFile.getAbsolutePath()); @@ -50,18 +60,30 @@ private File newSstFile(final TreeMap keyValues) sstFileWriter.close(); options.close(); envOptions.close(); - comparatorOptions.close(); - comparator.close(); + if (comparatorOptions != null) { + comparatorOptions.close(); + } + if (comparator != null) { + comparator.close(); + } } return sstFile; } @Test - public void generateSstFile() throws RocksDBException, IOException { + public void generateSstFileWithJavaComparator() throws RocksDBException, IOException { + final TreeMap keyValues = new TreeMap<>(); + keyValues.put("key1", "value1"); + keyValues.put("key2", "value2"); + newSstFile(keyValues, true); + } + + @Test + public void generateSstFileWithNativeComparator() throws RocksDBException, IOException { final TreeMap keyValues = new TreeMap<>(); keyValues.put("key1", "value1"); keyValues.put("key2", "value2"); - newSstFile(keyValues); + newSstFile(keyValues, false); } @Test @@ -69,7 +91,7 @@ public void ingestSstFile() throws RocksDBException, IOException { final TreeMap keyValues = new TreeMap<>(); keyValues.put("key1", "value1"); keyValues.put("key2", "value2"); - final File sstFile = newSstFile(keyValues); + final File sstFile = newSstFile(keyValues, false); final File dbFolder = parentFolder.newFolder(DB_DIRECTORY_NAME); final Options options = new Options().setCreateIfMissing(true); final RocksDB db = RocksDB.open(options, dbFolder.getAbsolutePath());