blob: 69eed7f73391d45cef3308184c24e621b31bdaaf [file] [log] [blame]
Yoshi Muroi815c7f92014-01-30 18:06:16 -08001package com.tinkerpop.blueprints.impls.ramcloud;
2
3import edu.stanford.ramcloud.JRamCloud;
4import org.slf4j.Logger;
5import org.slf4j.LoggerFactory;
6
7public class RamCloudWrite {
8 public enum PerfMonEnum {
9 WRITE,
10 INDEXWRITE
11 }
12 private final static Logger log = LoggerFactory.getLogger(RamCloudGraph.class);
13
14 public static boolean writeWithRules(long tableId, byte[] rcKey, byte[] rcValue, long expectedVersion, RamCloudGraph graph, PerfMonEnum perfMonKind) {
15 JRamCloud.RejectRules rules = graph.getRcClient().new RejectRules();
16
17 if (expectedVersion == 0) {
18 rules.setExists();
19 } else {
20 rules.setNeVersion(expectedVersion);
21 }
22
23 PerfMon pm = PerfMon.getInstance();
24 try {
25 JRamCloud rcClient = graph.getRcClient();
26 if (perfMonKind.equals(PerfMonEnum.WRITE)) {
27 pm.write_start("RamCloudIndex writeWithRules()");
28 } else if (perfMonKind.equals(PerfMonEnum.INDEXWRITE)) {
29 pm.indexwrite_start("RamCloudIndex writeWithRules()");
30 }
31 rcClient.writeRule(tableId, rcKey, rcValue, rules);
Yoshi Muroi5804ce92014-02-08 03:58:04 -080032 if (perfMonKind.equals(PerfMonEnum.WRITE)) {
33 pm.write_end("RamCloudIndex writeWithRules()");
34 } else if (perfMonKind.equals(PerfMonEnum.INDEXWRITE)) {
35 pm.indexwrite_end("RamCloudIndex writeWithRules()");
36 }
Yoshi Muroi815c7f92014-01-30 18:06:16 -080037 } catch (Exception e) {
38 if (perfMonKind.equals(PerfMonEnum.WRITE)) {
39 pm.write_end("RamCloudIndex writeWithRules()");
40 pm.write_condfail("RamCloudIndex writeWithRules()");
41 log.debug("Cond. Write property: {} failed {} expected version: {}", RamCloudVertex.rcKeyToId(rcKey), e, expectedVersion);
42 } else if (perfMonKind.equals(PerfMonEnum.INDEXWRITE)) {
43 pm.indexwrite_end("RamCloudIndex writeWithRules()");
44 pm.indexwrite_condfail("RamCloudIndex writeWithRules()");
45 log.debug("Cond. Write index property: {} failed {} expected version: {}", RamCloudIndex.rcKeyToIndexName(rcKey), e, expectedVersion);
46 }
47 return false;
48 }
49 return true;
50 }
51}