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