use of org.apache.geode.internal.cache.TXId in project geode by apache.
the class CommitCommand method writeCommitResponse.
protected static void writeCommitResponse(TXCommitMessage response, Message origMsg, ServerConnection servConn) throws IOException {
Message responseMsg = servConn.getResponseMessage();
responseMsg.setMessageType(MessageType.RESPONSE);
responseMsg.setTransactionId(origMsg.getTransactionId());
responseMsg.setNumberOfParts(1);
if (response != null) {
response.setClientVersion(servConn.getClientVersion());
}
responseMsg.addObjPart(response, false);
servConn.getCache().getCancelCriterion().checkCancelInProgress(null);
if (logger.isDebugEnabled()) {
logger.debug("TX: sending a nonNull response for transaction: {}", new TXId((InternalDistributedMember) servConn.getProxyID().getDistributedMember(), origMsg.getTransactionId()));
}
responseMsg.send(servConn);
origMsg.clearParts();
}
use of org.apache.geode.internal.cache.TXId in project geode by apache.
the class ClientHealthMonitor method expireTXStates.
/**
* expire the transaction states for the given client. This uses the transactionTimeToLive setting
* that is inherited from the TXManagerImpl. If that setting is non-positive we expire the states
* immediately
*
* @param proxyID
*/
private void expireTXStates(ClientProxyMembershipID proxyID) {
final TXManagerImpl txMgr = (TXManagerImpl) this._cache.getCacheTransactionManager();
final Set<TXId> txids = txMgr.getTransactionsForClient((InternalDistributedMember) proxyID.getDistributedMember());
if (this._cache.isClosed()) {
return;
}
long timeout = txMgr.getTransactionTimeToLive() * 1000;
if (!txids.isEmpty()) {
if (logger.isDebugEnabled()) {
logger.debug("expiring {} transaction contexts for {} timeout={}", txids.size(), proxyID, timeout / 1000);
}
if (timeout <= 0) {
txMgr.removeTransactions(txids, true);
} else {
if (scheduledToBeRemovedTx != null)
scheduledToBeRemovedTx.addAll(txids);
SystemTimerTask task = new SystemTimerTask() {
@Override
public void run2() {
txMgr.removeTransactions(txids, true);
if (scheduledToBeRemovedTx != null)
scheduledToBeRemovedTx.removeAll(txids);
}
};
this._cache.getCCPTimer().schedule(task, timeout);
}
}
}
use of org.apache.geode.internal.cache.TXId in project geode by apache.
the class RollbackCommand method cmdExecute.
@Override
public void cmdExecute(Message clientMessage, ServerConnection serverConnection, long start) throws IOException, ClassNotFoundException, InterruptedException {
serverConnection.setAsTrue(REQUIRES_RESPONSE);
TXManagerImpl txMgr = (TXManagerImpl) serverConnection.getCache().getCacheTransactionManager();
InternalDistributedMember client = (InternalDistributedMember) serverConnection.getProxyID().getDistributedMember();
int uniqId = clientMessage.getTransactionId();
TXId txId = new TXId(client, uniqId);
if (txMgr.isHostedTxRecentlyCompleted(txId)) {
if (logger.isDebugEnabled()) {
logger.debug("TX: found a recently rolled back tx: {}", txId);
sendRollbackReply(clientMessage, serverConnection);
txMgr.removeHostedTXState(txId);
return;
}
}
final TXStateProxy txState = txMgr.getTXState();
try {
if (txState != null) {
txId = txState.getTxId();
txMgr.rollback();
sendRollbackReply(clientMessage, serverConnection);
} else {
// could not find TxState in the host server.
// Protect against a failover command received so late,
// and it is removed from the failoverMap due to capacity.
sendRollbackReply(clientMessage, serverConnection);
}
} catch (Exception e) {
writeException(clientMessage, e, false, serverConnection);
serverConnection.setAsTrue(RESPONDED);
} finally {
if (logger.isDebugEnabled()) {
logger.debug("TX: removing tx state for {}", txId);
}
if (txId != null) {
TXStateProxy proxy = txMgr.removeHostedTXState(txId);
if (logger.isDebugEnabled()) {
logger.debug("TX: removed tx state proxy {}", proxy);
}
}
}
}
Aggregations