Jonathan Hart | 6df9017 | 2014-04-03 10:13:11 -0700 | [diff] [blame] | 1 | package net.onrc.onos.core.datastore.ramcloud; |
Yuta HIGUCHI | 66ca1bf | 2014-03-12 18:34:09 -0700 | [diff] [blame] | 2 | |
Jonathan Hart | 6df9017 | 2014-04-03 10:13:11 -0700 | [diff] [blame] | 3 | import net.onrc.onos.core.datastore.IKVTableID; |
| 4 | import net.onrc.onos.core.datastore.IMultiEntryOperation; |
| 5 | import net.onrc.onos.core.datastore.internal.IModifiableMultiEntryOperation; |
| 6 | import net.onrc.onos.core.datastore.ramcloud.RCTable.Entry; |
Yuta HIGUCHI | 66ca1bf | 2014-03-12 18:34:09 -0700 | [diff] [blame] | 7 | |
| 8 | // FIXME move or extract this |
| 9 | public 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 HIGUCHI | 826b4a4 | 2014-03-24 13:10:33 -0700 | [diff] [blame] | 17 | return this.status == STATUS.SUCCESS; |
Yuta HIGUCHI | 66ca1bf | 2014-03-12 18:34:09 -0700 | [diff] [blame] | 18 | } |
| 19 | |
| 20 | @Override |
| 21 | public STATUS getStatus() { |
Yuta HIGUCHI | 826b4a4 | 2014-03-24 13:10:33 -0700 | [diff] [blame] | 22 | return status; |
Yuta HIGUCHI | 66ca1bf | 2014-03-12 18:34:09 -0700 | [diff] [blame] | 23 | } |
| 24 | |
| 25 | @Override |
| 26 | public IKVTableID getTableId() { |
Yuta HIGUCHI | 826b4a4 | 2014-03-24 13:10:33 -0700 | [diff] [blame] | 27 | return tableId; |
Yuta HIGUCHI | 66ca1bf | 2014-03-12 18:34:09 -0700 | [diff] [blame] | 28 | } |
| 29 | |
| 30 | @Override |
| 31 | public byte[] getKey() { |
Yuta HIGUCHI | 826b4a4 | 2014-03-24 13:10:33 -0700 | [diff] [blame] | 32 | return entry.key; |
Yuta HIGUCHI | 66ca1bf | 2014-03-12 18:34:09 -0700 | [diff] [blame] | 33 | } |
| 34 | |
| 35 | @Override |
| 36 | public byte[] getValue() { |
Yuta HIGUCHI | 826b4a4 | 2014-03-24 13:10:33 -0700 | [diff] [blame] | 37 | return entry.value; |
Yuta HIGUCHI | 66ca1bf | 2014-03-12 18:34:09 -0700 | [diff] [blame] | 38 | } |
| 39 | |
| 40 | @Override |
| 41 | public long getVersion() { |
Yuta HIGUCHI | 826b4a4 | 2014-03-24 13:10:33 -0700 | [diff] [blame] | 42 | return entry.version; |
Yuta HIGUCHI | 66ca1bf | 2014-03-12 18:34:09 -0700 | [diff] [blame] | 43 | } |
| 44 | |
| 45 | @Override |
| 46 | public OPERATION getOperation() { |
Yuta HIGUCHI | 826b4a4 | 2014-03-24 13:10:33 -0700 | [diff] [blame] | 47 | return operation; |
Yuta HIGUCHI | 66ca1bf | 2014-03-12 18:34:09 -0700 | [diff] [blame] | 48 | } |
| 49 | |
| 50 | @Override |
| 51 | public void setStatus(final STATUS status) { |
Yuta HIGUCHI | 826b4a4 | 2014-03-24 13:10:33 -0700 | [diff] [blame] | 52 | this.status = status; |
Yuta HIGUCHI | 66ca1bf | 2014-03-12 18:34:09 -0700 | [diff] [blame] | 53 | } |
| 54 | |
| 55 | @Override |
| 56 | public void setValue(byte[] value, final long version) { |
Yuta HIGUCHI | 826b4a4 | 2014-03-24 13:10:33 -0700 | [diff] [blame] | 57 | this.entry.setValue(value); |
| 58 | setVersion(version); |
Yuta HIGUCHI | 66ca1bf | 2014-03-12 18:34:09 -0700 | [diff] [blame] | 59 | } |
| 60 | |
| 61 | @Override |
| 62 | public void setVersion(final long version) { |
Yuta HIGUCHI | 826b4a4 | 2014-03-24 13:10:33 -0700 | [diff] [blame] | 63 | this.entry.setVersion(version); |
Yuta HIGUCHI | 66ca1bf | 2014-03-12 18:34:09 -0700 | [diff] [blame] | 64 | } |
| 65 | |
| 66 | |
| 67 | public RCMultiEntryOperation(final IKVTableID tableId, final Entry entry, final OPERATION operation) { |
Yuta HIGUCHI | 826b4a4 | 2014-03-24 13:10:33 -0700 | [diff] [blame] | 68 | this.tableId = (RCTableID) tableId; |
| 69 | this.operation = operation; |
Yuta HIGUCHI | 66ca1bf | 2014-03-12 18:34:09 -0700 | [diff] [blame] | 70 | |
Yuta HIGUCHI | 826b4a4 | 2014-03-24 13:10:33 -0700 | [diff] [blame] | 71 | this.entry = entry; |
| 72 | this.status = STATUS.NOT_EXECUTED; |
Yuta HIGUCHI | 66ca1bf | 2014-03-12 18:34:09 -0700 | [diff] [blame] | 73 | } |
| 74 | |
| 75 | public static IMultiEntryOperation create(final IKVTableID tableId, final byte[] key, final byte[] value) { |
Jonathan Hart | c00f5c2 | 2014-06-10 15:14:40 -0700 | [diff] [blame] | 76 | return new RCMultiEntryOperation(tableId, |
| 77 | new Entry(key, value, RCClient.VERSION_NONEXISTENT), OPERATION.CREATE); |
Yuta HIGUCHI | 66ca1bf | 2014-03-12 18:34:09 -0700 | [diff] [blame] | 78 | } |
| 79 | |
| 80 | public static IMultiEntryOperation forceCreate(final IKVTableID tableId, final byte[] key, final byte[] value) { |
Jonathan Hart | c00f5c2 | 2014-06-10 15:14:40 -0700 | [diff] [blame] | 81 | return new RCMultiEntryOperation(tableId, |
| 82 | new Entry(key, value, RCClient.VERSION_NONEXISTENT), OPERATION.FORCE_CREATE); |
Yuta HIGUCHI | 66ca1bf | 2014-03-12 18:34:09 -0700 | [diff] [blame] | 83 | } |
| 84 | |
| 85 | /** |
| 86 | * Constructor for READ operation. |
| 87 | * |
| 88 | * @param tableId table to read from |
Ray Milkey | 269ffb9 | 2014-04-03 14:43:30 -0700 | [diff] [blame] | 89 | * @param key key of an Entry to read |
Yuta HIGUCHI | 66ca1bf | 2014-03-12 18:34:09 -0700 | [diff] [blame] | 90 | */ |
| 91 | public static IMultiEntryOperation read(final IKVTableID tableId, final byte[] key) { |
Yuta HIGUCHI | 826b4a4 | 2014-03-24 13:10:33 -0700 | [diff] [blame] | 92 | return new RCMultiEntryOperation(tableId, new Entry(key), OPERATION.READ); |
Yuta HIGUCHI | 66ca1bf | 2014-03-12 18:34:09 -0700 | [diff] [blame] | 93 | } |
| 94 | |
Jonathan Hart | c00f5c2 | 2014-06-10 15:14:40 -0700 | [diff] [blame] | 95 | public static IMultiEntryOperation update(final IKVTableID tableId, |
| 96 | final byte[] key, final byte[] value, final long version) { |
Ray Milkey | 269ffb9 | 2014-04-03 14:43:30 -0700 | [diff] [blame] | 97 | return new RCMultiEntryOperation(tableId, new Entry(key, value, version), OPERATION.UPDATE); |
Yuta HIGUCHI | 66ca1bf | 2014-03-12 18:34:09 -0700 | [diff] [blame] | 98 | } |
| 99 | |
Jonathan Hart | c00f5c2 | 2014-06-10 15:14:40 -0700 | [diff] [blame] | 100 | public static IMultiEntryOperation delete(final IKVTableID tableId, |
| 101 | final byte[] key, final byte[] value, final long version) { |
Ray Milkey | 269ffb9 | 2014-04-03 14:43:30 -0700 | [diff] [blame] | 102 | return new RCMultiEntryOperation(tableId, new Entry(key, value, version), OPERATION.DELETE); |
Yuta HIGUCHI | 66ca1bf | 2014-03-12 18:34:09 -0700 | [diff] [blame] | 103 | } |
| 104 | |
| 105 | public static IMultiEntryOperation forceDelete(final IKVTableID tableId, final byte[] key) { |
Ray Milkey | 269ffb9 | 2014-04-03 14:43:30 -0700 | [diff] [blame] | 106 | return new RCMultiEntryOperation(tableId, new Entry(key), OPERATION.FORCE_DELETE); |
Yuta HIGUCHI | 66ca1bf | 2014-03-12 18:34:09 -0700 | [diff] [blame] | 107 | } |
| 108 | |
| 109 | @Override |
| 110 | public IModifiableMultiEntryOperation getActualOperation() { |
Yuta HIGUCHI | 826b4a4 | 2014-03-24 13:10:33 -0700 | [diff] [blame] | 111 | return this; |
Yuta HIGUCHI | 66ca1bf | 2014-03-12 18:34:09 -0700 | [diff] [blame] | 112 | } |
| 113 | |
| 114 | @Override |
| 115 | public String toString() { |
Yuta HIGUCHI | 826b4a4 | 2014-03-24 13:10:33 -0700 | [diff] [blame] | 116 | return "[RCMultiEntryOperation tableId=" + tableId + ", entry=" + entry |
| 117 | + ", operation=" + operation + ", status=" + status + "]"; |
Yuta HIGUCHI | 66ca1bf | 2014-03-12 18:34:09 -0700 | [diff] [blame] | 118 | } |
| 119 | } |