Skip to content

Commit

Permalink
Added SstFileWriter construtor without explicit comparator to JNI api
Browse files Browse the repository at this point in the history
Summary:
Adding API missing after 1ffbdfd#diff-b94146418eed4a9c1bf324041b95b279.

adamretter  IslamAbdelRahman

Tested locally.
Closes #2028

Differential Revision: D4762817

Pulled By: IslamAbdelRahman

fbshipit-source-id: 833f478
  • Loading branch information
Mikhail Antonov authored and IslamAbdelRahman committed Apr 4, 2017
1 parent 4fa68fb commit 491fa69
Show file tree
Hide file tree
Showing 3 changed files with 57 additions and 11 deletions.
18 changes: 17 additions & 1 deletion java/rocksjni/sst_file_writerjni.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand All @@ -35,6 +35,22 @@ jlong Java_org_rocksdb_SstFileWriter_newSstFileWriter(JNIEnv *env, jclass jcls,
return reinterpret_cast<jlong>(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<const rocksdb::EnvOptions *>(jenvoptions);
auto *options = reinterpret_cast<const rocksdb::Options *>(joptions);
rocksdb::SstFileWriter *sst_file_writer =
new rocksdb::SstFileWriter(*env_options, *options);
return reinterpret_cast<jlong>(sst_file_writer);
}

/*
* Class: org_rocksdb_SstFileWriter
* Method: open
Expand Down
8 changes: 8 additions & 0 deletions java/src/main/java/org/rocksdb/SstFileWriter.java
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
Expand All @@ -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)
Expand Down
42 changes: 32 additions & 10 deletions java/src/test/java/org/rocksdb/SstFileWriterTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -27,13 +27,23 @@ public class SstFileWriterTest {

@Rule public TemporaryFolder parentFolder = new TemporaryFolder();

private File newSstFile(final TreeMap<String, String> keyValues)
private File newSstFile(final TreeMap<String, String> 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());
Expand All @@ -50,26 +60,38 @@ private File newSstFile(final TreeMap<String, String> 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<String, String> keyValues = new TreeMap<>();
keyValues.put("key1", "value1");
keyValues.put("key2", "value2");
newSstFile(keyValues, true);
}

@Test
public void generateSstFileWithNativeComparator() throws RocksDBException, IOException {
final TreeMap<String, String> keyValues = new TreeMap<>();
keyValues.put("key1", "value1");
keyValues.put("key2", "value2");
newSstFile(keyValues);
newSstFile(keyValues, false);
}

@Test
public void ingestSstFile() throws RocksDBException, IOException {
final TreeMap<String, String> 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());
Expand Down

0 comments on commit 491fa69

Please sign in to comment.