/** * Checks if mapped transaction can be committed on one phase. * One-phase commit can be done if transaction maps to one primary node and not more than one backup. * * @param txMapping Transaction mapping. */ final void checkOnePhase(GridDhtTxMapping txMapping) { checkOnePhase(tx.transactionNodes()); }
/** * @param tx Transaction. */ private String composeTx(final GridNearTxLocal tx) { final TransactionState txState = tx.state(); String top = txState + ", NEAR, "; if (txState == TransactionState.PREPARING) { final Map<UUID, Collection<UUID>> transactionNodes = tx.transactionNodes(); if (!F.isEmpty(transactionNodes)) { final Set<UUID> primaryNodes = transactionNodes.keySet(); if (!F.isEmpty(primaryNodes)) top += "PRIMARY: " + composeNodeInfo(primaryNodes) + ", "; } } final Long duration = System.currentTimeMillis() - tx.startTime(); return top + "DURATION: " + duration; }
/** * */ private void ackBackup() { if (mappings.empty()) return; if (!tx.needReturnValue() || !tx.implicit()) return; // GridCacheReturn was not saved at backup. GridDistributedTxMapping mapping = mappings.singleMapping(); if (mapping != null) { UUID nodeId = mapping.primary().id(); Collection<UUID> backups = tx.transactionNodes().get(nodeId); if (!F.isEmpty(backups)) { assert backups.size() == 1 : backups; UUID backupId = F.first(backups); ClusterNode backup = cctx.discovery().node(backupId); // Nothing to do if backup has left the grid. if (backup == null) { // No-op. } else if (backup.isLocal()) cctx.tm().removeTxReturn(tx.xidVersion()); else cctx.tm().sendDeferredAckResponse(backupId, tx.xidVersion()); } } }
tx.transactionNodes(txMapping.transactionNodes());
tx.transactionNodes(txMapping.transactionNodes());
tx.transactionNodes(txNodes);
tx.transactionNodes(txMapping.transactionNodes());
UUID nodeId = mapping.primary().id(); Collection<UUID> backups = tx.transactionNodes().get(nodeId);
/** * Checks if mapped transaction can be committed on one phase. * One-phase commit can be done if transaction maps to one primary node and not more than one backup. * * @param txMapping Transaction mapping. */ final void checkOnePhase(GridDhtTxMapping txMapping) { checkOnePhase(tx.transactionNodes()); }
/** * @param tx Transaction. */ private String composeTx(final GridNearTxLocal tx) { final TransactionState txState = tx.state(); String top = txState + ", NEAR, "; if (txState == TransactionState.PREPARING) { final Map<UUID, Collection<UUID>> transactionNodes = tx.transactionNodes(); if (!F.isEmpty(transactionNodes)) { final Set<UUID> primaryNodes = transactionNodes.keySet(); if (!F.isEmpty(primaryNodes)) top += "PRIMARY: " + composeNodeInfo(primaryNodes) + ", "; } } final Long duration = System.currentTimeMillis() - tx.startTime(); return top + "DURATION: " + duration; }
/** * */ private void ackBackup() { if (mappings.empty()) return; if (!tx.needReturnValue() || !tx.implicit()) return; // GridCacheReturn was not saved at backup. GridDistributedTxMapping mapping = mappings.singleMapping(); if (mapping != null) { UUID nodeId = mapping.primary().id(); Collection<UUID> backups = tx.transactionNodes().get(nodeId); if (!F.isEmpty(backups)) { assert backups.size() == 1 : backups; UUID backupId = F.first(backups); ClusterNode backup = cctx.discovery().node(backupId); // Nothing to do if backup has left the grid. if (backup == null) { // No-op. } else if (backup.isLocal()) cctx.tm().removeTxReturn(tx.xidVersion()); else cctx.tm().sendDeferredAckResponse(backupId, tx.xidVersion()); } } }
tx.transactionNodes(txMapping.transactionNodes());
tx.transactionNodes(txMapping.transactionNodes());
tx.transactionNodes(txMapping.transactionNodes());
UUID nodeId = mapping.primary().id(); Collection<UUID> backups = tx.transactionNodes().get(nodeId);