diff --git a/bindings/java/local.mk b/bindings/java/local.mk index 83636de36d..30cac01290 100644 --- a/bindings/java/local.mk +++ b/bindings/java/local.mk @@ -144,6 +144,11 @@ define add_java_binding_targets @rm -r packages/jar$(1)_regular @cd bindings && jar uf $$(TOPDIR)/$$@ ../LICENSE + packages/fdb-java$(1)-$$(JARVER)-tests.jar: fdb_java$(1) versions.target + @echo "Building $$@" + @rm -f $$@ + @cp $$(TOPDIR)/bindings/java/foundationdb-tests$(1).jar packages/fdb-java$(1)-$$(JARVER)-tests.jar + packages/fdb-java$(1)-$$(JARVER)-sources.jar: $$(JAVA$(1)_GENERATED_SOURCES) versions.target @echo "Building $$@" @rm -f $$@ @@ -165,7 +170,7 @@ define add_java_binding_targets @cd packages/bundle$(1)_regular && jar cf $(TOPDIR)/$$@ * @rm -rf packages/bundle$(1)_regular - fdb_java$(1)_release: packages/fdb-java$(1)-$$(JARVER)-bundle.jar + fdb_java$(1)_release: packages/fdb-java$(1)-$$(JARVER)-bundle.jar packages/fdb-java$(1)-$$(JARVER)-tests.jar fdb_java$(1)_release_clean: @echo "Cleaning Java release" diff --git a/bindings/java/src-completable/test/com/apple/cie/foundationdb/test/AbstractTester.java b/bindings/java/src-completable/test/com/apple/cie/foundationdb/test/AbstractTester.java index 3597a8a8f8..f34af0493e 100644 --- a/bindings/java/src-completable/test/com/apple/cie/foundationdb/test/AbstractTester.java +++ b/bindings/java/src-completable/test/com/apple/cie/foundationdb/test/AbstractTester.java @@ -98,7 +98,6 @@ public abstract class AbstractTester { } if (args.useExternalClient()) { fdb.options().setDisableLocalClient(); - // TODO: set external client directory } try { diff --git a/bindings/java/src-completable/test/com/apple/cie/foundationdb/test/PerformanceTester.java b/bindings/java/src-completable/test/com/apple/cie/foundationdb/test/PerformanceTester.java index b935d3ea02..562f6831c9 100644 --- a/bindings/java/src-completable/test/com/apple/cie/foundationdb/test/PerformanceTester.java +++ b/bindings/java/src-completable/test/com/apple/cie/foundationdb/test/PerformanceTester.java @@ -25,7 +25,6 @@ import com.apple.cie.foundationdb.KeySelector; import com.apple.cie.foundationdb.Transaction; import com.apple.cie.foundationdb.TransactionContext; import com.apple.cie.foundationdb.async.AsyncUtil; -import com.apple.cie.foundationdb.subspace.Subspace; import com.apple.cie.foundationdb.tuple.ByteArrayUtil; import java.util.ArrayList; @@ -62,6 +61,7 @@ public class PerformanceTester extends AbstractTester { SERIAL_GET("Java Completable API serial get throughput"), GET_RANGE("Java Completable API get_range throughput"), GET_KEY("Java Completable API get_key throughput"), + GET_SINGLE_KEY_RANGE("Java Completable API get_single_key_range throughput"), ALTERNATING_GET_SET("Java Completable API alternating get and set throughput"), WRITE_TRANSACTION("Java Completable API single-key transaction throughput"); @@ -109,6 +109,7 @@ public class PerformanceTester extends AbstractTester { Tests.SERIAL_GET.setFunction(db -> serialGet(db, 2_000)); Tests.GET_RANGE.setFunction(db -> getRange(db, 1_000)); Tests.GET_KEY.setFunction(db -> getKey(db, 2_000)); + Tests.GET_SINGLE_KEY_RANGE.setFunction(db -> getSingleKeyRange(db, 2_000)); Tests.ALTERNATING_GET_SET.setFunction(db -> alternatingGetSet(db, 2_000)); Tests.WRITE_TRANSACTION.setFunction(db -> writeTransaction(db, 1_000)); } @@ -345,6 +346,20 @@ public class PerformanceTester extends AbstractTester { }); } + public Double getSingleKeyRange(TransactionContext tcx, int count) { + return tcx.run(tr -> { + tr.options().setRetryLimit(5); + long start = System.nanoTime(); + for (int i = 0; i < count; i++) { + int keyIndex = randomKeyIndex(); + tr.getRange(key(keyIndex), key(keyIndex + 1)).asList().join(); + } + long end = System.nanoTime(); + + return count*1_000_000_000.0/(end - start); + }); + } + public Double writeTransaction(TransactionContext tcx, int count) { long start = System.nanoTime(); for (int i = 0; i < count; i++) { @@ -381,6 +396,7 @@ public class PerformanceTester extends AbstractTester { new PerformanceTester().run(args); } catch (IllegalArgumentException e) { System.out.println("Could not run test due to malformed arguments."); + System.out.println(e.getMessage()); System.exit(1); } catch (Exception e) { System.out.println("Fatal error encountered during run: " + e); diff --git a/bindings/java/src-completable/test/com/apple/cie/foundationdb/test/TesterArgs.java b/bindings/java/src-completable/test/com/apple/cie/foundationdb/test/TesterArgs.java index 407683010e..a2b27457b2 100644 --- a/bindings/java/src-completable/test/com/apple/cie/foundationdb/test/TesterArgs.java +++ b/bindings/java/src-completable/test/com/apple/cie/foundationdb/test/TesterArgs.java @@ -99,7 +99,7 @@ public class TesterArgs { } else if (arg.equals("--enable-callbacks-on-external-threads")) { callbacksOnExternalThread = true; } else if (arg.equals("--use-external-client")) { - externalClient = false; + externalClient = true; } else if (arg.equals("--tests-to-run")) { if (i + 1 < args.length && args[i + 1].charAt(0) != '-') { int j; diff --git a/tests/python_tests/python_performance.py b/tests/python_tests/python_performance.py index bb22aa24df..8595f5b816 100755 --- a/tests/python_tests/python_performance.py +++ b/tests/python_tests/python_performance.py @@ -47,6 +47,7 @@ class PythonPerformance(PythonTest): 'serial_get' : 'Python API serial get throughput', 'get_range' : 'Python API get_range throughput', 'get_key' : 'Python API get_key throughput', + 'get_single_key_range' : 'Python API get_single_key_range throughput', 'alternating_get_set' : 'Python API alternating get and set throughput', 'write_transaction' : 'Python API single-key transaction throughput', } @@ -267,6 +268,17 @@ class PythonPerformance(PythonTest): return count / (time.time() - s) + @fdb.transactional + def run_get_single_key_range(self, tr, count=2000): + tr.options.set_retry_limit(5) + s = time.time() + + for i in range(count): + index = random.randint(0, self.key_count) + list(tr[self.key(index):self.key(index+1)]) + + return count / (time.time() - s) + @fdb.transactional def single_set(self, tr): key = self.random_key()