diff --git a/java/org/rocksdb/CompressionType.java b/java/org/rocksdb/CompressionType.java index 9c158ccf4..c718d26a9 100644 --- a/java/org/rocksdb/CompressionType.java +++ b/java/org/rocksdb/CompressionType.java @@ -14,25 +14,59 @@ package org.rocksdb; * compression method (if any) is used to compress a block.

*/ public enum CompressionType { - NO_COMPRESSION((byte) 0), - SNAPPY_COMPRESSION((byte) 1), - ZLIB_COMPRESSION((byte) 2), - BZLIB2_COMPRESSION((byte) 3), - LZ4_COMPRESSION((byte) 4), - LZ4HC_COMPRESSION((byte) 5); - private final byte value_; + NO_COMPRESSION((byte) 0, null), + SNAPPY_COMPRESSION((byte) 1, "snappy"), + ZLIB_COMPRESSION((byte) 2, "z"), + BZLIB2_COMPRESSION((byte) 3, "bzip2"), + LZ4_COMPRESSION((byte) 4, "lz4"), + LZ4HC_COMPRESSION((byte) 5, "lz4hc"); - private CompressionType(byte value) { - value_ = value; + /** + *

Get the CompressionType enumeration value by + * passing the library name to this method.

+ * + *

If library cannot be found the enumeration + * value {@code NO_COMPRESSION} will be returned.

+ * + * @return CompressionType instance. + */ + public static CompressionType getCompressionType(String libraryName) { + if (libraryName != null) { + for (CompressionType compressionType : CompressionType.values()) { + if (compressionType.getLibraryName() != null && + compressionType.getLibraryName().equals(libraryName)) { + return compressionType; + } + } + } + return CompressionType.NO_COMPRESSION; } /** - * Returns the byte value of the enumerations value + *

Returns the byte value of the enumerations value.

* * @return byte representation */ public byte getValue() { return value_; } + + /** + *

Returns the library name of the compression type + * identified by the enumeration value.

+ * + * @return library name + */ + public String getLibraryName() { + return libraryName_; + } + + private CompressionType(byte value, final String libraryName) { + value_ = value; + libraryName_ = libraryName; + } + + private final byte value_; + private final String libraryName_; } diff --git a/java/org/rocksdb/RocksDB.java b/java/org/rocksdb/RocksDB.java index bb88710ed..3d420adea 100644 --- a/java/org/rocksdb/RocksDB.java +++ b/java/org/rocksdb/RocksDB.java @@ -18,8 +18,6 @@ import org.rocksdb.util.Environment; public class RocksDB extends RocksObject { public static final String DEFAULT_COLUMN_FAMILY = "default"; public static final int NOT_FOUND = -1; - private static final String[] compressionLibs_ = { - "snappy", "z", "bzip2", "lz4", "lz4hc"}; static { RocksDB.loadLibrary(); @@ -35,9 +33,11 @@ public class RocksDB extends RocksObject { public static synchronized void loadLibrary() { String tmpDir = System.getenv("ROCKSDB_SHAREDLIB_DIR"); // loading possibly necessary libraries. - for (String lib : compressionLibs_) { + for (CompressionType compressionType : CompressionType.values()) { try { - System.loadLibrary(lib); + if (compressionType.getLibraryName() != null) { + System.loadLibrary(compressionType.getLibraryName()); + } } catch (UnsatisfiedLinkError e) { // since it may be optional, we ignore its loading failure here. } @@ -60,10 +60,14 @@ public class RocksDB extends RocksObject { * of a library. */ public static synchronized void loadLibrary(List paths) { - for (String lib : compressionLibs_) { + for (CompressionType compressionType : CompressionType.values()) { + if (compressionType.equals(CompressionType.NO_COMPRESSION)) { + continue; + } for (String path : paths) { try { - System.load(path + "/" + Environment.getSharedLibraryName(lib)); + System.load(path + "/" + Environment.getSharedLibraryName( + compressionType.getLibraryName())); break; } catch (UnsatisfiedLinkError e) { // since they are optional, we ignore loading fails. diff --git a/java/org/rocksdb/benchmark/DbBenchmark.java b/java/org/rocksdb/benchmark/DbBenchmark.java index 26b295f7b..64fc5f0a7 100644 --- a/java/org/rocksdb/benchmark/DbBenchmark.java +++ b/java/org/rocksdb/benchmark/DbBenchmark.java @@ -163,15 +163,6 @@ public class DbBenchmark { EXISTING } - enum CompressionType { - NONE, - SNAPPY, - ZLIB, - BZIP2, - LZ4, - LZ4HC - } - static { RocksDB.loadLibrary(); } @@ -457,24 +448,16 @@ public class DbBenchmark { // options.setPrefixSize((Integer)flags_.get(Flag.prefix_size)); // options.setKeysPerPrefix((Long)flags_.get(Flag.keys_per_prefix)); compressionType_ = (String) flags.get(Flag.compression_type); - compression_ = CompressionType.NONE; + compression_ = CompressionType.NO_COMPRESSION; try { - switch (compressionType_) { - case "snappy": - System.loadLibrary("snappy"); - break; - case "zlib": - System.loadLibrary("z"); - break; - case "bzip2": - System.loadLibrary("bzip2"); - break; - case "lz4": - System.loadLibrary("lz4"); - break; - case "lz4hc": - System.loadLibrary("lz4hc"); - break; + if (compressionType_!=null) { + final CompressionType compressionType = + CompressionType.getCompressionType(compressionType_); + if (compressionType != null && + compressionType != CompressionType.NO_COMPRESSION) { + System.loadLibrary(compressionType.getLibraryName()); + } + } } catch (UnsatisfiedLinkError e) { System.err.format("Unable to load %s library:%s%n" + diff --git a/java/org/rocksdb/test/CompressionOptionsTest.java b/java/org/rocksdb/test/CompressionOptionsTest.java new file mode 100644 index 000000000..f8aff9268 --- /dev/null +++ b/java/org/rocksdb/test/CompressionOptionsTest.java @@ -0,0 +1,22 @@ +// Copyright (c) 2014, Facebook, Inc. All rights reserved. +// This source code is licensed under the BSD-style license found in the +// LICENSE file in the root directory of this source tree. An additional grant +// of patent rights can be found in the PATENTS file in the same directory. + +package org.rocksdb.test; + +import org.junit.Test; +import org.rocksdb.CompressionType; + + +public class CompressionOptionsTest +{ + @Test + public void getCompressionType() { + for (CompressionType compressionType : CompressionType.values()) { + String libraryName = compressionType.getLibraryName(); + compressionType.equals(CompressionType.getCompressionType( + libraryName)); + } + } +} diff --git a/java/org/rocksdb/test/MixedOptionsTest.java b/java/org/rocksdb/test/MixedOptionsTest.java index 0f15e668c..528bea2e3 100644 --- a/java/org/rocksdb/test/MixedOptionsTest.java +++ b/java/org/rocksdb/test/MixedOptionsTest.java @@ -53,6 +53,5 @@ public class MixedOptionsTest { options.optimizeUniversalStyleCompaction(400); options.optimizeForPointLookup(1024); options.prepareForBulkLoad(); - System.out.println("Mixed options test passed"); } } diff --git a/java/org/rocksdb/test/PlainTableConfigTest.java b/java/org/rocksdb/test/PlainTableConfigTest.java index a533141ea..72347e7d4 100644 --- a/java/org/rocksdb/test/PlainTableConfigTest.java +++ b/java/org/rocksdb/test/PlainTableConfigTest.java @@ -63,10 +63,6 @@ public class PlainTableConfigTest { public void encodingType() { PlainTableConfig plainTableConfig = new PlainTableConfig(); plainTableConfig.setEncodingType(EncodingType.kPrefix); - assertThat(EncodingType.valueOf("kPrefix")).isEqualTo( - EncodingType.kPrefix); - assertThat(EncodingType.values().length). - isEqualTo(2); assertThat(plainTableConfig.encodingType()).isEqualTo( EncodingType.kPrefix); }