| package net.onrc.onos.core.datastore.ramcloud; |
| |
| import net.onrc.onos.core.datastore.IKVTableID; |
| import net.onrc.onos.core.datastore.IMultiEntryOperation; |
| import net.onrc.onos.core.datastore.internal.IModifiableMultiEntryOperation; |
| import net.onrc.onos.core.datastore.ramcloud.RCTable.Entry; |
| |
| // FIXME move or extract this |
| public class RCMultiEntryOperation implements IMultiEntryOperation, IModifiableMultiEntryOperation { |
| protected final RCTableID tableId; |
| protected final Entry entry; |
| protected final OPERATION operation; |
| protected STATUS status; |
| |
| @Override |
| public boolean hasSucceeded() { |
| return this.status == STATUS.SUCCESS; |
| } |
| |
| @Override |
| public STATUS getStatus() { |
| return status; |
| } |
| |
| @Override |
| public IKVTableID getTableId() { |
| return tableId; |
| } |
| |
| @Override |
| public byte[] getKey() { |
| return entry.key; |
| } |
| |
| @Override |
| public byte[] getValue() { |
| return entry.value; |
| } |
| |
| @Override |
| public long getVersion() { |
| return entry.version; |
| } |
| |
| @Override |
| public OPERATION getOperation() { |
| return operation; |
| } |
| |
| @Override |
| public void setStatus(final STATUS status) { |
| this.status = status; |
| } |
| |
| @Override |
| public void setValue(byte[] value, final long version) { |
| this.entry.setValue(value); |
| setVersion(version); |
| } |
| |
| @Override |
| public void setVersion(final long version) { |
| this.entry.setVersion(version); |
| } |
| |
| |
| public RCMultiEntryOperation(final IKVTableID tableId, final Entry entry, final OPERATION operation) { |
| this.tableId = (RCTableID) tableId; |
| this.operation = operation; |
| |
| this.entry = entry; |
| this.status = STATUS.NOT_EXECUTED; |
| } |
| |
| public static IMultiEntryOperation create(final IKVTableID tableId, final byte[] key, final byte[] value) { |
| return new RCMultiEntryOperation(tableId, |
| new Entry(key, value, RCClient.VERSION_NONEXISTENT), OPERATION.CREATE); |
| } |
| |
| public static IMultiEntryOperation forceCreate(final IKVTableID tableId, final byte[] key, final byte[] value) { |
| return new RCMultiEntryOperation(tableId, |
| new Entry(key, value, RCClient.VERSION_NONEXISTENT), OPERATION.FORCE_CREATE); |
| } |
| |
| /** |
| * Constructor for READ operation. |
| * |
| * @param tableId table to read from |
| * @param key key of an Entry to read |
| */ |
| public static IMultiEntryOperation read(final IKVTableID tableId, final byte[] key) { |
| return new RCMultiEntryOperation(tableId, new Entry(key), OPERATION.READ); |
| } |
| |
| public static IMultiEntryOperation update(final IKVTableID tableId, |
| final byte[] key, final byte[] value, final long version) { |
| return new RCMultiEntryOperation(tableId, new Entry(key, value, version), OPERATION.UPDATE); |
| } |
| |
| public static IMultiEntryOperation delete(final IKVTableID tableId, |
| final byte[] key, final byte[] value, final long version) { |
| return new RCMultiEntryOperation(tableId, new Entry(key, value, version), OPERATION.DELETE); |
| } |
| |
| public static IMultiEntryOperation forceDelete(final IKVTableID tableId, final byte[] key) { |
| return new RCMultiEntryOperation(tableId, new Entry(key), OPERATION.FORCE_DELETE); |
| } |
| |
| @Override |
| public IModifiableMultiEntryOperation getActualOperation() { |
| return this; |
| } |
| |
| @Override |
| public String toString() { |
| return "[RCMultiEntryOperation tableId=" + tableId + ", entry=" + entry |
| + ", operation=" + operation + ", status=" + status + "]"; |
| } |
| } |