diff --git a/aerospike/README.md b/aerospike/README.md index c5bb13ef82..cdf29f1e56 100644 --- a/aerospike/README.md +++ b/aerospike/README.md @@ -56,3 +56,85 @@ Run the workload test: ./bin/ycsb run aerospike -s -P workloads/workloada >outputRun.txt +This is patched version and it contains next things. + +## Changes + +### New arguments + * `as.tlsEnable` - TLS (default: `false`) + * `as.commitLevel` - AP mode commit level: `COMMIT_MASTER`, or `COMMIT_ALL` (default: `COMMIT_MASTER`) + * `as.consistencyLevel` - AP mode commit level: `CONSISTENCY_ONE`, or `CONSISTENCY_ALL` (default: `CONSISTENCY_ONE`) + * `as.linearizeRead` - SC mode session consistency (default: false) + +### Changes + * `timeout` now is socket timeout + * client bumped version 4 + +### Sample run scripts + +```SH +#!/bin/bash +YCSB="/root/ycsb-aerospike-binding-0.14.0-SNAPSHOT" +#YCSB="/opt/ycsb" +REPORTS="/opt/app/_reports" +YCSB_BIN="${YCSB}/bin/ycsb" + +WORKLOAD="$(pwd)/workloads/workload_1" +HOST="host:cluster:3000" + +NAMESPACE=ycsb-ap +#NAMESPACE=ycsb-mem + +THREADS=48 + +OUTPUT_NAME=`date '+%Y-%m-%d_%H-%M'_run_`${NAMESPACE} +mkdir -p "${REPORTS}/${OUTPUT_NAME}" +OUTPUT="${REPORTS}/${OUTPUT_NAME}" +cd "$YCSB" + +JVM_ARGS='' #-Djavax.net.ssl.trustStore=/root/aerospike/keystore.jks' #'-Dcom.aerospike.client.policy.linerizeRead=true' + +for (( i=0; i < 4; i++ )) +do + nohup ${YCSB_BIN} run aerospike -s -P ${WORKLOAD} \ + -jvm-args=${JVM_ARGS} \ + -p as.host=${HOST} -p as.namespace=${NAMESPACE} -p as.timeout=2000 \ + -p maxexecutiontime=1200 -p as.linearizeRead=false \ + -p as.tlsEnable=false \ + -p as.consistencyLevel=CONSISTENCY_ALL -p as.commitLevel=COMMIT_ALL \ + -p measurementtype=raw -p measurement.raw.output_file=${OUTPUT}/run$i.log \ + -threads ${THREADS} -target 20000 > ${OUTPUT}/transactions$i.dat & +done +``` + +```SH +#!/bin/bash +YCSB="/root/ycsb-aerospike-binding-0.14.0-SNAPSHOT" +#YCSB="/opt/ycsb" +REPORTS="/opt/app/_reports" +YCSB_BIN="${YCSB}/bin/ycsb" + +WORKLOAD="$(pwd)/workloads/workload_1" +HOST=host + +NAMESPACE=ycsb-sc +#NAMESPACE=ycsb-mem + +THREADS=24 + +OUTPUT_NAME=`date '+%Y-%m-%d_%H-%M'_load_`${NAMESPACE} +mkdir -p "${REPORTS}/${OUTPUT_NAME}" +OUTPUT="${REPORTS}/${OUTPUT_NAME}" +cd "$YCSB" + +# -target - by default maximum +${YCSB_BIN} load aerospike -s -P ${WORKLOAD} \ + -p as.host=${HOST} -p as.namespace=${NAMESPACE}\ + -p as.insertMaxRetries=2 -p as.timeout=12000 \ + -p as.linearizeRead=false \ + -jvm-args='-Xms100G -Xmx100G -XX:MaxGCPauseMillis=100 -XX:+UnlockExperimentalVMOptions -XX:+UseG1GC -XX:G1NewSizePercent=1 -XX:+PrintGCDetails -XX:+PrintGCApplicationStoppedTime -XX:+PrintGCApplicationConcurrentTime -XX:+PrintGCDateStamps -Xloggc:/var/log/ycsb-gc.log' \ + -threads ${THREADS} > ${OUTPUT}/load.dat + + +# -p measurementtype=raw -p measurement.raw.output_file=${OUTPUT}/load.log \ +``` diff --git a/aerospike/src/main/java/com/yahoo/ycsb/db/AerospikeClient.java b/aerospike/src/main/java/com/yahoo/ycsb/db/AerospikeClient.java index bd3b6cf02a..fc71c3401f 100644 --- a/aerospike/src/main/java/com/yahoo/ycsb/db/AerospikeClient.java +++ b/aerospike/src/main/java/com/yahoo/ycsb/db/AerospikeClient.java @@ -19,11 +19,15 @@ import com.aerospike.client.AerospikeException; import com.aerospike.client.Bin; +import com.aerospike.client.Host; import com.aerospike.client.Key; import com.aerospike.client.Record; import com.aerospike.client.policy.ClientPolicy; +import com.aerospike.client.policy.CommitLevel; +import com.aerospike.client.policy.ConsistencyLevel; import com.aerospike.client.policy.Policy; import com.aerospike.client.policy.RecordExistsAction; +import com.aerospike.client.policy.TlsPolicy; import com.aerospike.client.policy.WritePolicy; import com.yahoo.ycsb.ByteArrayByteIterator; import com.yahoo.ycsb.ByteIterator; @@ -69,22 +73,57 @@ public void init() throws DBException { int port = Integer.parseInt(props.getProperty("as.port", DEFAULT_PORT)); int timeout = Integer.parseInt(props.getProperty("as.timeout", DEFAULT_TIMEOUT)); + boolean linearizeRead = props.getProperty("as.linearizeRead", "false") + .equals("true"); + String consistencyLevel = props.getProperty("as.consistencyLevel", + "CONSISTENCY_ONE"); // or _ALL + String commitLevel = props.getProperty("as.commitLevel", + "COMMIT_MASTER"); // or _ALL + int maxRetries = Integer.parseInt(props.getProperty("as.insertMaxRetries", "0")); + boolean tlsEnable = props.getProperty("as.tlsEnable", "false") + .equals("true"); + + readPolicy.setTimeout(timeout); + insertPolicy.setTimeout(timeout); + updatePolicy.setTimeout(timeout); + deletePolicy.setTimeout(timeout); + + insertPolicy.maxRetries = maxRetries; + readPolicy.linearizeRead = linearizeRead; + updatePolicy.linearizeRead = linearizeRead; - readPolicy.timeout = timeout; - insertPolicy.timeout = timeout; - updatePolicy.timeout = timeout; - deletePolicy.timeout = timeout; + try { + insertPolicy.commitLevel = CommitLevel.valueOf(commitLevel); + updatePolicy.commitLevel = CommitLevel.valueOf(commitLevel); + deletePolicy.commitLevel = CommitLevel.valueOf(commitLevel); + } catch(IllegalArgumentException e) { + throw e; + } + + try { + insertPolicy.consistencyLevel = ConsistencyLevel.valueOf(consistencyLevel); + updatePolicy.consistencyLevel = ConsistencyLevel.valueOf(consistencyLevel); + deletePolicy.consistencyLevel = ConsistencyLevel.valueOf(consistencyLevel); + } catch(IllegalArgumentException e) { + throw e; + } ClientPolicy clientPolicy = new ClientPolicy(); + + if (tlsEnable) { + clientPolicy.tlsPolicy = new TlsPolicy(); + } if (user != null && password != null) { clientPolicy.user = user; clientPolicy.password = password; } + Host[] hosts = Host.parseHosts(host, port); + try { client = - new com.aerospike.client.AerospikeClient(clientPolicy, host, port); + new com.aerospike.client.AerospikeClient(clientPolicy, hosts); } catch (AerospikeException e) { throw new DBException(String.format("Error while creating Aerospike " + "client for %s:%d.", host, port), e); diff --git a/pom.xml b/pom.xml index 6e7629df83..97bf233559 100644 --- a/pom.xml +++ b/pom.xml @@ -97,7 +97,7 @@ LICENSE file. 2.3.1 1.6.5 2.0.5 - 3.1.2 + 4.1.4 5.5.3 6.4.1 2.7.3