blob: 9893838e6089f9e88a30af522459278f68158936 [file] [log] [blame]
Jonathan Hart6df90172014-04-03 10:13:11 -07001package net.onrc.onos.core.datastore.ramcloud;
Yuta HIGUCHI66ca1bf2014-03-12 18:34:09 -07002
Jonathan Hart6df90172014-04-03 10:13:11 -07003import net.onrc.onos.core.datastore.IKVTableID;
4import net.onrc.onos.core.datastore.IMultiEntryOperation;
5import net.onrc.onos.core.datastore.internal.IModifiableMultiEntryOperation;
6import net.onrc.onos.core.datastore.ramcloud.RCTable.Entry;
Yuta HIGUCHI66ca1bf2014-03-12 18:34:09 -07007
8// FIXME move or extract this
9public class RCMultiEntryOperation implements IMultiEntryOperation, IModifiableMultiEntryOperation {
10 protected final RCTableID tableId;
11 protected final Entry entry;
12 protected final OPERATION operation;
13 protected STATUS status;
14
15 @Override
16 public boolean hasSucceeded() {
Yuta HIGUCHI826b4a42014-03-24 13:10:33 -070017 return this.status == STATUS.SUCCESS;
Yuta HIGUCHI66ca1bf2014-03-12 18:34:09 -070018 }
19
20 @Override
21 public STATUS getStatus() {
Yuta HIGUCHI826b4a42014-03-24 13:10:33 -070022 return status;
Yuta HIGUCHI66ca1bf2014-03-12 18:34:09 -070023 }
24
25 @Override
26 public IKVTableID getTableId() {
Yuta HIGUCHI826b4a42014-03-24 13:10:33 -070027 return tableId;
Yuta HIGUCHI66ca1bf2014-03-12 18:34:09 -070028 }
29
30 @Override
31 public byte[] getKey() {
Yuta HIGUCHI826b4a42014-03-24 13:10:33 -070032 return entry.key;
Yuta HIGUCHI66ca1bf2014-03-12 18:34:09 -070033 }
34
35 @Override
36 public byte[] getValue() {
Yuta HIGUCHI826b4a42014-03-24 13:10:33 -070037 return entry.value;
Yuta HIGUCHI66ca1bf2014-03-12 18:34:09 -070038 }
39
40 @Override
41 public long getVersion() {
Yuta HIGUCHI826b4a42014-03-24 13:10:33 -070042 return entry.version;
Yuta HIGUCHI66ca1bf2014-03-12 18:34:09 -070043 }
44
45 @Override
46 public OPERATION getOperation() {
Yuta HIGUCHI826b4a42014-03-24 13:10:33 -070047 return operation;
Yuta HIGUCHI66ca1bf2014-03-12 18:34:09 -070048 }
49
50 @Override
51 public void setStatus(final STATUS status) {
Yuta HIGUCHI826b4a42014-03-24 13:10:33 -070052 this.status = status;
Yuta HIGUCHI66ca1bf2014-03-12 18:34:09 -070053 }
54
55 @Override
56 public void setValue(byte[] value, final long version) {
Yuta HIGUCHI826b4a42014-03-24 13:10:33 -070057 this.entry.setValue(value);
58 setVersion(version);
Yuta HIGUCHI66ca1bf2014-03-12 18:34:09 -070059 }
60
61 @Override
62 public void setVersion(final long version) {
Yuta HIGUCHI826b4a42014-03-24 13:10:33 -070063 this.entry.setVersion(version);
Yuta HIGUCHI66ca1bf2014-03-12 18:34:09 -070064 }
65
66
67 public RCMultiEntryOperation(final IKVTableID tableId, final Entry entry, final OPERATION operation) {
Yuta HIGUCHI826b4a42014-03-24 13:10:33 -070068 this.tableId = (RCTableID) tableId;
69 this.operation = operation;
Yuta HIGUCHI66ca1bf2014-03-12 18:34:09 -070070
Yuta HIGUCHI826b4a42014-03-24 13:10:33 -070071 this.entry = entry;
72 this.status = STATUS.NOT_EXECUTED;
Yuta HIGUCHI66ca1bf2014-03-12 18:34:09 -070073 }
74
75 public static IMultiEntryOperation create(final IKVTableID tableId, final byte[] key, final byte[] value) {
Ray Milkey269ffb92014-04-03 14:43:30 -070076 return new RCMultiEntryOperation(tableId, new Entry(key, value, RCClient.VERSION_NONEXISTENT), OPERATION.CREATE);
Yuta HIGUCHI66ca1bf2014-03-12 18:34:09 -070077 }
78
79 public static IMultiEntryOperation forceCreate(final IKVTableID tableId, final byte[] key, final byte[] value) {
Ray Milkey269ffb92014-04-03 14:43:30 -070080 return new RCMultiEntryOperation(tableId, new Entry(key, value, RCClient.VERSION_NONEXISTENT), OPERATION.FORCE_CREATE);
Yuta HIGUCHI66ca1bf2014-03-12 18:34:09 -070081 }
82
83 /**
84 * Constructor for READ operation.
85 *
86 * @param tableId table to read from
Ray Milkey269ffb92014-04-03 14:43:30 -070087 * @param key key of an Entry to read
Yuta HIGUCHI66ca1bf2014-03-12 18:34:09 -070088 */
89 public static IMultiEntryOperation read(final IKVTableID tableId, final byte[] key) {
Yuta HIGUCHI826b4a42014-03-24 13:10:33 -070090 return new RCMultiEntryOperation(tableId, new Entry(key), OPERATION.READ);
Yuta HIGUCHI66ca1bf2014-03-12 18:34:09 -070091 }
92
93 public static IMultiEntryOperation update(final IKVTableID tableId, final byte[] key, final byte[] value, final long version) {
Ray Milkey269ffb92014-04-03 14:43:30 -070094 return new RCMultiEntryOperation(tableId, new Entry(key, value, version), OPERATION.UPDATE);
Yuta HIGUCHI66ca1bf2014-03-12 18:34:09 -070095 }
96
97 public static IMultiEntryOperation delete(final IKVTableID tableId, final byte[] key, final byte[] value, final long version) {
Ray Milkey269ffb92014-04-03 14:43:30 -070098 return new RCMultiEntryOperation(tableId, new Entry(key, value, version), OPERATION.DELETE);
Yuta HIGUCHI66ca1bf2014-03-12 18:34:09 -070099 }
100
101 public static IMultiEntryOperation forceDelete(final IKVTableID tableId, final byte[] key) {
Ray Milkey269ffb92014-04-03 14:43:30 -0700102 return new RCMultiEntryOperation(tableId, new Entry(key), OPERATION.FORCE_DELETE);
Yuta HIGUCHI66ca1bf2014-03-12 18:34:09 -0700103 }
104
105 @Override
106 public IModifiableMultiEntryOperation getActualOperation() {
Yuta HIGUCHI826b4a42014-03-24 13:10:33 -0700107 return this;
Yuta HIGUCHI66ca1bf2014-03-12 18:34:09 -0700108 }
109
110 @Override
111 public String toString() {
Yuta HIGUCHI826b4a42014-03-24 13:10:33 -0700112 return "[RCMultiEntryOperation tableId=" + tableId + ", entry=" + entry
113 + ", operation=" + operation + ", status=" + status + "]";
Yuta HIGUCHI66ca1bf2014-03-12 18:34:09 -0700114 }
115}