use of org.infinispan.server.hotrod.tx.table.GlobalTxTable in project infinispan by infinispan.
the class LifecycleCallbacks method createGlobalTxTable.
private synchronized void createGlobalTxTable(EmbeddedCacheManager cacheManager) {
if (!registered) {
Cache<CacheXid, TxState> cache = cacheManager.getCache(GLOBAL_TX_TABLE_CACHE_NAME);
GlobalTxTable txTable = new GlobalTxTable(cache, globalComponentRegistry);
globalComponentRegistry.registerComponent(txTable, GlobalTxTable.class);
registered = true;
}
}
use of org.infinispan.server.hotrod.tx.table.GlobalTxTable in project infinispan by infinispan.
the class TransactionRequestProcessor method forgetTransaction.
void forgetTransaction(HotRodHeader header, Subject subject, XidImpl xid) {
// TODO authentication?
GlobalTxTable txTable = SecurityActions.getGlobalComponentRegistry(server.getCacheManager()).getComponent(GlobalTxTable.class);
executor.execute(() -> {
try {
txTable.forgetTransaction(xid);
writeSuccess(header);
} catch (Throwable t) {
writeException(header, t);
}
});
}
use of org.infinispan.server.hotrod.tx.table.GlobalTxTable in project infinispan by infinispan.
the class TxReaperAndRecoveryTest method initGlobalTxTable.
private void initGlobalTxTable(int index, XidImpl xid, Address address, boolean recoverable, Status status) {
GlobalTxTable globalTxTable = globalTxTable(index);
CacheXid cacheXid = new CacheXid(fromString(cacheName()), xid);
List<TxFunction> functions = new ArrayList<>(5);
GlobalTransaction gtx = address == null ? newGlobalTransaction(cacheName(), index) : newGlobalTransaction(cacheName(), index, address);
switch(status) {
case ACTIVE:
functions.add(new CreateStateFunction(gtx, recoverable, 1));
break;
case PREPARING:
functions.add(new CreateStateFunction(gtx, recoverable, 1));
functions.add(new PreparingDecisionFunction(Collections.emptyList()));
break;
case PREPARED:
functions.add(new CreateStateFunction(gtx, recoverable, 1));
functions.add(new PreparingDecisionFunction(Collections.emptyList()));
functions.add(new SetPreparedFunction());
break;
case MARK_ROLLBACK:
functions.add(new CreateStateFunction(gtx, recoverable, 1));
functions.add(new PreparingDecisionFunction(Collections.emptyList()));
functions.add(new SetPreparedFunction());
functions.add(new SetDecisionFunction(false));
break;
case MARK_COMMIT:
functions.add(new CreateStateFunction(gtx, recoverable, 1));
functions.add(new PreparingDecisionFunction(Collections.emptyList()));
functions.add(new SetPreparedFunction());
functions.add(new SetDecisionFunction(true));
break;
case ROLLED_BACK:
functions.add(new CreateStateFunction(gtx, recoverable, 1));
functions.add(new PreparingDecisionFunction(Collections.emptyList()));
functions.add(new SetPreparedFunction());
functions.add(new SetDecisionFunction(false));
functions.add(new SetCompletedTransactionFunction(false));
break;
case COMMITTED:
functions.add(new CreateStateFunction(gtx, recoverable, 1));
functions.add(new PreparingDecisionFunction(Collections.emptyList()));
functions.add(new SetPreparedFunction());
functions.add(new SetDecisionFunction(true));
functions.add(new SetCompletedTransactionFunction(true));
break;
default:
throw new IllegalStateException();
}
for (TxFunction function : functions) {
assertEquals(Status.OK, globalTxTable.update(cacheXid, function, 30000));
}
assertEquals(status, globalTxTable.getState(cacheXid).getStatus());
}
use of org.infinispan.server.hotrod.tx.table.GlobalTxTable in project infinispan by infinispan.
the class TransactionRequestProcessor method getPreparedTransactions.
void getPreparedTransactions(HotRodHeader header, Subject subject) {
// TODO authentication?
if (log.isTraceEnabled()) {
log.trace("Fetching transactions for recovery");
}
executor.execute(() -> {
try {
GlobalTxTable txTable = SecurityActions.getGlobalComponentRegistry(server.getCacheManager()).getComponent(GlobalTxTable.class);
Collection<XidImpl> preparedTx = txTable.getPreparedTransactions();
writeResponse(header, createRecoveryResponse(header, preparedTx));
} catch (Throwable t) {
writeException(header, t);
}
});
}
use of org.infinispan.server.hotrod.tx.table.GlobalTxTable in project infinispan by infinispan.
the class TopologyChangeFunctionalTest method assertServerTransactionTableEmpty.
private void assertServerTransactionTableEmpty() {
for (Cache<?, ?> cache : caches(cacheName())) {
PerCacheTxTable perCacheTxTable = extractComponent(cache, PerCacheTxTable.class);
assertTrue(perCacheTxTable.isEmpty());
}
for (EmbeddedCacheManager cm : managers()) {
GlobalTxTable globalTxTable = extractGlobalComponent(cm, GlobalTxTable.class);
assertTrue(globalTxTable.isEmpty());
}
}
Aggregations