...
Code Block |
---|
void revert(String key, long record, long timestamp) |
Clear
CLEAR key IN record
Code Block |
---|
//NOTE: cannot do automatic retry for this method, so caller must handle that boolean clear{ AtomicOperation operation = null; while (operation == null || !operation.commit()) { operation = doRevert(key, record, timestamp, transaction != null ? transactions.get(transaction) : engine); } } AtomicOperation doRevert(String key, long record, long timestamp, Compoundable store) { AtomicOperation operation = AtomicOperation.start(store); Set<TObject> past = operation.fetch(key, record, timestamp); Set<TObject> valuespresent = operation.fetch(key, record); Set<TObject> xor = Sets.symmetricDifference(past, present); try { for (TObject value : valuesxor) { if(present.contains(value)) { operation.remove(key, value, record); } else { operation.add(key, value, record); } } return operation.commit(); } |
Set
SET key AS value IN record
Code Block |
---|
//NOTE: cannot do automatic retry for this method, so caller must handle that ; } catch (AtomicStateException e) { return null; } |
Clear
CLEAR key IN record
Code Block |
---|
boolean clear(String key, long record){
AtomicOperation operation = null;
while(operation == null || !operation.commit()){
operation = doClear(key, record, transaction != null ? transactions.get(transaction) : engine);
}
return true;
}
AtomicOperation doClear(String key, long record, Store store){
AtomicOperation operation = AtomicOperation.start(store);
AtomicOperation operation = AtomicOperation.start(store);
Set<TObject> values = operation.fetch(key, record);
for (TObject value : values){
operation.remove(key, value, record);
}
return operation;
} |
Set
SET key AS value IN record
Code Block |
---|
//NOTE: CANNOT use the clear() method but must do removes in terms of the atomic operation!! boolean set(String key, TObject value, long record){ AtomicOperation operation = null; while(operation == null || !operation.commit()){ operation = doSet(key, value, record, transaction != null ? transactions.get(transaction) : engine); } return true; } boolean doSet(String key, TObject value, long record, Store store){ AtomicOperation operation = AtomicOperation.start(store); Set<TObject> values = operation.fetch(key, record); for (TObject v : values){ operation.remove(key, v, record); } operation.add(key, value, record); return operation.commit(); } |
Verify And Swap
See http://en.wikipedia.org/wiki/Compare-and-swap
...