Implementation of conditional write for vertex property table (ONOS-937)
Change-Id: I6ecd81d68ed6d780fc330f1d753b377e0f899f6f
diff --git a/src/main/java/com/tinkerpop/blueprints/impls/ramcloud/RamCloudWrite.java b/src/main/java/com/tinkerpop/blueprints/impls/ramcloud/RamCloudWrite.java
new file mode 100644
index 0000000..6b3fba2
--- /dev/null
+++ b/src/main/java/com/tinkerpop/blueprints/impls/ramcloud/RamCloudWrite.java
@@ -0,0 +1,47 @@
+package com.tinkerpop.blueprints.impls.ramcloud;
+
+import edu.stanford.ramcloud.JRamCloud;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class RamCloudWrite {
+ public enum PerfMonEnum {
+ WRITE,
+ INDEXWRITE
+ }
+ private final static Logger log = LoggerFactory.getLogger(RamCloudGraph.class);
+
+ public static boolean writeWithRules(long tableId, byte[] rcKey, byte[] rcValue, long expectedVersion, RamCloudGraph graph, PerfMonEnum perfMonKind) {
+ JRamCloud.RejectRules rules = graph.getRcClient().new RejectRules();
+
+ if (expectedVersion == 0) {
+ rules.setExists();
+ } else {
+ rules.setNeVersion(expectedVersion);
+ }
+
+ PerfMon pm = PerfMon.getInstance();
+ try {
+ JRamCloud rcClient = graph.getRcClient();
+ if (perfMonKind.equals(PerfMonEnum.WRITE)) {
+ pm.write_start("RamCloudIndex writeWithRules()");
+ } else if (perfMonKind.equals(PerfMonEnum.INDEXWRITE)) {
+ pm.indexwrite_start("RamCloudIndex writeWithRules()");
+ }
+ rcClient.writeRule(tableId, rcKey, rcValue, rules);
+ pm.indexwrite_end("RamCloudIndex writeWithRules()");
+ } catch (Exception e) {
+ if (perfMonKind.equals(PerfMonEnum.WRITE)) {
+ pm.write_end("RamCloudIndex writeWithRules()");
+ pm.write_condfail("RamCloudIndex writeWithRules()");
+ log.debug("Cond. Write property: {} failed {} expected version: {}", RamCloudVertex.rcKeyToId(rcKey), e, expectedVersion);
+ } else if (perfMonKind.equals(PerfMonEnum.INDEXWRITE)) {
+ pm.indexwrite_end("RamCloudIndex writeWithRules()");
+ pm.indexwrite_condfail("RamCloudIndex writeWithRules()");
+ log.debug("Cond. Write index property: {} failed {} expected version: {}", RamCloudIndex.rcKeyToIndexName(rcKey), e, expectedVersion);
+ }
+ return false;
+ }
+ return true;
+ }
+}