blob: 030d088a4893a192b3a1fbdc5af5ba975c8a77f1 [file] [log] [blame]
Yoshi Muroi815c7f92014-01-30 18:06:16 -08001package com.tinkerpop.blueprints.impls.ramcloud;
2
3import edu.stanford.ramcloud.JRamCloud;
Yuta HIGUCHI1d6a22a2014-02-21 19:17:42 -08004import edu.stanford.ramcloud.JRamCloud.RejectRules;
5
Yoshi Muroi815c7f92014-01-30 18:06:16 -08006import org.slf4j.Logger;
7import org.slf4j.LoggerFactory;
8
9public class RamCloudWrite {
10 public enum PerfMonEnum {
11 WRITE,
12 INDEXWRITE
13 }
14 private final static Logger log = LoggerFactory.getLogger(RamCloudGraph.class);
Yuta HIGUCHI1d6a22a2014-02-21 19:17:42 -080015
Yoshi Muroi815c7f92014-01-30 18:06:16 -080016 public static boolean writeWithRules(long tableId, byte[] rcKey, byte[] rcValue, long expectedVersion, RamCloudGraph graph, PerfMonEnum perfMonKind) {
Yuta HIGUCHI1d6a22a2014-02-21 19:17:42 -080017 JRamCloud.RejectRules rules = new RejectRules();
Yoshi Muroi815c7f92014-01-30 18:06:16 -080018
19 if (expectedVersion == 0) {
Yuta HIGUCHI1d6a22a2014-02-21 19:17:42 -080020 rules.rejectIfExists();
Yoshi Muroi815c7f92014-01-30 18:06:16 -080021 } else {
Yuta HIGUCHI1d6a22a2014-02-21 19:17:42 -080022 rules.rejectIfNeVersion(expectedVersion);
Yoshi Muroi815c7f92014-01-30 18:06:16 -080023 }
24
25 PerfMon pm = PerfMon.getInstance();
26 try {
27 JRamCloud rcClient = graph.getRcClient();
28 if (perfMonKind.equals(PerfMonEnum.WRITE)) {
29 pm.write_start("RamCloudIndex writeWithRules()");
30 } else if (perfMonKind.equals(PerfMonEnum.INDEXWRITE)) {
31 pm.indexwrite_start("RamCloudIndex writeWithRules()");
32 }
33 rcClient.writeRule(tableId, rcKey, rcValue, rules);
Yoshi Muroi5804ce92014-02-08 03:58:04 -080034 if (perfMonKind.equals(PerfMonEnum.WRITE)) {
35 pm.write_end("RamCloudIndex writeWithRules()");
36 } else if (perfMonKind.equals(PerfMonEnum.INDEXWRITE)) {
37 pm.indexwrite_end("RamCloudIndex writeWithRules()");
38 }
Yoshi Muroi815c7f92014-01-30 18:06:16 -080039 } catch (Exception e) {
40 if (perfMonKind.equals(PerfMonEnum.WRITE)) {
41 pm.write_end("RamCloudIndex writeWithRules()");
42 pm.write_condfail("RamCloudIndex writeWithRules()");
43 log.debug("Cond. Write property: {} failed {} expected version: {}", RamCloudVertex.rcKeyToId(rcKey), e, expectedVersion);
44 } else if (perfMonKind.equals(PerfMonEnum.INDEXWRITE)) {
45 pm.indexwrite_end("RamCloudIndex writeWithRules()");
46 pm.indexwrite_condfail("RamCloudIndex writeWithRules()");
47 log.debug("Cond. Write index property: {} failed {} expected version: {}", RamCloudIndex.rcKeyToIndexName(rcKey), e, expectedVersion);
48 }
49 return false;
50 }
51 return true;
52 }
53}