Skip to content

Commit

Permalink
Support user-defined protocol for benchmarks.
Browse files Browse the repository at this point in the history
  • Loading branch information
kuujo committed Dec 13, 2018
1 parent bc405c1 commit 94f3764
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 13 deletions.
11 changes: 6 additions & 5 deletions bench/src/main/java/io/atomix/bench/BenchmarkConfig.java
Expand Up @@ -16,6 +16,7 @@
package io.atomix.bench; package io.atomix.bench;


import io.atomix.primitive.config.PrimitiveConfig; import io.atomix.primitive.config.PrimitiveConfig;
import io.atomix.primitive.protocol.PrimitiveProtocolConfig;


import java.util.UUID; import java.util.UUID;


Expand All @@ -33,7 +34,7 @@ public class BenchmarkConfig {
private static final boolean DEFAULT_DETERMINISTIC = true; private static final boolean DEFAULT_DETERMINISTIC = true;


private String benchId = UUID.randomUUID().toString(); private String benchId = UUID.randomUUID().toString();
private PrimitiveConfig primitive; private PrimitiveProtocolConfig protocol;
private int operations = DEFAULT_OPERATIONS; private int operations = DEFAULT_OPERATIONS;
private int writePercentage = DEFAULT_WRITE_PERCENTAGE; private int writePercentage = DEFAULT_WRITE_PERCENTAGE;
private int numKeys = DEFAULT_NUM_KEYS; private int numKeys = DEFAULT_NUM_KEYS;
Expand All @@ -52,12 +53,12 @@ public BenchmarkConfig setBenchId(String benchId) {
return this; return this;
} }


public PrimitiveConfig getPrimitive() { public PrimitiveProtocolConfig getProtocol() {
return primitive; return protocol;
} }


public BenchmarkConfig setPrimitive(PrimitiveConfig primitive) { public BenchmarkConfig setProtocol(PrimitiveProtocolConfig protocol) {
this.primitive = primitive; this.protocol = protocol;
return this; return this;
} }


Expand Down
27 changes: 19 additions & 8 deletions bench/src/main/java/io/atomix/bench/BenchmarkRunner.java
Expand Up @@ -17,6 +17,8 @@


import io.atomix.core.Atomix; import io.atomix.core.Atomix;
import io.atomix.core.map.AtomicMap; import io.atomix.core.map.AtomicMap;
import io.atomix.primitive.protocol.PrimitiveProtocol;
import io.atomix.primitive.protocol.ProxyProtocol;
import io.atomix.utils.serializer.Namespaces; import io.atomix.utils.serializer.Namespaces;
import io.atomix.utils.serializer.Serializer; import io.atomix.utils.serializer.Serializer;
import org.slf4j.Logger; import org.slf4j.Logger;
Expand Down Expand Up @@ -162,9 +164,22 @@ public void run() {
teardown(); teardown();
} }


void read(String key) {
map.get(key);
readCounter.incrementAndGet();
}

void write(String key, String value) {
map.put(key, value);
writeCounter.incrementAndGet();
}

@SuppressWarnings("unchecked")
void setup() { void setup() {
ProxyProtocol protocol = (ProxyProtocol) atomix.getRegistry().getType(PrimitiveProtocol.Type.class, "foo").newProtocol(config.getProtocol());
map = atomix.<String, String>atomicMapBuilder("bench") map = atomix.<String, String>atomicMapBuilder("bench")
.withSerializer(Serializer.using(Namespaces.BASIC)) .withSerializer(Serializer.using(Namespaces.BASIC))
.withProtocol(protocol)
.build(); .build();
if (config.isIncludeEvents()) { if (config.isIncludeEvents()) {
map.addListener(event -> { map.addListener(event -> {
Expand All @@ -184,11 +199,9 @@ private class NonDeterministicSubmitter extends Submitter {
void submit() { void submit() {
String key = keys[random.nextInt(keys.length)]; String key = keys[random.nextInt(keys.length)];
if (random.nextInt(100) < config.getWritePercentage()) { if (random.nextInt(100) < config.getWritePercentage()) {
map.put(key, values[random.nextInt(values.length)]); write(key, values[random.nextInt(values.length)]);
writeCounter.incrementAndGet();
} else { } else {
map.get(key); read(key);
readCounter.incrementAndGet();
} }
} }
} }
Expand All @@ -199,11 +212,9 @@ private class DeterministicSubmitter extends Submitter {
@Override @Override
void submit() { void submit() {
if (random.nextInt(100) < config.getWritePercentage()) { if (random.nextInt(100) < config.getWritePercentage()) {
map.put(keys[index++ % keys.length], values[random.nextInt(values.length)]); write(keys[index++ % keys.length], values[random.nextInt(values.length)]);
writeCounter.incrementAndGet();
} else { } else {
map.get(keys[random.nextInt(keys.length)]); read(keys[random.nextInt(keys.length)]);
readCounter.incrementAndGet();
} }
} }
} }
Expand Down

0 comments on commit 94f3764

Please sign in to comment.