Search in sources :

Example 6 with TXId

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();
}
Also used : TXCommitMessage(org.apache.geode.internal.cache.TXCommitMessage) Message(org.apache.geode.internal.cache.tier.sockets.Message) InternalDistributedMember(org.apache.geode.distributed.internal.membership.InternalDistributedMember) TXId(org.apache.geode.internal.cache.TXId)

Example 7 with TXId

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);
        }
    }
}
Also used : TXManagerImpl(org.apache.geode.internal.cache.TXManagerImpl) TXId(org.apache.geode.internal.cache.TXId) SystemTimerTask(org.apache.geode.internal.SystemTimer.SystemTimerTask)

Example 8 with TXId

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);
            }
        }
    }
}
Also used : TXManagerImpl(org.apache.geode.internal.cache.TXManagerImpl) InternalDistributedMember(org.apache.geode.distributed.internal.membership.InternalDistributedMember) TXStateProxy(org.apache.geode.internal.cache.TXStateProxy) TXId(org.apache.geode.internal.cache.TXId) IOException(java.io.IOException)

Aggregations

TXId (org.apache.geode.internal.cache.TXId)8 InternalDistributedMember (org.apache.geode.distributed.internal.membership.InternalDistributedMember)4 TXManagerImpl (org.apache.geode.internal.cache.TXManagerImpl)4 ArrayList (java.util.ArrayList)3 Cache (org.apache.geode.cache.Cache)3 CacheTransactionManager (org.apache.geode.cache.CacheTransactionManager)3 TransactionDataNodeHasDepartedException (org.apache.geode.cache.TransactionDataNodeHasDepartedException)3 TXStateProxy (org.apache.geode.internal.cache.TXStateProxy)3 IOException (java.io.IOException)2 List (java.util.List)2 Execution (org.apache.geode.cache.execute.Execution)2 FunctionException (org.apache.geode.cache.execute.FunctionException)2 DistributedMember (org.apache.geode.distributed.DistributedMember)2 TXCommitMessage (org.apache.geode.internal.cache.TXCommitMessage)2 CommitConflictException (org.apache.geode.cache.CommitConflictException)1 FunctionInvocationTargetException (org.apache.geode.cache.execute.FunctionInvocationTargetException)1 ReplyException (org.apache.geode.distributed.internal.ReplyException)1 SystemTimerTask (org.apache.geode.internal.SystemTimer.SystemTimerTask)1 FindRemoteTXMessageReplyProcessor (org.apache.geode.internal.cache.FindRemoteTXMessage.FindRemoteTXMessageReplyProcessor)1 InternalCache (org.apache.geode.internal.cache.InternalCache)1