This is an automated email from the ASF dual-hosted git repository.
jbarrett pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/geode-benchmarks.git
The following commit(s) were added to refs/heads/develop by this push:
new e45a12f Stabilizes function benchmarks (#101)
e45a12f is described below
commit e45a12f024886bffeed42cec7c77f3a997d9e8d2
Author: Jacob Barrett <[email protected]>
AuthorDate: Tue Aug 27 16:29:42 2019 -0700
Stabilizes function benchmarks (#101)
* New LongRange object for managing ranges of longs.
* Only get 1 value.
* Balanced CPU utilization and threads.
---
geode-benchmarks/build.gradle | 1 -
.../benchmark/geode/data/BenchmarkFunction.java | 34 ++---
.../geode/data/FunctionWithArguments.java | 27 +---
.../benchmark/geode/data/FunctionWithFilter.java | 24 ++--
.../benchmark/tasks/ExecuteFilteredFunction.java | 47 ++-----
.../geode/benchmark/tasks/ExecuteFunction.java | 35 +----
.../tasks/ExecuteParameterizedFunction.java | 42 ++----
.../org/apache/geode/benchmark/tasks/GetTask.java | 12 +-
.../org/apache/geode/benchmark/tasks/OQLQuery.java | 8 +-
.../geode/benchmark/tasks/PrePopulateRegion.java | 88 ++++--------
.../apache/geode/benchmark/tasks/PutAllTask.java | 10 +-
.../org/apache/geode/benchmark/tasks/PutTask.java | 10 +-
.../geode/benchmark/tasks/RegisterFunction.java} | 34 ++---
...nchmark.java => AbstractFunctionBenchmark.java} | 22 +--
.../AbstractPartitionedFunctionBenchmark.java | 25 +---
.../tests/AbstractReplicatedFunctionBenchmark.java | 25 +---
.../PartitionedFunctionExecutionBenchmark.java | 7 +-
...nedFunctionExecutionWithArgumentsBenchmark.java | 8 +-
...ionedFunctionExecutionWithFiltersBenchmark.java | 8 +-
.../benchmark/tests/PartitionedGetBenchmark.java | 5 +-
.../tests/PartitionedIndexedQueryBenchmark.java | 7 +-
.../tests/PartitionedNonIndexedQueryBenchmark.java | 7 +-
.../tests/PartitionedPutAllBenchmark.java | 5 +-
.../benchmark/tests/PartitionedPutBenchmark.java | 5 +-
.../ReplicatedFunctionExecutionBenchmark.java | 7 +-
...tedFunctionExecutionWithArgumentsBenchmark.java | 8 +-
...catedFunctionExecutionWithFiltersBenchmark.java | 8 +-
.../benchmark/tests/ReplicatedGetBenchmark.java | 5 +-
.../tests/ReplicatedIndexedQueryBenchmark.java | 7 +-
.../tests/ReplicatedNonIndexedQueryBenchmark.java | 5 +-
.../benchmark/tests/ReplicatedPutAllBenchmark.java | 5 +-
.../benchmark/tests/ReplicatedPutBenchmark.java | 5 +-
.../benchmark/tasks/PrePopulateRegionTest.java | 12 +-
.../PartitionedFunctionExecutionBenchmarkTest.java | 4 +-
...unctionExecutionWithArgumentsBenchmarkTest.java | 4 +-
...dFunctionExecutionWithFiltersBenchmarkTest.java | 8 +-
.../tests/PartitionedGetBenchmarkTest.java | 3 +-
.../PartitionedIndexedQueryBenchmarkTest.java | 3 +-
.../PartitionedNonIndexedQueryBenchmarkTest.java | 3 +-
.../tests/PartitionedPutBenchmarkTest.java | 3 +-
.../ReplicatedFunctionExecutionBenchmarkTest.java | 4 +-
...unctionExecutionWithArgumentsBenchmarkTest.java | 4 +-
...dFunctionExecutionWithFiltersBenchmarkTest.java | 4 +-
.../tests/ReplicatedGetBenchmarkTest.java | 3 +-
.../tests/ReplicatedIndexedQueryBenchmarkTest.java | 3 +-
.../ReplicatedNonIndexedQueryBenchmarkTest.java | 3 +-
.../tests/ReplicatedPutBenchmarkTest.java | 3 +-
.../java/org/apache/geode/benchmark/LongRange.java | 148 +++++++++++++++++++++
.../org/apache/geode/benchmark/LongRangeTest.java | 114 ++++++++++++++++
49 files changed, 471 insertions(+), 401 deletions(-)
diff --git a/geode-benchmarks/build.gradle b/geode-benchmarks/build.gradle
index fad80d1..7fd5422 100644
--- a/geode-benchmarks/build.gradle
+++ b/geode-benchmarks/build.gradle
@@ -62,7 +62,6 @@ task benchmark(type: Test) {
testLogging { exceptionFormat = 'full' }
exclude "**/Replicated*QueryBenchmark.class"
- exclude "**/ReplicatedFunctionExecution*Benchmark.class"
exclude "**/PartitionedNonIndexedQueryBenchmark.class"
exclude "**/*PutAllBenchmark.class"
diff --git
a/geode-benchmarks/src/main/java/benchmark/geode/data/BenchmarkFunction.java
b/geode-benchmarks/src/main/java/benchmark/geode/data/BenchmarkFunction.java
index b5157cd..29a74f6 100644
--- a/geode-benchmarks/src/main/java/benchmark/geode/data/BenchmarkFunction.java
+++ b/geode-benchmarks/src/main/java/benchmark/geode/data/BenchmarkFunction.java
@@ -12,44 +12,34 @@
* or implied. See the License for the specific language governing permissions
and limitations under
* the License.
*/
+
package benchmark.geode.data;
-import java.util.ArrayList;
-import java.util.List;
+import org.apache.geode.benchmark.LongRange;
import org.apache.geode.cache.Region;
import org.apache.geode.cache.execute.Function;
import org.apache.geode.cache.execute.FunctionContext;
import org.apache.geode.cache.execute.RegionFunctionContext;
-public class BenchmarkFunction implements Function {
- private long maxKey;
- private long minKey;
+public class BenchmarkFunction implements Function<Void> {
+ private final LongRange range;
- public BenchmarkFunction(long minKey, long maxKey) {
- this.maxKey = maxKey;
- this.minKey = minKey;
+ public BenchmarkFunction(final LongRange range) {
+ this.range = range;
}
@Override
- public void execute(FunctionContext context) {
- RegionFunctionContext regionFunctionContext = (RegionFunctionContext)
context;
- Region region = regionFunctionContext.getDataSet();
- List<Long> results = new ArrayList<>();
-
- for (long i = minKey; i <= maxKey; i++) {
- Portfolio portfolio = (Portfolio) region.get(i);
- if (portfolio != null) {
- results.add(portfolio.getID());
- }
- }
-
- context.getResultSender().lastResult(results);
+ public void execute(final FunctionContext<Void> context) {
+ final RegionFunctionContext regionFunctionContext =
(RegionFunctionContext) context;
+ final Region<Long, Portfolio> region = regionFunctionContext.getDataSet();
+ final Long key = range.random();
+ context.getResultSender().lastResult(region.get(key));
}
@Override
public String getId() {
- return "BenchmarkFunction";
+ return BenchmarkFunction.class.getName();
}
@Override
diff --git
a/geode-benchmarks/src/main/java/benchmark/geode/data/FunctionWithArguments.java
b/geode-benchmarks/src/main/java/benchmark/geode/data/FunctionWithArguments.java
index 2d53ab6..8a10f1d 100644
---
a/geode-benchmarks/src/main/java/benchmark/geode/data/FunctionWithArguments.java
+++
b/geode-benchmarks/src/main/java/benchmark/geode/data/FunctionWithArguments.java
@@ -14,9 +14,6 @@
*/
package benchmark.geode.data;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
import org.apache.geode.cache.Region;
import org.apache.geode.cache.execute.Function;
@@ -24,29 +21,15 @@ import org.apache.geode.cache.execute.FunctionContext;
import org.apache.geode.cache.execute.RegionFunctionContext;
public class FunctionWithArguments implements Function {
- private long maxKey;
- private long minKey;
public FunctionWithArguments() {}
@Override
- public void execute(FunctionContext context) {
- RegionFunctionContext regionFunctionContext = (RegionFunctionContext)
context;
- Region region = regionFunctionContext.getDataSet();
- HashMap<String, Long> argumentsMap =
- (HashMap<String, Long>) regionFunctionContext.getArguments();
- maxKey = argumentsMap.get("maxID");
- minKey = argumentsMap.get("minID");
- List<Long> results = new ArrayList<>();
-
- for (long i = minKey; i <= maxKey; i++) {
- Portfolio portfolio = (Portfolio) region.get(i);
- if (portfolio != null) {
- results.add(portfolio.getID());
- }
- }
-
- context.getResultSender().lastResult(results);
+ public void execute(final FunctionContext context) {
+ final RegionFunctionContext regionFunctionContext =
(RegionFunctionContext) context;
+ final Region region = regionFunctionContext.getDataSet();
+ final Long key = (Long) regionFunctionContext.getArguments();
+ context.getResultSender().lastResult(region.get(key));
}
@Override
diff --git
a/geode-benchmarks/src/main/java/benchmark/geode/data/FunctionWithFilter.java
b/geode-benchmarks/src/main/java/benchmark/geode/data/FunctionWithFilter.java
index 4b0ff5e..ccc3888 100644
---
a/geode-benchmarks/src/main/java/benchmark/geode/data/FunctionWithFilter.java
+++
b/geode-benchmarks/src/main/java/benchmark/geode/data/FunctionWithFilter.java
@@ -14,8 +14,6 @@
*/
package benchmark.geode.data;
-import java.util.ArrayList;
-import java.util.List;
import java.util.Set;
import org.apache.geode.cache.Region;
@@ -28,20 +26,14 @@ public class FunctionWithFilter implements Function {
public FunctionWithFilter() {}
@Override
- public void execute(FunctionContext context) {
- RegionFunctionContext regionFunctionContext = (RegionFunctionContext)
context;
- Region region = regionFunctionContext.getDataSet();
- Set filterKeys = regionFunctionContext.getFilter();
- List<Long> results = new ArrayList<>();
-
- filterKeys.stream().forEach(key -> {
- Portfolio portfolio = (Portfolio) region.get(key);
- if (portfolio != null) {
- results.add(portfolio.getID());
- }
- });
-
- context.getResultSender().lastResult(results);
+ public void execute(final FunctionContext context) {
+ final RegionFunctionContext regionFunctionContext =
(RegionFunctionContext) context;
+ final Region<Long, Portfolio> region = regionFunctionContext.getDataSet();
+ @SuppressWarnings("unchecked")
+ final Set<Long> filterKeys = (Set<Long>) regionFunctionContext.getFilter();
+ final Long key = filterKeys.iterator().next();
+
+ context.getResultSender().lastResult(region.get(key));
}
@Override
diff --git
a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tasks/ExecuteFilteredFunction.java
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tasks/ExecuteFilteredFunction.java
index 2bb7b17..746682f 100644
---
a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tasks/ExecuteFilteredFunction.java
+++
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tasks/ExecuteFilteredFunction.java
@@ -15,38 +15,31 @@
package org.apache.geode.benchmark.tasks;
import java.io.Serializable;
-import java.rmi.UnexpectedException;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
+import java.util.Collections;
import java.util.Map;
import java.util.Set;
-import java.util.concurrent.ThreadLocalRandom;
import benchmark.geode.data.FunctionWithFilter;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.yardstickframework.BenchmarkConfiguration;
import org.yardstickframework.BenchmarkDriverAdapter;
+import org.apache.geode.benchmark.LongRange;
import org.apache.geode.cache.Region;
import org.apache.geode.cache.client.ClientCache;
import org.apache.geode.cache.client.ClientCacheFactory;
import org.apache.geode.cache.execute.Function;
import org.apache.geode.cache.execute.FunctionService;
import org.apache.geode.cache.execute.ResultCollector;
-import org.apache.geode.perftest.jvms.RemoteJVMFactory;
public class ExecuteFilteredFunction extends BenchmarkDriverAdapter implements
Serializable {
+
+ private final LongRange keyRange;
+ private final Function function;
+
private Region region;
- long keyRange;
- long filterRange;
- private Function function;
- private static final Logger logger =
LoggerFactory.getLogger(RemoteJVMFactory.class);
- public ExecuteFilteredFunction(long keyRange, long filterRange) {
+ public ExecuteFilteredFunction(final LongRange keyRange) {
this.keyRange = keyRange;
- this.filterRange = filterRange;
this.function = new FunctionWithFilter();
}
@@ -59,33 +52,15 @@ public class ExecuteFilteredFunction extends
BenchmarkDriverAdapter implements S
}
@Override
- public boolean test(Map<Object, Object> ctx) throws Exception {
- long minId = ThreadLocalRandom.current().nextLong(0, this.keyRange -
filterRange);
- long maxId = minId + filterRange;
- Set<Long> filterSet = new HashSet<>();
- for (long i = minId; i <= maxId; i++) {
- filterSet.add(i);
- }
- ResultCollector resultCollector = FunctionService
+ public boolean test(Map<Object, Object> ctx) {
+ final Set<Long> filterSet = Collections.singleton(keyRange.random());
+ final ResultCollector resultCollector = FunctionService
.onRegion(region)
.withFilter(filterSet)
.execute(function);
- List results = (List) resultCollector.getResult();
- validateResults(results, minId, maxId);
+ resultCollector.getResult();
return true;
}
- private void validateResults(List results, long minId, long maxId)
- throws UnexpectedException {
- for (Object result : results) {
- ArrayList<Long> IDs = (ArrayList<Long>) result;
- for (Long id : IDs) {
- if (id < minId || id > maxId) {
- throw new UnexpectedException("Invalid ID value received [minID = "
+ minId + " maxID = "
- + maxId + " ] Portfolio ID received = " + id);
- }
- }
- }
- }
}
diff --git
a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tasks/ExecuteFunction.java
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tasks/ExecuteFunction.java
index 3106758..51c30de 100644
---
a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tasks/ExecuteFunction.java
+++
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tasks/ExecuteFunction.java
@@ -15,11 +15,7 @@
package org.apache.geode.benchmark.tasks;
import java.io.Serializable;
-import java.rmi.UnexpectedException;
-import java.util.ArrayList;
-import java.util.List;
import java.util.Map;
-import java.util.concurrent.ThreadLocalRandom;
import benchmark.geode.data.BenchmarkFunction;
import org.yardstickframework.BenchmarkConfiguration;
@@ -28,19 +24,13 @@ import org.yardstickframework.BenchmarkDriverAdapter;
import org.apache.geode.cache.Region;
import org.apache.geode.cache.client.ClientCache;
import org.apache.geode.cache.client.ClientCacheFactory;
-import org.apache.geode.cache.execute.Function;
import org.apache.geode.cache.execute.FunctionService;
-import org.apache.geode.cache.execute.ResultCollector;
public class ExecuteFunction extends BenchmarkDriverAdapter implements
Serializable {
+
private Region region;
- long keyRange;
- long functionIDRange;
- public ExecuteFunction(long keyRange, long functionIDRange) {
- this.keyRange = keyRange;
- this.functionIDRange = functionIDRange;
- }
+ public ExecuteFunction() {}
@Override
public void setUp(BenchmarkConfiguration cfg) throws Exception {
@@ -50,26 +40,9 @@ public class ExecuteFunction extends BenchmarkDriverAdapter
implements Serializa
}
@Override
- public boolean test(Map<Object, Object> ctx) throws Exception {
- long minId = ThreadLocalRandom.current().nextLong(0, this.keyRange -
functionIDRange);
- long maxId = minId + functionIDRange;
- Function function = new BenchmarkFunction(minId, maxId);
- FunctionService.registerFunction(function);
- ResultCollector resultCollector =
FunctionService.onRegion(region).execute(function);
- List results = (List) resultCollector.getResult();
- validateResults(results, minId, maxId);
+ public boolean test(final Map<Object, Object> ctx) {
+
FunctionService.onRegion(region).execute(BenchmarkFunction.class.getName()).getResult();
return true;
}
- private void validateResults(List results, long minId, long maxId) throws
UnexpectedException {
- for (Object result : results) {
- ArrayList<Long> IDs = (ArrayList<Long>) result;
- for (Long id : IDs) {
- if (id < minId || id > maxId) {
- throw new UnexpectedException("Invalid ID values received [min ID="
+ minId + ",max ID="
- + maxId + "] Portfolio ID received=" + id);
- }
- }
- }
- }
}
diff --git
a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tasks/ExecuteParameterizedFunction.java
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tasks/ExecuteParameterizedFunction.java
index a965eab..e2353f1 100644
---
a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tasks/ExecuteParameterizedFunction.java
+++
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tasks/ExecuteParameterizedFunction.java
@@ -15,17 +15,13 @@
package org.apache.geode.benchmark.tasks;
import java.io.Serializable;
-import java.rmi.UnexpectedException;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
import java.util.Map;
-import java.util.concurrent.ThreadLocalRandom;
import benchmark.geode.data.FunctionWithArguments;
import org.yardstickframework.BenchmarkConfiguration;
import org.yardstickframework.BenchmarkDriverAdapter;
+import org.apache.geode.benchmark.LongRange;
import org.apache.geode.cache.Region;
import org.apache.geode.cache.client.ClientCache;
import org.apache.geode.cache.client.ClientCacheFactory;
@@ -35,15 +31,14 @@ import org.apache.geode.cache.execute.ResultCollector;
public class ExecuteParameterizedFunction extends BenchmarkDriverAdapter
implements Serializable {
+ private final LongRange keyRange;
+ private final Function function;
+
private Region region;
- long keyRange;
- long functionIDRange;
- private Function function;
- public ExecuteParameterizedFunction(long keyRange, long functionIDRange) {
+ public ExecuteParameterizedFunction(final LongRange keyRange) {
this.keyRange = keyRange;
- this.functionIDRange = functionIDRange;
- this.function = new FunctionWithArguments();
+ function = new FunctionWithArguments();
}
@Override
@@ -55,32 +50,13 @@ public class ExecuteParameterizedFunction extends
BenchmarkDriverAdapter impleme
}
@Override
- public boolean test(Map<Object, Object> ctx) throws Exception {
- long minId = ThreadLocalRandom.current().nextLong(0, this.keyRange -
functionIDRange);
- long maxId = minId + functionIDRange;
- Map<String, Long> argumentMap = new HashMap<>();
- argumentMap.put("maxID", maxId);
- argumentMap.put("minID", minId);
+ public boolean test(Map<Object, Object> ctx) {
ResultCollector resultCollector = FunctionService
.onRegion(region)
- .setArguments(argumentMap)
+ .setArguments(keyRange.random())
.execute(function);
- List results = (List) resultCollector.getResult();
- validateResults(results, minId, maxId);
+ resultCollector.getResult();
return true;
}
-
- private void validateResults(List results, long minId, long maxId)
- throws UnexpectedException {
- for (Object result : results) {
- ArrayList<Long> IDs = (ArrayList<Long>) result;
- for (Long id : IDs) {
- if (id < minId || id > maxId) {
- throw new UnexpectedException("Invalid ID value received [minID= " +
minId
- + " maxID= " + maxId + " ] Portfolio ID received = " + id);
- }
- }
- }
- }
}
diff --git
a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tasks/GetTask.java
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tasks/GetTask.java
index 090dca6..ec55f40 100644
---
a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tasks/GetTask.java
+++
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tasks/GetTask.java
@@ -19,11 +19,11 @@ package org.apache.geode.benchmark.tasks;
import java.io.Serializable;
import java.util.Map;
-import java.util.concurrent.ThreadLocalRandom;
import org.yardstickframework.BenchmarkConfiguration;
import org.yardstickframework.BenchmarkDriverAdapter;
+import org.apache.geode.benchmark.LongRange;
import org.apache.geode.cache.Region;
import org.apache.geode.cache.client.ClientCache;
import org.apache.geode.cache.client.ClientCacheFactory;
@@ -34,23 +34,25 @@ import org.apache.geode.cache.client.ClientCacheFactory;
*/
public class GetTask extends BenchmarkDriverAdapter implements Serializable {
+ private final LongRange keyRange;
+
private Region<Object, Object> region;
- private long keyRange;
- public GetTask(long keyRange) {
+ public GetTask(LongRange keyRange) {
this.keyRange = keyRange;
}
@Override
public void setUp(BenchmarkConfiguration cfg) throws Exception {
super.setUp(cfg);
- ClientCache cache = ClientCacheFactory.getAnyInstance();
+
+ final ClientCache cache = ClientCacheFactory.getAnyInstance();
region = cache.getRegion("region");
}
@Override
public boolean test(Map<Object, Object> ctx) throws Exception {
- long key = ThreadLocalRandom.current().nextLong(0, this.keyRange);
+ final long key = keyRange.random();
region.get(key);
return true;
}
diff --git
a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tasks/OQLQuery.java
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tasks/OQLQuery.java
index 3dc72e7..2a1a5a2 100644
---
a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tasks/OQLQuery.java
+++
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tasks/OQLQuery.java
@@ -24,6 +24,7 @@ import org.slf4j.LoggerFactory;
import org.yardstickframework.BenchmarkConfiguration;
import org.yardstickframework.BenchmarkDriverAdapter;
+import org.apache.geode.benchmark.LongRange;
import org.apache.geode.cache.Region;
import org.apache.geode.cache.client.ClientCache;
import org.apache.geode.cache.client.ClientCacheFactory;
@@ -38,11 +39,11 @@ import org.apache.geode.perftest.jvms.RemoteJVMFactory;
public class OQLQuery extends BenchmarkDriverAdapter implements Serializable {
private static final Logger logger =
LoggerFactory.getLogger(RemoteJVMFactory.class);
private Region<Object, Object> region;
- private long keyRange;
+ private LongRange keyRange;
private long queryRange;
ClientCache cache;
- public OQLQuery(long keyRange, long queryRange) {
+ public OQLQuery(LongRange keyRange, long queryRange) {
this.keyRange = keyRange;
this.queryRange = queryRange;
}
@@ -56,7 +57,8 @@ public class OQLQuery extends BenchmarkDriverAdapter
implements Serializable {
@Override
public boolean test(Map<Object, Object> ctx) throws Exception {
- long minId = ThreadLocalRandom.current().nextLong(0, this.keyRange -
queryRange);
+ long minId =
+ ThreadLocalRandom.current().nextLong(keyRange.getMin(),
keyRange.getMax() - queryRange);
long maxId = minId + queryRange;
SelectResults results = executeQuery(minId, maxId);
diff --git
a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tasks/PrePopulateRegion.java
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tasks/PrePopulateRegion.java
index fd119c0..816fb1c 100644
---
a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tasks/PrePopulateRegion.java
+++
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tasks/PrePopulateRegion.java
@@ -34,85 +34,57 @@ import benchmark.geode.data.Portfolio;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.apache.geode.benchmark.LongRange;
import org.apache.geode.cache.Cache;
import org.apache.geode.cache.Region;
import org.apache.geode.perftest.Task;
import org.apache.geode.perftest.TestContext;
-import org.apache.geode.perftest.jvms.RemoteJVMFactory;
public class PrePopulateRegion implements Task {
- long keyRangeToPrepopulate = 10000;
+ private static final Logger logger =
LoggerFactory.getLogger(PrePopulateRegion.class);
+
+ private LongRange keyRangeToPrepopulate = new LongRange(0, 10000);
private int batchSize = 1000;
- private static final Logger logger =
LoggerFactory.getLogger(RemoteJVMFactory.class);
public PrePopulateRegion() {}
- public PrePopulateRegion(long keyRangeToPrepopulate) {
+ public PrePopulateRegion(LongRange keyRangeToPrepopulate) {
this.keyRangeToPrepopulate = keyRangeToPrepopulate;
}
/**
- * This method prepopulates the region
- * before the actual benchmark starts.
- *
+ * This method prepopulates the region before the actual benchmark starts.
*/
@Override
public void run(TestContext context) throws InterruptedException {
- Cache serverCache = (Cache) context.getAttribute("SERVER_CACHE");
- Region<Long, Portfolio> region = serverCache.getRegion("region");
- int numLocators = context.getHostsIDsForRole(LOCATOR).size();
- int numServers = context.getHostsIDsForRole(SERVER).size();
- int jvmID = context.getJvmID();
+ final Cache serverCache = (Cache) context.getAttribute("SERVER_CACHE");
+ final Region<Long, Portfolio> region = serverCache.getRegion("region");
+ final int numLocators = context.getHostsIDsForRole(LOCATOR).size();
+ final int numServers = context.getHostsIDsForRole(SERVER).size();
+ final int jvmID = context.getJvmID();
+ final int serverIndex = jvmID - numLocators;
- run(region, numLocators, numServers, jvmID);
+ run(region, keyRangeToPrepopulate.sliceFor(numServers, serverIndex));
}
- void run(Map<Long, Portfolio> region, int numLocators, int numServers, int
jvmID)
- throws InterruptedException {
- int serverIndex = jvmID - numLocators;
- long numPutsPerServer = this.keyRangeToPrepopulate / numServers;
- int numThreads =
- numPutsPerServer < getBatchSize() ? 1 :
Runtime.getRuntime().availableProcessors();
-
- // calculate non-overlapping key ranges for each server
- long lowBound = numPutsPerServer * serverIndex;
- long highBound = numPutsPerServer * (serverIndex + 1);
- if (serverIndex == (numServers - 1)) {
- highBound += this.keyRangeToPrepopulate % (serverIndex + 1);
- }
-
+ void run(final Map<Long, Portfolio> region, final LongRange range) throws
InterruptedException {
logger.info("*******************************************");
logger.info(" Prepopulating the region ");
logger.info("*******************************************");
- Instant start = Instant.now();
-
- ExecutorService threadPool = Executors.newFixedThreadPool(numThreads);
- List<CompletableFuture<Void>> futures = new ArrayList<>();
-
- long range = highBound - lowBound;
- long putsPerThread = range / numThreads;
-
- for (int i = 0; i < numThreads; i++) {
- int threadNum = i;
+ final Instant start = Instant.now();
- Runnable putThread = () -> {
- long low = lowBound + (putsPerThread * threadNum);
- long high = low + putsPerThread;
+ final int numThreads = Runtime.getRuntime().availableProcessors();
+ final ExecutorService threadPool =
Executors.newFixedThreadPool(numThreads);
+ final List<CompletableFuture<Void>> futures = new ArrayList<>();
- if (threadNum == (numThreads - 1)) {
- high += range % numThreads;
- }
-
- doPuts(region, low, high);
- };
-
- futures.add(CompletableFuture.runAsync(putThread, threadPool));
+ for (final LongRange slice : range.slice(numThreads)) {
+ futures.add(CompletableFuture.runAsync(() -> doPuts(region, slice),
threadPool));
}
futures.forEach(CompletableFuture::join);
- Instant finish = Instant.now();
+ final Instant finish = Instant.now();
logger.info("*******************************************");
logger.info(" Prepopulating the region completed");
logger.info(" Duration = " + Duration.between(start, finish).toMillis()
+ "ms.");
@@ -122,20 +94,10 @@ public class PrePopulateRegion implements Task {
threadPool.awaitTermination(5, TimeUnit.MINUTES);
}
- private void doPuts(Map<Long, Portfolio> region, long lowBound, long
highBound) {
- Map<Long, Portfolio> valueMap = new HashMap<>();
- for (long putIndex = lowBound; putIndex < highBound; putIndex++) {
- // build a map of to put to the server
-
- valueMap.put(putIndex, new Portfolio(putIndex));
-
- if (putIndex % getBatchSize() == 0) {
- region.putAll(valueMap);
- valueMap = new HashMap<>();
- }
- }
-
- if (!valueMap.isEmpty()) {
+ private void doPuts(final Map<Long, Portfolio> region, final LongRange
range) {
+ for (final LongRange slice : range.slicesOfSize(batchSize)) {
+ final Map<Long, Portfolio> valueMap = new HashMap<>();
+ slice.forEach(i -> valueMap.put(i, new Portfolio(i)));
region.putAll(valueMap);
}
}
diff --git
a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tasks/PutAllTask.java
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tasks/PutAllTask.java
index 67b30c6..8b2b729 100644
---
a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tasks/PutAllTask.java
+++
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tasks/PutAllTask.java
@@ -20,24 +20,24 @@ package org.apache.geode.benchmark.tasks;
import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;
-import java.util.concurrent.ThreadLocalRandom;
import benchmark.geode.data.Portfolio;
import org.yardstickframework.BenchmarkConfiguration;
import org.yardstickframework.BenchmarkDriverAdapter;
+import org.apache.geode.benchmark.LongRange;
import org.apache.geode.cache.Region;
import org.apache.geode.cache.client.ClientCache;
import org.apache.geode.cache.client.ClientCacheFactory;
public class PutAllTask extends BenchmarkDriverAdapter implements Serializable
{
- private final long keyRange;
+ private final LongRange keyRange;
private final int batchSize;
private Region<Object, Object> region;
- public PutAllTask(long keyRange, int batchSize) {
+ public PutAllTask(LongRange keyRange, int batchSize) {
this.keyRange = keyRange;
this.batchSize = batchSize;
}
@@ -51,8 +51,8 @@ public class PutAllTask extends BenchmarkDriverAdapter
implements Serializable {
@Override
public boolean test(Map<Object, Object> ctx) {
- long key = ThreadLocalRandom.current().nextLong(0, this.keyRange);
- HashMap<Object, Object> batch = new HashMap<>(batchSize);
+ final long key = keyRange.random();
+ final HashMap<Object, Object> batch = new HashMap<>(batchSize);
for (int i = 0; i < batchSize; i++) {
batch.put(key, new Portfolio(key));
}
diff --git
a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tasks/PutTask.java
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tasks/PutTask.java
index b077767..ae3aa98 100644
---
a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tasks/PutTask.java
+++
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tasks/PutTask.java
@@ -19,12 +19,12 @@ package org.apache.geode.benchmark.tasks;
import java.io.Serializable;
import java.util.Map;
-import java.util.concurrent.ThreadLocalRandom;
import benchmark.geode.data.Portfolio;
import org.yardstickframework.BenchmarkConfiguration;
import org.yardstickframework.BenchmarkDriverAdapter;
+import org.apache.geode.benchmark.LongRange;
import org.apache.geode.cache.Region;
import org.apache.geode.cache.client.ClientCache;
import org.apache.geode.cache.client.ClientCacheFactory;
@@ -33,9 +33,9 @@ public class PutTask extends BenchmarkDriverAdapter
implements Serializable {
private Region<Object, Object> region;
- private long keyRange;
+ private LongRange keyRange;
- public PutTask(long keyRange) {
+ public PutTask(LongRange keyRange) {
this.keyRange = keyRange;
}
@@ -47,8 +47,8 @@ public class PutTask extends BenchmarkDriverAdapter
implements Serializable {
}
@Override
- public boolean test(Map<Object, Object> ctx) throws Exception {
- long key = ThreadLocalRandom.current().nextLong(0, this.keyRange);
+ public boolean test(Map<Object, Object> ctx) {
+ long key = keyRange.random();
region.put(key, new Portfolio(key));
return true;
}
diff --git
a/geode-benchmarks/src/test/java/org/apache/geode/benchmark/tests/ReplicatedPutBenchmarkTest.java
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tasks/RegisterFunction.java
similarity index 51%
copy from
geode-benchmarks/src/test/java/org/apache/geode/benchmark/tests/ReplicatedPutBenchmarkTest.java
copy to
geode-benchmarks/src/main/java/org/apache/geode/benchmark/tasks/RegisterFunction.java
index 0421d53..1fe888e 100644
---
a/geode-benchmarks/src/test/java/org/apache/geode/benchmark/tests/ReplicatedPutBenchmarkTest.java
+++
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tasks/RegisterFunction.java
@@ -15,34 +15,24 @@
* limitations under the License.
*/
-package org.apache.geode.benchmark.tests;
+package org.apache.geode.benchmark.tasks;
-import java.io.File;
-import java.nio.file.Path;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.ExtendWith;
-import org.junitpioneer.jupiter.TempDirectory;
+import org.apache.geode.cache.execute.Function;
+import org.apache.geode.cache.execute.FunctionService;
+import org.apache.geode.perftest.Task;
+import org.apache.geode.perftest.TestContext;
-import org.apache.geode.perftest.TestRunners;
+public class RegisterFunction implements Task {
-@ExtendWith(TempDirectory.class)
-public class ReplicatedPutBenchmarkTest {
+ private final Function<?> function;
- private File folder;
-
- @BeforeEach
- void createTemporaryFolder(@TempDirectory.TempDir Path tempFolder) {
- folder = tempFolder.toFile();
+ public RegisterFunction(final Function<?> function) {
+ this.function = function;
}
- @Test
- public void benchmarkRunsSuccessfully()
- throws Exception {
- ReplicatedPutBenchmark test = new ReplicatedPutBenchmark();
- test.setKeyRange(100);
- TestRunners.minimalRunner(folder)
- .runTest(test);
+ @Override
+ public void run(TestContext context) throws InterruptedException {
+ FunctionService.registerFunction(function);
}
}
diff --git
a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/AbstractPartitionedFunctionBenchmark.java
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/AbstractFunctionBenchmark.java
similarity index 72%
copy from
geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/AbstractPartitionedFunctionBenchmark.java
copy to
geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/AbstractFunctionBenchmark.java
index 22800e7..5dcad0f 100644
---
a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/AbstractPartitionedFunctionBenchmark.java
+++
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/AbstractFunctionBenchmark.java
@@ -18,32 +18,38 @@ package org.apache.geode.benchmark.tests;
import static
org.apache.geode.benchmark.topology.ClientServerTopology.Roles.CLIENT;
import static
org.apache.geode.benchmark.topology.ClientServerTopology.Roles.SERVER;
+import benchmark.geode.data.BenchmarkFunction;
+
+import org.apache.geode.benchmark.LongRange;
import org.apache.geode.benchmark.tasks.CreateClientProxyRegion;
-import org.apache.geode.benchmark.tasks.CreatePartitionedRegion;
import org.apache.geode.benchmark.tasks.PrePopulateRegion;
+import org.apache.geode.benchmark.tasks.RegisterFunction;
import org.apache.geode.benchmark.topology.ClientServerTopology;
import org.apache.geode.perftest.PerformanceTest;
import org.apache.geode.perftest.TestConfig;
-abstract class AbstractPartitionedFunctionBenchmark implements PerformanceTest
{
- private long keyRange = 1000000;
+abstract class AbstractFunctionBenchmark implements PerformanceTest {
+ private LongRange keyRange = new LongRange(0, 1000000);
- public final void setKeyRange(long keyRange) {
+ public final void setKeyRange(LongRange keyRange) {
this.keyRange = keyRange;
}
- public final long getKeyRange() {
+ public final LongRange getKeyRange() {
return keyRange;
}
@Override
public TestConfig configure() {
TestConfig config = GeodeBenchmark.createConfig();
- config.threads(Runtime.getRuntime().availableProcessors() * 4);
+ config.threads(Runtime.getRuntime().availableProcessors() * 3);
ClientServerTopology.configure(config);
- config.before(new CreatePartitionedRegion(), SERVER);
+ configureRegion(config);
config.before(new CreateClientProxyRegion(), CLIENT);
- config.before(new PrePopulateRegion(keyRange), SERVER);
+ config.before(new PrePopulateRegion(getKeyRange()), SERVER);
+ config.before(new RegisterFunction(new BenchmarkFunction(getKeyRange())),
SERVER);
return config;
}
+
+ protected abstract void configureRegion(TestConfig config);
}
diff --git
a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/AbstractPartitionedFunctionBenchmark.java
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/AbstractPartitionedFunctionBenchmark.java
index 22800e7..fdbd166 100644
---
a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/AbstractPartitionedFunctionBenchmark.java
+++
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/AbstractPartitionedFunctionBenchmark.java
@@ -15,35 +15,14 @@
package org.apache.geode.benchmark.tests;
-import static
org.apache.geode.benchmark.topology.ClientServerTopology.Roles.CLIENT;
import static
org.apache.geode.benchmark.topology.ClientServerTopology.Roles.SERVER;
-import org.apache.geode.benchmark.tasks.CreateClientProxyRegion;
import org.apache.geode.benchmark.tasks.CreatePartitionedRegion;
-import org.apache.geode.benchmark.tasks.PrePopulateRegion;
-import org.apache.geode.benchmark.topology.ClientServerTopology;
-import org.apache.geode.perftest.PerformanceTest;
import org.apache.geode.perftest.TestConfig;
-abstract class AbstractPartitionedFunctionBenchmark implements PerformanceTest
{
- private long keyRange = 1000000;
-
- public final void setKeyRange(long keyRange) {
- this.keyRange = keyRange;
- }
-
- public final long getKeyRange() {
- return keyRange;
- }
-
+abstract class AbstractPartitionedFunctionBenchmark extends
AbstractFunctionBenchmark {
@Override
- public TestConfig configure() {
- TestConfig config = GeodeBenchmark.createConfig();
- config.threads(Runtime.getRuntime().availableProcessors() * 4);
- ClientServerTopology.configure(config);
+ protected void configureRegion(TestConfig config) {
config.before(new CreatePartitionedRegion(), SERVER);
- config.before(new CreateClientProxyRegion(), CLIENT);
- config.before(new PrePopulateRegion(keyRange), SERVER);
- return config;
}
}
diff --git
a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/AbstractReplicatedFunctionBenchmark.java
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/AbstractReplicatedFunctionBenchmark.java
index 4fb2676..6a9fa17 100644
---
a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/AbstractReplicatedFunctionBenchmark.java
+++
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/AbstractReplicatedFunctionBenchmark.java
@@ -15,35 +15,14 @@
package org.apache.geode.benchmark.tests;
-import static
org.apache.geode.benchmark.topology.ClientServerTopology.Roles.CLIENT;
import static
org.apache.geode.benchmark.topology.ClientServerTopology.Roles.SERVER;
-import org.apache.geode.benchmark.tasks.CreateClientProxyRegion;
import org.apache.geode.benchmark.tasks.CreateReplicatedRegion;
-import org.apache.geode.benchmark.tasks.PrePopulateRegion;
-import org.apache.geode.benchmark.topology.ClientServerTopology;
-import org.apache.geode.perftest.PerformanceTest;
import org.apache.geode.perftest.TestConfig;
-abstract class AbstractReplicatedFunctionBenchmark implements PerformanceTest {
- private long keyRange = 1000000;
-
- public final void setKeyRange(long keyRange) {
- this.keyRange = keyRange;
- }
-
- public final long getKeyRange() {
- return keyRange;
- }
-
+abstract class AbstractReplicatedFunctionBenchmark extends
AbstractFunctionBenchmark {
@Override
- public TestConfig configure() {
- TestConfig config = GeodeBenchmark.createConfig();
- config.threads(Runtime.getRuntime().availableProcessors() * 4);
- ClientServerTopology.configure(config);
+ protected void configureRegion(TestConfig config) {
config.before(new CreateReplicatedRegion(), SERVER);
- config.before(new CreateClientProxyRegion(), CLIENT);
- config.before(new PrePopulateRegion(keyRange), SERVER);
- return config;
}
}
diff --git
a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/PartitionedFunctionExecutionBenchmark.java
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/PartitionedFunctionExecutionBenchmark.java
index 42756e5..0b964b6 100644
---
a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/PartitionedFunctionExecutionBenchmark.java
+++
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/PartitionedFunctionExecutionBenchmark.java
@@ -23,11 +23,6 @@ import org.apache.geode.perftest.TestConfig;
import org.apache.geode.perftest.TestRunners;
public class PartitionedFunctionExecutionBenchmark extends
AbstractPartitionedFunctionBenchmark {
- private long functionIDRange = 1000;
-
- public void setFunctionIDRange(long functionIDRange) {
- this.functionIDRange = functionIDRange;
- }
@Test
public void run() throws Exception {
@@ -37,7 +32,7 @@ public class PartitionedFunctionExecutionBenchmark extends
AbstractPartitionedFu
@Override
public TestConfig configure() {
TestConfig config = super.configure();
- config.workload(new ExecuteFunction(getKeyRange(), functionIDRange),
CLIENT);
+ config.workload(new ExecuteFunction(), CLIENT);
return config;
}
}
diff --git
a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/PartitionedFunctionExecutionWithArgumentsBenchmark.java
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/PartitionedFunctionExecutionWithArgumentsBenchmark.java
index fc7f1f5..e5605d7 100644
---
a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/PartitionedFunctionExecutionWithArgumentsBenchmark.java
+++
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/PartitionedFunctionExecutionWithArgumentsBenchmark.java
@@ -24,11 +24,6 @@ import org.apache.geode.perftest.TestRunners;
public class PartitionedFunctionExecutionWithArgumentsBenchmark
extends AbstractPartitionedFunctionBenchmark {
- private long functionIDRange = 1000;
-
- public void setFunctionIDRange(long functionIDRange) {
- this.functionIDRange = functionIDRange;
- }
@Test
public void run() throws Exception {
@@ -39,7 +34,8 @@ public class
PartitionedFunctionExecutionWithArgumentsBenchmark
@Override
public TestConfig configure() {
TestConfig config = super.configure();
- config.workload(new ExecuteParameterizedFunction(getKeyRange(),
functionIDRange), CLIENT);
+ config.threads(Runtime.getRuntime().availableProcessors() * 4);
+ config.workload(new ExecuteParameterizedFunction(getKeyRange()), CLIENT);
return config;
}
diff --git
a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/PartitionedFunctionExecutionWithFiltersBenchmark.java
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/PartitionedFunctionExecutionWithFiltersBenchmark.java
index d6440ca..cad7f8a 100644
---
a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/PartitionedFunctionExecutionWithFiltersBenchmark.java
+++
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/PartitionedFunctionExecutionWithFiltersBenchmark.java
@@ -24,11 +24,6 @@ import org.apache.geode.perftest.TestRunners;
public class PartitionedFunctionExecutionWithFiltersBenchmark
extends AbstractPartitionedFunctionBenchmark {
- private long filterKeyRange = 1000;
-
- public void setFilterKeyRange(long filterKeyRange) {
- this.filterKeyRange = filterKeyRange;
- }
@Test
public void run() throws Exception {
@@ -38,7 +33,8 @@ public class PartitionedFunctionExecutionWithFiltersBenchmark
@Override
public TestConfig configure() {
TestConfig config = super.configure();
- config.workload(new ExecuteFilteredFunction(getKeyRange(),
filterKeyRange), CLIENT);
+ config.threads(Runtime.getRuntime().availableProcessors() * 8);
+ config.workload(new ExecuteFilteredFunction(getKeyRange()), CLIENT);
return config;
}
}
diff --git
a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/PartitionedGetBenchmark.java
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/PartitionedGetBenchmark.java
index f958f0f..20dd8dd 100644
---
a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/PartitionedGetBenchmark.java
+++
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/PartitionedGetBenchmark.java
@@ -23,6 +23,7 @@ import static
org.apache.geode.benchmark.topology.ClientServerTopology.Roles.SER
import org.junit.jupiter.api.Test;
+import org.apache.geode.benchmark.LongRange;
import org.apache.geode.benchmark.tasks.CreateClientProxyRegion;
import org.apache.geode.benchmark.tasks.CreatePartitionedRegion;
import org.apache.geode.benchmark.tasks.GetTask;
@@ -37,7 +38,7 @@ import org.apache.geode.perftest.TestRunners;
*/
public class PartitionedGetBenchmark implements PerformanceTest {
- private long keyRange = 1000000;
+ private LongRange keyRange = new LongRange(0, 1000000);
@Test
public void run() throws Exception {
@@ -46,7 +47,7 @@ public class PartitionedGetBenchmark implements
PerformanceTest {
public PartitionedGetBenchmark() {}
- public void setKeyRange(long keyRange) {
+ public void setKeyRange(final LongRange keyRange) {
this.keyRange = keyRange;
}
diff --git
a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/PartitionedIndexedQueryBenchmark.java
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/PartitionedIndexedQueryBenchmark.java
index 378dfcb..d5ec82a 100644
---
a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/PartitionedIndexedQueryBenchmark.java
+++
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/PartitionedIndexedQueryBenchmark.java
@@ -19,6 +19,7 @@ import static
org.apache.geode.benchmark.topology.ClientServerTopology.Roles.SER
import org.junit.jupiter.api.Test;
+import org.apache.geode.benchmark.LongRange;
import org.apache.geode.benchmark.tasks.CreateClientProxyRegion;
import org.apache.geode.benchmark.tasks.CreateIndexOnID;
import org.apache.geode.benchmark.tasks.CreatePartitionedRegion;
@@ -30,16 +31,16 @@ import org.apache.geode.perftest.TestConfig;
import org.apache.geode.perftest.TestRunners;
public class PartitionedIndexedQueryBenchmark implements PerformanceTest {
- private long keyRange = 500000;
+ private LongRange keyRange = new LongRange(0, 500000);
private long queryRange = 1000;
public PartitionedIndexedQueryBenchmark() {}
- public void setKeyRange(long keyRange) {
+ public void setKeyRange(final LongRange keyRange) {
this.keyRange = keyRange;
}
- public void setQueryRange(long queryRange) {
+ public void setQueryRange(final long queryRange) {
this.queryRange = queryRange;
}
diff --git
a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/PartitionedNonIndexedQueryBenchmark.java
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/PartitionedNonIndexedQueryBenchmark.java
index a161326..c7e2177 100644
---
a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/PartitionedNonIndexedQueryBenchmark.java
+++
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/PartitionedNonIndexedQueryBenchmark.java
@@ -19,6 +19,7 @@ import static
org.apache.geode.benchmark.topology.ClientServerTopology.Roles.SER
import org.junit.jupiter.api.Test;
+import org.apache.geode.benchmark.LongRange;
import org.apache.geode.benchmark.tasks.CreateClientProxyRegion;
import org.apache.geode.benchmark.tasks.CreatePartitionedRegion;
import org.apache.geode.benchmark.tasks.OQLQuery;
@@ -29,16 +30,16 @@ import org.apache.geode.perftest.TestConfig;
import org.apache.geode.perftest.TestRunners;
public class PartitionedNonIndexedQueryBenchmark implements PerformanceTest {
- private long keyRange = 500000;
+ private LongRange keyRange = new LongRange(0, 500000);
private long queryRange = 1000;
public PartitionedNonIndexedQueryBenchmark() {}
- public void setKeyRange(long keyRange) {
+ public void setKeyRange(final LongRange keyRange) {
this.keyRange = keyRange;
}
- public void setQueryRange(long queryRange) {
+ public void setQueryRange(final long queryRange) {
this.queryRange = queryRange;
}
diff --git
a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/PartitionedPutAllBenchmark.java
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/PartitionedPutAllBenchmark.java
index 6fbc19c..f6d8e96 100644
---
a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/PartitionedPutAllBenchmark.java
+++
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/PartitionedPutAllBenchmark.java
@@ -22,6 +22,7 @@ import static
org.apache.geode.benchmark.topology.ClientServerTopology.Roles.SER
import org.junit.jupiter.api.Test;
+import org.apache.geode.benchmark.LongRange;
import org.apache.geode.benchmark.tasks.CreateClientProxyRegion;
import org.apache.geode.benchmark.tasks.CreatePartitionedRegion;
import org.apache.geode.benchmark.tasks.PrePopulateRegion;
@@ -36,13 +37,13 @@ import org.apache.geode.perftest.TestRunners;
*/
public class PartitionedPutAllBenchmark implements PerformanceTest {
- private long keyRange = 1000000;
+ private LongRange keyRange = new LongRange(0, 1000000);
private int batchSize = 1000;
public PartitionedPutAllBenchmark() {}
- public void setKeyRange(long keyRange) {
+ public void setKeyRange(final LongRange keyRange) {
this.keyRange = keyRange;
}
diff --git
a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/PartitionedPutBenchmark.java
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/PartitionedPutBenchmark.java
index 3357a17..dd5fcf2 100644
---
a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/PartitionedPutBenchmark.java
+++
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/PartitionedPutBenchmark.java
@@ -22,6 +22,7 @@ import static
org.apache.geode.benchmark.topology.ClientServerTopology.Roles.SER
import org.junit.jupiter.api.Test;
+import org.apache.geode.benchmark.LongRange;
import org.apache.geode.benchmark.tasks.CreateClientProxyRegion;
import org.apache.geode.benchmark.tasks.CreatePartitionedRegion;
import org.apache.geode.benchmark.tasks.PrePopulateRegion;
@@ -36,11 +37,11 @@ import org.apache.geode.perftest.TestRunners;
*/
public class PartitionedPutBenchmark implements PerformanceTest {
- private long keyRange = 1000000;
+ private LongRange keyRange = new LongRange(0, 1000000);
public PartitionedPutBenchmark() {}
- public void setKeyRange(long keyRange) {
+ public void setKeyRange(final LongRange keyRange) {
this.keyRange = keyRange;
}
diff --git
a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/ReplicatedFunctionExecutionBenchmark.java
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/ReplicatedFunctionExecutionBenchmark.java
index 7a11138..e5b2cce 100644
---
a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/ReplicatedFunctionExecutionBenchmark.java
+++
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/ReplicatedFunctionExecutionBenchmark.java
@@ -23,11 +23,6 @@ import org.apache.geode.perftest.TestConfig;
import org.apache.geode.perftest.TestRunners;
public class ReplicatedFunctionExecutionBenchmark extends
AbstractReplicatedFunctionBenchmark {
- private long functionIDRange = 1000;
-
- public void setFunctionIDRange(long functionIDRange) {
- this.functionIDRange = functionIDRange;
- }
@Test
public void run() throws Exception {
@@ -37,7 +32,7 @@ public class ReplicatedFunctionExecutionBenchmark extends
AbstractReplicatedFunc
@Override
public TestConfig configure() {
TestConfig config = super.configure();
- config.workload(new ExecuteFunction(getKeyRange(), functionIDRange),
CLIENT);
+ config.workload(new ExecuteFunction(), CLIENT);
return config;
}
}
diff --git
a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/ReplicatedFunctionExecutionWithArgumentsBenchmark.java
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/ReplicatedFunctionExecutionWithArgumentsBenchmark.java
index 25710c4..faf6cb2 100644
---
a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/ReplicatedFunctionExecutionWithArgumentsBenchmark.java
+++
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/ReplicatedFunctionExecutionWithArgumentsBenchmark.java
@@ -24,11 +24,6 @@ import org.apache.geode.perftest.TestRunners;
public class ReplicatedFunctionExecutionWithArgumentsBenchmark
extends AbstractReplicatedFunctionBenchmark {
- private long functionIDRange = 1000;
-
- public void setFunctionIDRange(long functionIDRange) {
- this.functionIDRange = functionIDRange;
- }
@Test
public void run() throws Exception {
@@ -38,7 +33,8 @@ public class ReplicatedFunctionExecutionWithArgumentsBenchmark
@Override
public TestConfig configure() {
TestConfig config = super.configure();
- config.workload(new ExecuteParameterizedFunction(getKeyRange(),
functionIDRange), CLIENT);
+ config.threads(Runtime.getRuntime().availableProcessors() * 16);
+ config.workload(new ExecuteParameterizedFunction(getKeyRange()), CLIENT);
return config;
}
}
diff --git
a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/ReplicatedFunctionExecutionWithFiltersBenchmark.java
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/ReplicatedFunctionExecutionWithFiltersBenchmark.java
index f1e5be5..30aed9d 100644
---
a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/ReplicatedFunctionExecutionWithFiltersBenchmark.java
+++
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/ReplicatedFunctionExecutionWithFiltersBenchmark.java
@@ -24,11 +24,6 @@ import org.apache.geode.perftest.TestRunners;
public class ReplicatedFunctionExecutionWithFiltersBenchmark
extends AbstractReplicatedFunctionBenchmark {
- private long filterKeyRange = 1000;
-
- public void setFilterKeyRange(long filterKeyRange) {
- this.filterKeyRange = filterKeyRange;
- }
@Test
public void run() throws Exception {
@@ -38,7 +33,8 @@ public class ReplicatedFunctionExecutionWithFiltersBenchmark
@Override
public TestConfig configure() {
TestConfig config = super.configure();
- config.workload(new ExecuteFilteredFunction(getKeyRange(),
filterKeyRange), CLIENT);
+ config.threads(Runtime.getRuntime().availableProcessors() * 10);
+ config.workload(new ExecuteFilteredFunction(getKeyRange()), CLIENT);
return config;
}
}
diff --git
a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/ReplicatedGetBenchmark.java
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/ReplicatedGetBenchmark.java
index 806c058..13cec98 100644
---
a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/ReplicatedGetBenchmark.java
+++
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/ReplicatedGetBenchmark.java
@@ -23,6 +23,7 @@ import static
org.apache.geode.benchmark.topology.ClientServerTopology.Roles.SER
import org.junit.jupiter.api.Test;
+import org.apache.geode.benchmark.LongRange;
import org.apache.geode.benchmark.tasks.CreateClientProxyRegion;
import org.apache.geode.benchmark.tasks.CreateReplicatedRegion;
import org.apache.geode.benchmark.tasks.GetTask;
@@ -37,7 +38,7 @@ import org.apache.geode.perftest.TestRunners;
*/
public class ReplicatedGetBenchmark implements PerformanceTest {
- private long keyRange = 1000000;
+ private LongRange keyRange = new LongRange(0, 1000000);
@Test
public void run() throws Exception {
@@ -46,7 +47,7 @@ public class ReplicatedGetBenchmark implements
PerformanceTest {
public ReplicatedGetBenchmark() {}
- public void setKeyRange(long keyRange) {
+ public void setKeyRange(final LongRange keyRange) {
this.keyRange = keyRange;
}
diff --git
a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/ReplicatedIndexedQueryBenchmark.java
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/ReplicatedIndexedQueryBenchmark.java
index 589babc..408a4c5 100644
---
a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/ReplicatedIndexedQueryBenchmark.java
+++
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/ReplicatedIndexedQueryBenchmark.java
@@ -19,6 +19,7 @@ import static
org.apache.geode.benchmark.topology.ClientServerTopology.Roles.SER
import org.junit.jupiter.api.Test;
+import org.apache.geode.benchmark.LongRange;
import org.apache.geode.benchmark.tasks.CreateClientProxyRegion;
import org.apache.geode.benchmark.tasks.CreateIndexOnID;
import org.apache.geode.benchmark.tasks.CreateReplicatedRegion;
@@ -30,16 +31,16 @@ import org.apache.geode.perftest.TestConfig;
import org.apache.geode.perftest.TestRunners;
public class ReplicatedIndexedQueryBenchmark implements PerformanceTest {
- private long keyRange = 500000;
+ private LongRange keyRange = new LongRange(0, 500000);
private long queryRange = 1000;
public ReplicatedIndexedQueryBenchmark() {}
- public void setKeyRange(long keyRange) {
+ public void setKeyRange(final LongRange keyRange) {
this.keyRange = keyRange;
}
- public void setQueryRange(long queryRange) {
+ public void setQueryRange(final long queryRange) {
this.queryRange = queryRange;
}
diff --git
a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/ReplicatedNonIndexedQueryBenchmark.java
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/ReplicatedNonIndexedQueryBenchmark.java
index 74884ba..827cbae 100644
---
a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/ReplicatedNonIndexedQueryBenchmark.java
+++
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/ReplicatedNonIndexedQueryBenchmark.java
@@ -19,6 +19,7 @@ import static
org.apache.geode.benchmark.topology.ClientServerTopology.Roles.SER
import org.junit.jupiter.api.Test;
+import org.apache.geode.benchmark.LongRange;
import org.apache.geode.benchmark.tasks.CreateClientProxyRegion;
import org.apache.geode.benchmark.tasks.CreateReplicatedRegion;
import org.apache.geode.benchmark.tasks.OQLQuery;
@@ -29,12 +30,12 @@ import org.apache.geode.perftest.TestConfig;
import org.apache.geode.perftest.TestRunners;
public class ReplicatedNonIndexedQueryBenchmark implements PerformanceTest {
- private long keyRange = 500000;
+ private LongRange keyRange = new LongRange(0, 500000);
private long queryRange = 1000;
public ReplicatedNonIndexedQueryBenchmark() {}
- public void setKeyRange(long keyRange) {
+ public void setKeyRange(LongRange keyRange) {
this.keyRange = keyRange;
}
diff --git
a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/ReplicatedPutAllBenchmark.java
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/ReplicatedPutAllBenchmark.java
index 2a20717..abd461c 100644
---
a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/ReplicatedPutAllBenchmark.java
+++
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/ReplicatedPutAllBenchmark.java
@@ -22,6 +22,7 @@ import static
org.apache.geode.benchmark.topology.ClientServerTopology.Roles.SER
import org.junit.jupiter.api.Test;
+import org.apache.geode.benchmark.LongRange;
import org.apache.geode.benchmark.tasks.CreateClientProxyRegion;
import org.apache.geode.benchmark.tasks.CreateReplicatedRegion;
import org.apache.geode.benchmark.tasks.PrePopulateRegion;
@@ -36,13 +37,13 @@ import org.apache.geode.perftest.TestRunners;
*/
public class ReplicatedPutAllBenchmark implements PerformanceTest {
- private long keyRange = 1000000;
+ private LongRange keyRange = new LongRange(0, 1000000);
private int batchSize = 1000;
public ReplicatedPutAllBenchmark() {}
- public void setKeyRange(long keyRange) {
+ public void setKeyRange(final LongRange keyRange) {
this.keyRange = keyRange;
}
diff --git
a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/ReplicatedPutBenchmark.java
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/ReplicatedPutBenchmark.java
index 40bc02f..4df50cd 100644
---
a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/ReplicatedPutBenchmark.java
+++
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/ReplicatedPutBenchmark.java
@@ -22,6 +22,7 @@ import static
org.apache.geode.benchmark.topology.ClientServerTopology.Roles.SER
import org.junit.jupiter.api.Test;
+import org.apache.geode.benchmark.LongRange;
import org.apache.geode.benchmark.tasks.CreateClientProxyRegion;
import org.apache.geode.benchmark.tasks.CreateReplicatedRegion;
import org.apache.geode.benchmark.tasks.PrePopulateRegion;
@@ -36,11 +37,11 @@ import org.apache.geode.perftest.TestRunners;
*/
public class ReplicatedPutBenchmark implements PerformanceTest {
- private long keyRange = 1000000;
+ private LongRange keyRange = new LongRange(0, 1000000);
public ReplicatedPutBenchmark() {}
- public void setKeyRange(long keyRange) {
+ public void setKeyRange(LongRange keyRange) {
this.keyRange = keyRange;
}
diff --git
a/geode-benchmarks/src/test/java/org/apache/geode/benchmark/tasks/PrePopulateRegionTest.java
b/geode-benchmarks/src/test/java/org/apache/geode/benchmark/tasks/PrePopulateRegionTest.java
index 7770bad..4123fc6 100644
---
a/geode-benchmarks/src/test/java/org/apache/geode/benchmark/tasks/PrePopulateRegionTest.java
+++
b/geode-benchmarks/src/test/java/org/apache/geode/benchmark/tasks/PrePopulateRegionTest.java
@@ -25,15 +25,18 @@ import java.util.stream.LongStream;
import benchmark.geode.data.Portfolio;
import org.junit.jupiter.api.Test;
+import org.apache.geode.benchmark.LongRange;
+
class PrePopulateRegionTest {
@Test
public void putsEntriesForServer() throws InterruptedException {
- PrePopulateRegion prePopulateRegion = new PrePopulateRegion(100);
+ final LongRange range = new LongRange(0, 100);
+ PrePopulateRegion prePopulateRegion = new PrePopulateRegion(range);
Map<Long, Portfolio> region = new ConcurrentHashMap<>();
- prePopulateRegion.run(region, 1, 2, 2);
+ prePopulateRegion.run(region, range.sliceFor(2, 1));
// verify that we put the last 50 keys
verifyKeys(region, 50, 100);
@@ -41,12 +44,13 @@ class PrePopulateRegionTest {
@Test
public void putsEntriesForServerWithSmallBatches() throws
InterruptedException {
- PrePopulateRegion prePopulateRegion = new PrePopulateRegion(100);
+ final LongRange range = new LongRange(0, 100);
+ PrePopulateRegion prePopulateRegion = new PrePopulateRegion(range);
prePopulateRegion.setBatchSize(2);
Map<Long, Portfolio> region = new ConcurrentHashMap<>();
- prePopulateRegion.run(region, 1, 2, 2);
+ prePopulateRegion.run(region, range.sliceFor(2, 1));
// verify that we put the last 50 keys
verifyKeys(region, 50, 100);
diff --git
a/geode-benchmarks/src/test/java/org/apache/geode/benchmark/tests/PartitionedFunctionExecutionBenchmarkTest.java
b/geode-benchmarks/src/test/java/org/apache/geode/benchmark/tests/PartitionedFunctionExecutionBenchmarkTest.java
index ad30de3..6ebf461 100644
---
a/geode-benchmarks/src/test/java/org/apache/geode/benchmark/tests/PartitionedFunctionExecutionBenchmarkTest.java
+++
b/geode-benchmarks/src/test/java/org/apache/geode/benchmark/tests/PartitionedFunctionExecutionBenchmarkTest.java
@@ -21,6 +21,7 @@ import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.extension.ExtendWith;
import org.junitpioneer.jupiter.TempDirectory;
+import org.apache.geode.benchmark.LongRange;
import org.apache.geode.perftest.TestRunners;
@ExtendWith(TempDirectory.class)
@@ -35,8 +36,7 @@ public class PartitionedFunctionExecutionBenchmarkTest {
public void benchmarkRunsSuccessfully() throws Exception {
PartitionedFunctionExecutionBenchmark test = new
PartitionedFunctionExecutionBenchmark();
- test.setKeyRange(100);
- test.setFunctionIDRange(5);
+ test.setKeyRange(new LongRange(0, 100));
TestRunners.minimalRunner(folder).runTest(test);
}
}
diff --git
a/geode-benchmarks/src/test/java/org/apache/geode/benchmark/tests/PartitionedFunctionExecutionWithArgumentsBenchmarkTest.java
b/geode-benchmarks/src/test/java/org/apache/geode/benchmark/tests/PartitionedFunctionExecutionWithArgumentsBenchmarkTest.java
index 58a4490..f6b067a 100644
---
a/geode-benchmarks/src/test/java/org/apache/geode/benchmark/tests/PartitionedFunctionExecutionWithArgumentsBenchmarkTest.java
+++
b/geode-benchmarks/src/test/java/org/apache/geode/benchmark/tests/PartitionedFunctionExecutionWithArgumentsBenchmarkTest.java
@@ -22,6 +22,7 @@ import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.junitpioneer.jupiter.TempDirectory;
+import org.apache.geode.benchmark.LongRange;
import org.apache.geode.perftest.TestRunners;
@ExtendWith(TempDirectory.class)
@@ -38,8 +39,7 @@ public class
PartitionedFunctionExecutionWithArgumentsBenchmarkTest {
public void benchmarkRunsSuccessfully() throws Exception {
PartitionedFunctionExecutionWithArgumentsBenchmark test =
new PartitionedFunctionExecutionWithArgumentsBenchmark();
- test.setKeyRange(100);
- test.setFunctionIDRange(5);
+ test.setKeyRange(new LongRange(0, 100));
TestRunners.minimalRunner(folder).runTest(test);
}
}
diff --git
a/geode-benchmarks/src/test/java/org/apache/geode/benchmark/tests/PartitionedFunctionExecutionWithFiltersBenchmarkTest.java
b/geode-benchmarks/src/test/java/org/apache/geode/benchmark/tests/PartitionedFunctionExecutionWithFiltersBenchmarkTest.java
index 7a9f446..4fb759a 100644
---
a/geode-benchmarks/src/test/java/org/apache/geode/benchmark/tests/PartitionedFunctionExecutionWithFiltersBenchmarkTest.java
+++
b/geode-benchmarks/src/test/java/org/apache/geode/benchmark/tests/PartitionedFunctionExecutionWithFiltersBenchmarkTest.java
@@ -22,6 +22,9 @@ import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.junitpioneer.jupiter.TempDirectory;
+import org.apache.geode.benchmark.LongRange;
+import org.apache.geode.perftest.TestRunners;
+
@ExtendWith(TempDirectory.class)
public class PartitionedFunctionExecutionWithFiltersBenchmarkTest {
@@ -36,7 +39,8 @@ public class
PartitionedFunctionExecutionWithFiltersBenchmarkTest {
public void benchmarkRunsSuccessfully() throws Exception {
PartitionedFunctionExecutionWithFiltersBenchmark test =
new PartitionedFunctionExecutionWithFiltersBenchmark();
- test.setKeyRange(100);
- test.setFilterKeyRange(5);
+ test.setKeyRange(new LongRange(0, 100));
+ TestRunners.minimalRunner(folder)
+ .runTest(test);
}
}
diff --git
a/geode-benchmarks/src/test/java/org/apache/geode/benchmark/tests/PartitionedGetBenchmarkTest.java
b/geode-benchmarks/src/test/java/org/apache/geode/benchmark/tests/PartitionedGetBenchmarkTest.java
index f228131..01b6d5c 100644
---
a/geode-benchmarks/src/test/java/org/apache/geode/benchmark/tests/PartitionedGetBenchmarkTest.java
+++
b/geode-benchmarks/src/test/java/org/apache/geode/benchmark/tests/PartitionedGetBenchmarkTest.java
@@ -23,6 +23,7 @@ import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.junitpioneer.jupiter.TempDirectory;
+import org.apache.geode.benchmark.LongRange;
import org.apache.geode.perftest.TestRunners;
@ExtendWith(TempDirectory.class)
@@ -39,7 +40,7 @@ public class PartitionedGetBenchmarkTest {
public void benchmarkRunsSuccessfully()
throws Exception {
PartitionedGetBenchmark test = new PartitionedGetBenchmark();
- test.setKeyRange(100);
+ test.setKeyRange(new LongRange(0, 100));
TestRunners.minimalRunner(folder)
.runTest(test);
}
diff --git
a/geode-benchmarks/src/test/java/org/apache/geode/benchmark/tests/PartitionedIndexedQueryBenchmarkTest.java
b/geode-benchmarks/src/test/java/org/apache/geode/benchmark/tests/PartitionedIndexedQueryBenchmarkTest.java
index 552cc2f..75eff61 100644
---
a/geode-benchmarks/src/test/java/org/apache/geode/benchmark/tests/PartitionedIndexedQueryBenchmarkTest.java
+++
b/geode-benchmarks/src/test/java/org/apache/geode/benchmark/tests/PartitionedIndexedQueryBenchmarkTest.java
@@ -22,6 +22,7 @@ import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.junitpioneer.jupiter.TempDirectory;
+import org.apache.geode.benchmark.LongRange;
import org.apache.geode.perftest.TestRunners;
@ExtendWith(TempDirectory.class)
@@ -36,7 +37,7 @@ public class PartitionedIndexedQueryBenchmarkTest {
@Test
public void benchmarkRunsSuccessfully() throws Exception {
PartitionedIndexedQueryBenchmark test = new
PartitionedIndexedQueryBenchmark();
- test.setKeyRange(100);
+ test.setKeyRange(new LongRange(0, 100));
test.setQueryRange(10);
TestRunners.minimalRunner(folder).runTest(test);
}
diff --git
a/geode-benchmarks/src/test/java/org/apache/geode/benchmark/tests/PartitionedNonIndexedQueryBenchmarkTest.java
b/geode-benchmarks/src/test/java/org/apache/geode/benchmark/tests/PartitionedNonIndexedQueryBenchmarkTest.java
index cceab9e..253f8c2 100644
---
a/geode-benchmarks/src/test/java/org/apache/geode/benchmark/tests/PartitionedNonIndexedQueryBenchmarkTest.java
+++
b/geode-benchmarks/src/test/java/org/apache/geode/benchmark/tests/PartitionedNonIndexedQueryBenchmarkTest.java
@@ -22,6 +22,7 @@ import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.junitpioneer.jupiter.TempDirectory;
+import org.apache.geode.benchmark.LongRange;
import org.apache.geode.perftest.TestRunners;
@ExtendWith(TempDirectory.class)
@@ -36,7 +37,7 @@ public class PartitionedNonIndexedQueryBenchmarkTest {
@Test
public void benchmarkRunsSuccessfully() throws Exception {
PartitionedNonIndexedQueryBenchmark test = new
PartitionedNonIndexedQueryBenchmark();
- test.setKeyRange(100);
+ test.setKeyRange(new LongRange(0, 100));
test.setQueryRange(10);
TestRunners.minimalRunner(folder).runTest(test);
}
diff --git
a/geode-benchmarks/src/test/java/org/apache/geode/benchmark/tests/PartitionedPutBenchmarkTest.java
b/geode-benchmarks/src/test/java/org/apache/geode/benchmark/tests/PartitionedPutBenchmarkTest.java
index d724508..194a9bc 100644
---
a/geode-benchmarks/src/test/java/org/apache/geode/benchmark/tests/PartitionedPutBenchmarkTest.java
+++
b/geode-benchmarks/src/test/java/org/apache/geode/benchmark/tests/PartitionedPutBenchmarkTest.java
@@ -27,6 +27,7 @@ import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.junitpioneer.jupiter.TempDirectory;
+import org.apache.geode.benchmark.LongRange;
import org.apache.geode.perftest.TestRunners;
@ExtendWith(TempDirectory.class)
@@ -43,7 +44,7 @@ public class PartitionedPutBenchmarkTest {
public void benchmarkRunsSuccessfully()
throws Exception {
PartitionedPutBenchmark test = new PartitionedPutBenchmark();
- test.setKeyRange(100);
+ test.setKeyRange(new LongRange(0, 100));
TestRunners.minimalRunner(folder)
.runTest(test);
}
diff --git
a/geode-benchmarks/src/test/java/org/apache/geode/benchmark/tests/ReplicatedFunctionExecutionBenchmarkTest.java
b/geode-benchmarks/src/test/java/org/apache/geode/benchmark/tests/ReplicatedFunctionExecutionBenchmarkTest.java
index 56d210f..4f9dc01 100644
---
a/geode-benchmarks/src/test/java/org/apache/geode/benchmark/tests/ReplicatedFunctionExecutionBenchmarkTest.java
+++
b/geode-benchmarks/src/test/java/org/apache/geode/benchmark/tests/ReplicatedFunctionExecutionBenchmarkTest.java
@@ -22,6 +22,7 @@ import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.junitpioneer.jupiter.TempDirectory;
+import org.apache.geode.benchmark.LongRange;
import org.apache.geode.perftest.TestRunners;
@ExtendWith(TempDirectory.class)
@@ -37,8 +38,7 @@ public class ReplicatedFunctionExecutionBenchmarkTest {
@Test
void benchmarkRunsSuccessfully() throws Exception {
ReplicatedFunctionExecutionBenchmark test = new
ReplicatedFunctionExecutionBenchmark();
- test.setKeyRange(100);
- test.setFunctionIDRange(5);
+ test.setKeyRange(new LongRange(0, 100));
TestRunners.minimalRunner(folder).runTest(test);
}
}
diff --git
a/geode-benchmarks/src/test/java/org/apache/geode/benchmark/tests/ReplicatedFunctionExecutionWithArgumentsBenchmarkTest.java
b/geode-benchmarks/src/test/java/org/apache/geode/benchmark/tests/ReplicatedFunctionExecutionWithArgumentsBenchmarkTest.java
index d4df73c..f86bb63 100644
---
a/geode-benchmarks/src/test/java/org/apache/geode/benchmark/tests/ReplicatedFunctionExecutionWithArgumentsBenchmarkTest.java
+++
b/geode-benchmarks/src/test/java/org/apache/geode/benchmark/tests/ReplicatedFunctionExecutionWithArgumentsBenchmarkTest.java
@@ -22,6 +22,7 @@ import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.junitpioneer.jupiter.TempDirectory;
+import org.apache.geode.benchmark.LongRange;
import org.apache.geode.perftest.TestRunners;
@ExtendWith(TempDirectory.class)
@@ -37,8 +38,7 @@ public class
ReplicatedFunctionExecutionWithArgumentsBenchmarkTest {
public void benchmarkRunsSuccessfully() throws Exception {
ReplicatedFunctionExecutionWithArgumentsBenchmark test =
new ReplicatedFunctionExecutionWithArgumentsBenchmark();
- test.setKeyRange(100);
- test.setFunctionIDRange(5);
+ test.setKeyRange(new LongRange(0, 100));
TestRunners.minimalRunner(folder).runTest(test);
}
}
diff --git
a/geode-benchmarks/src/test/java/org/apache/geode/benchmark/tests/ReplicatedFunctionExecutionWithFiltersBenchmarkTest.java
b/geode-benchmarks/src/test/java/org/apache/geode/benchmark/tests/ReplicatedFunctionExecutionWithFiltersBenchmarkTest.java
index 283a849..4a4e47e 100644
---
a/geode-benchmarks/src/test/java/org/apache/geode/benchmark/tests/ReplicatedFunctionExecutionWithFiltersBenchmarkTest.java
+++
b/geode-benchmarks/src/test/java/org/apache/geode/benchmark/tests/ReplicatedFunctionExecutionWithFiltersBenchmarkTest.java
@@ -22,6 +22,7 @@ import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.junitpioneer.jupiter.TempDirectory;
+import org.apache.geode.benchmark.LongRange;
import org.apache.geode.perftest.TestRunners;
@ExtendWith(TempDirectory.class)
@@ -37,8 +38,7 @@ public class
ReplicatedFunctionExecutionWithFiltersBenchmarkTest {
public void benchmarkRunsSuccessfully() throws Exception {
ReplicatedFunctionExecutionWithFiltersBenchmark test =
new ReplicatedFunctionExecutionWithFiltersBenchmark();
- test.setKeyRange(100);
- test.setFilterKeyRange(5);
+ test.setKeyRange(new LongRange(0, 100));
TestRunners.minimalRunner(folder).runTest(test);
}
}
diff --git
a/geode-benchmarks/src/test/java/org/apache/geode/benchmark/tests/ReplicatedGetBenchmarkTest.java
b/geode-benchmarks/src/test/java/org/apache/geode/benchmark/tests/ReplicatedGetBenchmarkTest.java
index 1b35746..f97181d 100644
---
a/geode-benchmarks/src/test/java/org/apache/geode/benchmark/tests/ReplicatedGetBenchmarkTest.java
+++
b/geode-benchmarks/src/test/java/org/apache/geode/benchmark/tests/ReplicatedGetBenchmarkTest.java
@@ -23,6 +23,7 @@ import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.junitpioneer.jupiter.TempDirectory;
+import org.apache.geode.benchmark.LongRange;
import org.apache.geode.perftest.TestRunners;
@ExtendWith(TempDirectory.class)
@@ -39,7 +40,7 @@ public class ReplicatedGetBenchmarkTest {
public void benchmarkRunsSuccessfully()
throws Exception {
ReplicatedGetBenchmark test = new ReplicatedGetBenchmark();
- test.setKeyRange(100);
+ test.setKeyRange(new LongRange(0, 100));
TestRunners.minimalRunner(folder)
.runTest(test);
}
diff --git
a/geode-benchmarks/src/test/java/org/apache/geode/benchmark/tests/ReplicatedIndexedQueryBenchmarkTest.java
b/geode-benchmarks/src/test/java/org/apache/geode/benchmark/tests/ReplicatedIndexedQueryBenchmarkTest.java
index 3b39f24..edcebf7 100644
---
a/geode-benchmarks/src/test/java/org/apache/geode/benchmark/tests/ReplicatedIndexedQueryBenchmarkTest.java
+++
b/geode-benchmarks/src/test/java/org/apache/geode/benchmark/tests/ReplicatedIndexedQueryBenchmarkTest.java
@@ -22,6 +22,7 @@ import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.junitpioneer.jupiter.TempDirectory;
+import org.apache.geode.benchmark.LongRange;
import org.apache.geode.perftest.TestRunners;
@ExtendWith(TempDirectory.class)
@@ -36,7 +37,7 @@ public class ReplicatedIndexedQueryBenchmarkTest {
@Test
public void benchmarkRunsSuccessfully() throws Exception {
ReplicatedIndexedQueryBenchmark test = new
ReplicatedIndexedQueryBenchmark();
- test.setKeyRange(100);
+ test.setKeyRange(new LongRange(0, 100));
test.setQueryRange(10);
TestRunners.minimalRunner(folder).runTest(test);
}
diff --git
a/geode-benchmarks/src/test/java/org/apache/geode/benchmark/tests/ReplicatedNonIndexedQueryBenchmarkTest.java
b/geode-benchmarks/src/test/java/org/apache/geode/benchmark/tests/ReplicatedNonIndexedQueryBenchmarkTest.java
index 416bdb3..2f5ecfe 100644
---
a/geode-benchmarks/src/test/java/org/apache/geode/benchmark/tests/ReplicatedNonIndexedQueryBenchmarkTest.java
+++
b/geode-benchmarks/src/test/java/org/apache/geode/benchmark/tests/ReplicatedNonIndexedQueryBenchmarkTest.java
@@ -22,6 +22,7 @@ import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.junitpioneer.jupiter.TempDirectory;
+import org.apache.geode.benchmark.LongRange;
import org.apache.geode.perftest.TestRunners;
@ExtendWith(TempDirectory.class)
@@ -36,7 +37,7 @@ public class ReplicatedNonIndexedQueryBenchmarkTest {
@Test
public void benchmarkRunsSuccessfully() throws Exception {
ReplicatedNonIndexedQueryBenchmark test = new
ReplicatedNonIndexedQueryBenchmark();
- test.setKeyRange(100);
+ test.setKeyRange(new LongRange(0, 100));
test.setQueryRange(10);
TestRunners.minimalRunner(folder).runTest(test);
}
diff --git
a/geode-benchmarks/src/test/java/org/apache/geode/benchmark/tests/ReplicatedPutBenchmarkTest.java
b/geode-benchmarks/src/test/java/org/apache/geode/benchmark/tests/ReplicatedPutBenchmarkTest.java
index 0421d53..fee0bd1 100644
---
a/geode-benchmarks/src/test/java/org/apache/geode/benchmark/tests/ReplicatedPutBenchmarkTest.java
+++
b/geode-benchmarks/src/test/java/org/apache/geode/benchmark/tests/ReplicatedPutBenchmarkTest.java
@@ -25,6 +25,7 @@ import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.junitpioneer.jupiter.TempDirectory;
+import org.apache.geode.benchmark.LongRange;
import org.apache.geode.perftest.TestRunners;
@ExtendWith(TempDirectory.class)
@@ -41,7 +42,7 @@ public class ReplicatedPutBenchmarkTest {
public void benchmarkRunsSuccessfully()
throws Exception {
ReplicatedPutBenchmark test = new ReplicatedPutBenchmark();
- test.setKeyRange(100);
+ test.setKeyRange(new LongRange(0, 100));
TestRunners.minimalRunner(folder)
.runTest(test);
}
diff --git a/harness/src/main/java/org/apache/geode/benchmark/LongRange.java
b/harness/src/main/java/org/apache/geode/benchmark/LongRange.java
new file mode 100644
index 0000000..bf48276
--- /dev/null
+++ b/harness/src/main/java/org/apache/geode/benchmark/LongRange.java
@@ -0,0 +1,148 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.geode.benchmark;
+
+import static java.lang.Long.max;
+import static java.lang.Long.min;
+
+import java.io.Serializable;
+import java.util.Objects;
+import java.util.concurrent.ThreadLocalRandom;
+import java.util.function.LongConsumer;
+
+/**
+ * Describes a range [min, max) in long values between min inclusive and max
exclusive.
+ */
+public class LongRange implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ private final long min;
+ private final long max;
+
+ public LongRange(long min, long max) {
+ try {
+ if (Math.subtractExact(max, min) <= 0) {
+ throw new IllegalArgumentException();
+ }
+ } catch (ArithmeticException e) {
+ throw new IllegalArgumentException(e);
+ }
+
+ this.min = min;
+ this.max = max;
+ }
+
+ public long getMin() {
+ return min;
+ }
+
+ public long getMax() {
+ return max;
+ }
+
+ public long size() {
+ return max - min;
+ }
+
+ /**
+ * Slices the range in relatively equal ranges in each slice with the
remainder distributed across
+ * the slices.
+ *
+ * @param count of slices
+ * @return array of {@code count} slices
+ */
+ public LongRange[] slice(final int count) {
+ final LongRange[] slices = new LongRange[count];
+
+ for (int i = 0; i < slices.length; i++) {
+ slices[i] = sliceFor(count, i);
+ }
+
+ return slices;
+ }
+
+ /**
+ * Get a single slice for {@code count} slices at {@code index}
+ *
+ * @param count of slices
+ * @param index of slice
+ * @return Single slice at index.
+ * @throws IndexOutOfBoundsException if index is less than 0 or greater than
slices.
+ */
+ public LongRange sliceFor(final int count, final int index) throws
IndexOutOfBoundsException {
+ if (index < 0 || index >= count) {
+ throw new IndexOutOfBoundsException();
+ }
+
+ final long size = max - min;
+ final long increment = size / count;
+ final long remainder = size % count;
+ final long sliceMin =
+ min + ((increment + 1) * min(remainder, index)) + (increment * max(0,
index - remainder));
+ final long sliceMax = sliceMin + increment + (index < remainder ? 1 : 0);
+ return new LongRange(sliceMin, sliceMax);
+ }
+
+ public LongRange[] slicesOfSize(final long sliceSize) {
+ final int count = (int) Math.ceil((double) size() / sliceSize);
+ return slice(count);
+ }
+
+ /**
+ * Iterates over each value in the range.
+ *
+ * @param consumer to invoke with current value.
+ */
+ public void forEach(LongConsumer consumer) {
+ for (long i = min; i < max; i++) {
+ consumer.accept(i);
+ }
+ }
+
+ /**
+ * Randomly select a value withing range.
+ *
+ * @return a random value within range.
+ */
+ public long random() {
+ return ThreadLocalRandom.current().nextLong(min, max);
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+ final LongRange longRange = (LongRange) o;
+ return min == longRange.min &&
+ max == longRange.max;
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(min, max);
+ }
+
+ @Override
+ public String toString() {
+ return "LongRange{" + "min=" + min + ", max=" + max + '}';
+ }
+}
diff --git
a/harness/src/test/java/org/apache/geode/benchmark/LongRangeTest.java
b/harness/src/test/java/org/apache/geode/benchmark/LongRangeTest.java
new file mode 100644
index 0000000..96b780b
--- /dev/null
+++ b/harness/src/test/java/org/apache/geode/benchmark/LongRangeTest.java
@@ -0,0 +1,114 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.geode.benchmark;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+
+import org.junit.jupiter.api.Test;
+
+class LongRangeTest {
+
+ @Test
+ public void constructValidRanges() {
+ new LongRange(0, 1);
+ new LongRange(0, Long.MAX_VALUE);
+ new LongRange(-1, 0);
+ new LongRange(Long.MIN_VALUE, -1);
+ }
+
+ @Test
+ public void constructInvalidRangesThrowsException() {
+ assertThatThrownBy(() -> new LongRange(0,
0)).isInstanceOf(IllegalArgumentException.class);
+ assertThatThrownBy(() -> new LongRange(1,
0)).isInstanceOf(IllegalArgumentException.class);
+ assertThatThrownBy(() -> new LongRange(Long.MIN_VALUE, Long.MAX_VALUE))
+ .isInstanceOf(IllegalArgumentException.class);
+ assertThatThrownBy(() -> new LongRange(-1, Long.MAX_VALUE))
+ .isInstanceOf(IllegalArgumentException.class);
+ assertThatThrownBy(() -> new LongRange(Long.MIN_VALUE, 0))
+ .isInstanceOf(IllegalArgumentException.class);
+ }
+
+ @Test
+ public void getMin() {
+ assertThat(new LongRange(1, 2).getMin()).isEqualTo(1);
+ }
+
+ @Test
+ public void getMax() {
+ assertThat(new LongRange(1, 2).getMax()).isEqualTo(2);
+ }
+
+ @Test
+ public void size() {
+ assertThat(new LongRange(1, 2).size()).isEqualTo(1);
+ assertThat(new LongRange(0,
Long.MAX_VALUE).size()).isEqualTo(Long.MAX_VALUE);
+ }
+
+ @Test
+ void sliceWhole() {
+ final LongRange[] slices = new LongRange(0, 50).slice(5);
+ assertThat(slices).hasSize(5);
+ assertThat(slices).containsExactly(new LongRange(0, 10), new LongRange(10,
20),
+ new LongRange(20, 30), new LongRange(30, 40), new LongRange(40, 50));
+ }
+
+ @Test
+ void sliceWithRemainder() {
+ final LongRange[] slices = new LongRange(0, 53).slice(5);
+ assertThat(slices).hasSize(5);
+ assertThat(slices).containsExactly(new LongRange(0, 11), new LongRange(11,
22),
+ new LongRange(22, 33), new LongRange(33, 43), new LongRange(43, 53));
+ }
+
+ @Test
+ void sliceFor() {
+ assertThat(new LongRange(0, 50).sliceFor(5, 2)).isEqualTo(new
LongRange(20, 30));
+ }
+
+ @Test
+ void sliceForWithRemainder() {
+ assertThat(new LongRange(0, 53).sliceFor(5, 2)).isEqualTo(new
LongRange(22, 33));
+ assertThat(new LongRange(10000, Long.MAX_VALUE).sliceFor(2, 0))
+ .isEqualTo(new LongRange(10000, 4611686018427392904L));
+ }
+
+ @Test
+ void sliceForThrowsIndexOutOfBoundsException() {
+ final LongRange range = new LongRange(0, 50);
+ assertThatThrownBy(() -> range.sliceFor(5,
-1)).isInstanceOf(IndexOutOfBoundsException.class);
+ assertThatThrownBy(() -> range.sliceFor(5,
10)).isInstanceOf(IndexOutOfBoundsException.class);
+ }
+
+ @Test
+ void slicesOfSize() {
+ final LongRange[] slices = new LongRange(0, 50).slicesOfSize(10);
+ assertThat(slices).hasSize(5);
+ assertThat(slices).containsExactly(new LongRange(0, 10), new LongRange(10,
20),
+ new LongRange(20, 30), new LongRange(30, 40), new LongRange(40, 50));
+ }
+
+ @Test
+ void slicesOfSizeWithRemainer() {
+ final LongRange[] slices = new LongRange(0, 53).slicesOfSize(10);
+ assertThat(slices).hasSize(6);
+ assertThat(slices).containsExactly(new LongRange(0, 9), new LongRange(9,
18),
+ new LongRange(18, 27), new LongRange(27, 36), new LongRange(36, 45),
new LongRange(45, 53));
+ }
+
+}