Fixes to RAMCloud Java bindings
- Fix FindBugs warnings
- Change RejectRule to be a static class
- Change nested Exception classes to be static classes
- Changed RejectRules methods to clarify its roll, and allow chaining
- Represent RejectRules flags as bits in int to decrease number of JNI crossing
- multiWrite value size parameter needs to be int to match C++ decl.
- Add conditional read, write, remove
- Deprecate writeRule method
- Fixed RejectRules related Exception class inheritance
- Declare throws on conditional operations
Change-Id: I07c3a2111d06ca051a29415224d59b9bfa7a4ddb
diff --git a/src/main/java/com/tinkerpop/blueprints/impls/ramcloud/RamCloudGraph.java b/src/main/java/com/tinkerpop/blueprints/impls/ramcloud/RamCloudGraph.java
index ad519c8..5b5cea0 100644
--- a/src/main/java/com/tinkerpop/blueprints/impls/ramcloud/RamCloudGraph.java
+++ b/src/main/java/com/tinkerpop/blueprints/impls/ramcloud/RamCloudGraph.java
@@ -25,7 +25,6 @@
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
@@ -57,6 +56,7 @@
import edu.stanford.ramcloud.JRamCloud;
import edu.stanford.ramcloud.JRamCloud.MultiWriteObject;
+import edu.stanford.ramcloud.JRamCloud.RejectRules;
public class RamCloudGraph implements IndexableGraph, KeyIndexableGraph, TransactionalGraph, Serializable {
private final static Logger log = LoggerFactory.getLogger(RamCloudGraph.class);
@@ -247,9 +247,9 @@
}
vertices.add(v);
}
-
+
MultiWriteObject mwo = new MultiWriteObject(vertices.size()*2);
-
+
for (int i=0; i < vertices.size(); i++) {
RamCloudVertex v = vertices.get(i);
mwo.setObject(i*2, vertTableId, v.rcKey, ByteBuffer.allocate(0).array(), null);
@@ -320,8 +320,8 @@
log.error("Got an exception while serializing element's property map", e);
return;
}
- JRamCloud.RejectRules rules = rcClient.new RejectRules();
- rules.setNeVersion(instanceEntry.version);
+ JRamCloud.RejectRules rules = new RejectRules();
+ rules.rejectIfNeVersion(instanceEntry.version);
try {
rcClient.writeRule(instanceTableId, "nextInstanceId".getBytes(), rcValue, rules);
instanceId = curInstanceId;
diff --git a/src/main/java/com/tinkerpop/blueprints/impls/ramcloud/RamCloudIndex.java b/src/main/java/com/tinkerpop/blueprints/impls/ramcloud/RamCloudIndex.java
index 634df25..e62b2d4 100644
--- a/src/main/java/com/tinkerpop/blueprints/impls/ramcloud/RamCloudIndex.java
+++ b/src/main/java/com/tinkerpop/blueprints/impls/ramcloud/RamCloudIndex.java
@@ -38,6 +38,7 @@
import com.tinkerpop.blueprints.impls.ramcloud.RamCloudGraphProtos.IndexBlob.Builder;
import edu.stanford.ramcloud.JRamCloud;
+import edu.stanford.ramcloud.JRamCloud.RejectRules;
// FIXME Index instance should be representing an Index table, not a IndexTable K-V pair
public class RamCloudIndex<T extends Element> implements Index<T>, Serializable {
@@ -91,8 +92,8 @@
PerfMon pm = PerfMon.getInstance();
try {
JRamCloud rcClient = graph.getRcClient();
- JRamCloud.RejectRules rules = rcClient.new RejectRules();
- rules.setExists();
+ JRamCloud.RejectRules rules = new RejectRules();
+ rules.rejectIfExists();
pm.indexwrite_start("RamCloudIndex create()");
rcClient.writeRule(tableId, rcKey, ByteBuffer.allocate(0).array(), rules);
diff --git a/src/main/java/com/tinkerpop/blueprints/impls/ramcloud/RamCloudVertex.java b/src/main/java/com/tinkerpop/blueprints/impls/ramcloud/RamCloudVertex.java
index 03c4ba3..a6a5320 100644
--- a/src/main/java/com/tinkerpop/blueprints/impls/ramcloud/RamCloudVertex.java
+++ b/src/main/java/com/tinkerpop/blueprints/impls/ramcloud/RamCloudVertex.java
@@ -256,11 +256,11 @@
}
EdgeListProtoBuf edgeList = buildProtoBufFromEdgeSet(edges);
- JRamCloud.RejectRules rules = rcClient.new RejectRules();
+ JRamCloud.RejectRules rules = new RejectRules();
if ( expected_version == 0L ) {
- rules.setExists();
+ rules.rejectIfExists();
} else {
- rules.setNeVersion(expected_version);
+ rules.rejectIfNeVersion(expected_version);
}
pm.write_start("RAMCloudVertex updateEdgeAdjList()");
long updated_version = rcClient.writeRule(graph.vertTableId, rcKey, edgeList.toByteArray(), rules);
@@ -490,7 +490,7 @@
// TODO: Existence check costs extra (presently 2 reads), could use option to turn on/off
if (!exists()) {
PerfMon pm = PerfMon.getInstance();
- JRamCloud vertTable = graph.getRcClient();
+ JRamCloud vertTable = graph.getRcClient();
MultiWriteObject mwo = new MultiWriteObject(2);
mwo.setObject(1, graph.vertTableId, rcKey, ByteBuffer.allocate(0).array(), null);
mwo.setObject(2, graph.vertPropTableId, rcKey, ByteBuffer.allocate(0).array(), null);
diff --git a/src/main/java/com/tinkerpop/blueprints/impls/ramcloud/RamCloudWrite.java b/src/main/java/com/tinkerpop/blueprints/impls/ramcloud/RamCloudWrite.java
index 69eed7f..030d088 100644
--- a/src/main/java/com/tinkerpop/blueprints/impls/ramcloud/RamCloudWrite.java
+++ b/src/main/java/com/tinkerpop/blueprints/impls/ramcloud/RamCloudWrite.java
@@ -1,6 +1,8 @@
package com.tinkerpop.blueprints.impls.ramcloud;
import edu.stanford.ramcloud.JRamCloud;
+import edu.stanford.ramcloud.JRamCloud.RejectRules;
+
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -10,14 +12,14 @@
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();
+ JRamCloud.RejectRules rules = new RejectRules();
if (expectedVersion == 0) {
- rules.setExists();
+ rules.rejectIfExists();
} else {
- rules.setNeVersion(expectedVersion);
+ rules.rejectIfNeVersion(expectedVersion);
}
PerfMon pm = PerfMon.getInstance();