@Override public Byte apply(EntryView.ReadWriteEntryView<CacheXid, TxState> view) { if (view.find().isPresent()) { TxState state = view.get(); view.set(state.setStatus(committed ? COMMITTED : ROLLED_BACK, true, timeService)); return OK.value; } else { return NO_TRANSACTION.value; } }
@Override public Byte apply(EntryView.ReadWriteEntryView<CacheXid, TxState> view) { if (view.find().isPresent()) { TxState state = view.get(); if (state.getStatus().value == expectStatus) { view.set(state.setStatus(MARK_ROLLBACK, true, timeService)); return OK.value; } else { return ERROR.value; } } else { return NO_TRANSACTION.value; } }
@Override public Byte apply(EntryView.ReadWriteEntryView<CacheXid, TxState> view) { if (view.find().isPresent()) { TxState state = view.get(); if (state.getStatus() != PREPARING) { return state.getStatus().value; } view.set(state.setStatus(PREPARED, false, timeService)); return OK.value; } else { return NO_TRANSACTION.value; } }
try { assertEquals("value" + e.getKey(), rwMap.eval(e.getKey(), view -> { Object prev = view.get(); view.set(prev + "-other"); return prev;
/** * Read-write allows for replace operations to happen based on version * comparison, and update version information if replace is versions are * equals. * * This is the kind of advance operation that Hot Rod prototocol requires * but the current Infinispan API is unable to offer without offering * atomicity at the level of the function that compares the version * information. */ <K> void doReadWriteForConditionalParamBasedReplace(Supplier<K> keySupplier, ReadWriteMap<K, String> map1, ReadWriteMap<K, String> map2) { replaceWithVersion(keySupplier, map1, map2, 100, rw -> { assertEquals("uno", rw.get()); assertEquals(Optional.of(new MetaEntryVersion(new NumericVersion(200))), rw.findMetaParam(MetaEntryVersion.class)); } ); replaceWithVersion(keySupplier, map1, map2, 900, rw -> { assertEquals(Optional.of("one"), rw.find()); assertEquals(Optional.of(new MetaEntryVersion(new NumericVersion(100))), rw.findMetaParam(MetaEntryVersion.class)); }); }
@Override public Byte apply(EntryView.ReadWriteEntryView<CacheXid, TxState> view) { if (view.find().isPresent()) { TxState state = view.get(); switch (state.getStatus()) { case ACTIVE: view.set(state.markPreparing(modifications, timeService)); case PREPARING: return OK.value; default: return state.getStatus().value; } } else { return NO_TRANSACTION.value; } }
private byte advanceToCommit(EntryView.ReadWriteEntryView<CacheXid, TxState> view) { TxState state = view.get(); Status prevState = state.getStatus(); //we can advance to commit decision if it is prepared or the commit decision is already set switch (prevState) { case PREPARED: //two-phase-commit case PREPARING: //one-phase-commit view.set(state.setStatus(MARK_COMMIT, false, timeService)); case MARK_COMMIT: return OK.value; default: //any other status, we return it to the caller to decide what to do. return prevState.value; } }
private byte advanceToRollback(EntryView.ReadWriteEntryView<CacheXid, TxState> view) { TxState state = view.get(); Status prevState = state.getStatus(); //we can rollback if the transaction is running or prepared switch (prevState) { case ACTIVE: case PREPARED: case PREPARING: view.set(state.setStatus(MARK_ROLLBACK, true, timeService)); case MARK_ROLLBACK: return OK.value; default: //any other status, we return it to the caller to decide what to do. return prevState.value; } }
public static <K, V> void assertReadWriteViewEquals(K k, V expected, ReadWriteEntryView<K, V> rw) { assertEquals(k, rw.key()); assertTrue(rw.find().isPresent()); assertEquals(expected, rw.find().get()); assertEquals(expected, rw.get()); try { rw.set(null); fail("Expected IllegalStateException since entry view cannot be modified outside lambda"); } catch (IllegalStateException e) { // Expected } }
@Override public GridBucketState getValue() { GridBucketState sourceState = entryView.get(); return sourceState.deepCopy(); }
@Override public GridBucketState getValue() { GridBucketState sourceState = entryView.get(); return sourceState.deepCopy(); }