mirror of
http://git.pig4cloud.com/pig/pigx.git
synced 2026-11-13 14:09:00 +08:00
✨ Introducing new features. closed #4642 up seata-server 1.6.1
This commit is contained in:
1 parent
859a049646
commit
510061cc75
116 files changed
+12716
-8752
No files matched your search
+64
-26
@@ -15,6 +15,9 @@
|
||||
*/
|
||||
package io.seata.server.transaction.at;
|
||||
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import io.seata.common.exception.StoreException;
|
||||
import io.seata.common.util.StringUtils;
|
||||
import io.seata.core.exception.BranchTransactionException;
|
||||
import io.seata.core.exception.TransactionException;
|
||||
import io.seata.core.model.BranchType;
|
||||
@@ -23,6 +26,12 @@ import io.seata.server.coordinator.AbstractCore;
|
||||
import io.seata.server.session.BranchSession;
|
||||
import io.seata.server.session.GlobalSession;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import static io.seata.common.Constants.AUTO_COMMIT;
|
||||
import static io.seata.common.Constants.SKIP_CHECK_LOCK;
|
||||
import static io.seata.core.exception.TransactionExceptionCode.LockKeyConflict;
|
||||
|
||||
/**
|
||||
@@ -31,35 +40,64 @@ import static io.seata.core.exception.TransactionExceptionCode.LockKeyConflict;
|
||||
* @author ph3636
|
||||
*/
|
||||
public class ATCore extends AbstractCore {
|
||||
|
||||
private final ObjectMapper objectMapper = new ObjectMapper();
|
||||
|
||||
public ATCore(RemotingServer remotingServer) {
|
||||
super(remotingServer);
|
||||
}
|
||||
|
||||
public ATCore(RemotingServer remotingServer) {
|
||||
super(remotingServer);
|
||||
}
|
||||
@Override
|
||||
public BranchType getHandleBranchType() {
|
||||
return BranchType.AT;
|
||||
}
|
||||
|
||||
@Override
|
||||
public BranchType getHandleBranchType() {
|
||||
return BranchType.AT;
|
||||
}
|
||||
@Override
|
||||
protected void branchSessionLock(GlobalSession globalSession, BranchSession branchSession)
|
||||
throws TransactionException {
|
||||
String applicationData = branchSession.getApplicationData();
|
||||
boolean autoCommit = true;
|
||||
boolean skipCheckLock = false;
|
||||
if (StringUtils.isNotBlank(applicationData)) {
|
||||
try {
|
||||
Map<String, Object> data = objectMapper.readValue(applicationData, HashMap.class);
|
||||
Object clientAutoCommit = data.get(AUTO_COMMIT);
|
||||
if (clientAutoCommit != null && !(boolean)clientAutoCommit) {
|
||||
autoCommit = (boolean)clientAutoCommit;
|
||||
}
|
||||
Object clientSkipCheckLock = data.get(SKIP_CHECK_LOCK);
|
||||
if (clientSkipCheckLock instanceof Boolean) {
|
||||
skipCheckLock = (boolean)clientSkipCheckLock;
|
||||
}
|
||||
} catch (IOException e) {
|
||||
LOGGER.error("failed to get application data: {}", e.getMessage(), e);
|
||||
}
|
||||
}
|
||||
try {
|
||||
if (!branchSession.lock(autoCommit, skipCheckLock)) {
|
||||
throw new BranchTransactionException(LockKeyConflict,
|
||||
String.format("Global lock acquire failed xid = %s branchId = %s", globalSession.getXid(),
|
||||
branchSession.getBranchId()));
|
||||
}
|
||||
} catch (StoreException e) {
|
||||
if (e.getCause() instanceof BranchTransactionException) {
|
||||
throw new BranchTransactionException(((BranchTransactionException)e.getCause()).getCode(),
|
||||
String.format("Global lock acquire failed xid = %s branchId = %s", globalSession.getXid(),
|
||||
branchSession.getBranchId()));
|
||||
}
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void branchSessionLock(GlobalSession globalSession, BranchSession branchSession)
|
||||
throws TransactionException {
|
||||
if (!branchSession.lock()) {
|
||||
throw new BranchTransactionException(LockKeyConflict,
|
||||
String.format("Global lock acquire failed xid = %s branchId = %s", globalSession.getXid(),
|
||||
branchSession.getBranchId()));
|
||||
}
|
||||
}
|
||||
@Override
|
||||
protected void branchSessionUnlock(BranchSession branchSession) throws TransactionException {
|
||||
branchSession.unlock();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void branchSessionUnlock(BranchSession branchSession) throws TransactionException {
|
||||
branchSession.unlock();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean lockQuery(BranchType branchType, String resourceId, String xid, String lockKeys)
|
||||
throws TransactionException {
|
||||
return lockManager.isLockable(xid, resourceId, lockKeys);
|
||||
}
|
||||
@Override
|
||||
public boolean lockQuery(BranchType branchType, String resourceId, String xid, String lockKeys)
|
||||
throws TransactionException {
|
||||
return lockManager.isLockable(xid, resourceId, lockKeys);
|
||||
}
|
||||
|
||||
}
|
||||
+175
-199
@@ -15,11 +15,6 @@
|
||||
*/
|
||||
package io.seata.server.transaction.saga;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.TimeoutException;
|
||||
|
||||
import io.netty.channel.Channel;
|
||||
import io.seata.common.util.CollectionUtils;
|
||||
import io.seata.core.exception.GlobalTransactionException;
|
||||
@@ -31,14 +26,18 @@ import io.seata.core.protocol.transaction.BranchCommitRequest;
|
||||
import io.seata.core.protocol.transaction.BranchCommitResponse;
|
||||
import io.seata.core.protocol.transaction.BranchRollbackRequest;
|
||||
import io.seata.core.protocol.transaction.BranchRollbackResponse;
|
||||
import io.seata.core.rpc.netty.ChannelManager;
|
||||
import io.seata.core.rpc.RemotingServer;
|
||||
import io.seata.core.rpc.netty.ChannelManager;
|
||||
import io.seata.server.coordinator.AbstractCore;
|
||||
import io.seata.server.session.BranchSession;
|
||||
import io.seata.server.session.GlobalSession;
|
||||
import io.seata.server.session.SessionHelper;
|
||||
import io.seata.server.session.SessionHolder;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.TimeoutException;
|
||||
|
||||
/**
|
||||
* The type saga core.
|
||||
*
|
||||
@@ -46,209 +45,186 @@ import io.seata.server.session.SessionHolder;
|
||||
*/
|
||||
public class SagaCore extends AbstractCore {
|
||||
|
||||
public SagaCore(RemotingServer remotingServer) {
|
||||
super(remotingServer);
|
||||
}
|
||||
public SagaCore(RemotingServer remotingServer) {
|
||||
super(remotingServer);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BranchType getHandleBranchType() {
|
||||
return BranchType.SAGA;
|
||||
}
|
||||
@Override
|
||||
public BranchType getHandleBranchType() {
|
||||
return BranchType.SAGA;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void globalSessionStatusCheck(GlobalSession globalSession) throws GlobalTransactionException {
|
||||
// SAGA type accept forward(retry) operation on timeout or commit fail, forward
|
||||
// operation will register remaining branches
|
||||
}
|
||||
@Override
|
||||
public void globalSessionStatusCheck(GlobalSession globalSession) throws GlobalTransactionException {
|
||||
// SAGA type accept forward(retry) operation on timeout or commit fail, forward operation will register remaining branches
|
||||
}
|
||||
|
||||
@Override
|
||||
public BranchStatus branchCommitSend(BranchCommitRequest request, GlobalSession globalSession,
|
||||
BranchSession branchSession) throws IOException, TimeoutException {
|
||||
Map<String, Channel> channels = ChannelManager.getRmChannels();
|
||||
if (CollectionUtils.isEmpty(channels)) {
|
||||
LOGGER.error("Failed to commit SAGA global[" + globalSession.getXid() + ", RM channels is empty.");
|
||||
return BranchStatus.PhaseTwo_CommitFailed_Retryable;
|
||||
}
|
||||
String sagaResourceId = getSagaResourceId(globalSession);
|
||||
Channel sagaChannel = channels.get(sagaResourceId);
|
||||
if (sagaChannel == null) {
|
||||
LOGGER.error("Failed to commit SAGA global[" + globalSession.getXid()
|
||||
+ ", cannot find channel by resourceId[" + sagaResourceId + "]");
|
||||
return BranchStatus.PhaseTwo_CommitFailed_Retryable;
|
||||
}
|
||||
BranchCommitResponse response = (BranchCommitResponse) remotingServer.sendSyncRequest(sagaChannel, request);
|
||||
return response.getBranchStatus();
|
||||
}
|
||||
@Override
|
||||
public BranchStatus branchCommitSend(BranchCommitRequest request, GlobalSession globalSession,
|
||||
BranchSession branchSession) throws IOException, TimeoutException {
|
||||
Map<String, Channel> channels = ChannelManager.getRmChannels();
|
||||
if (CollectionUtils.isEmpty(channels)) {
|
||||
LOGGER.error("Failed to commit SAGA global[" + globalSession.getXid() + ", RM channels is empty.");
|
||||
return BranchStatus.PhaseTwo_CommitFailed_Retryable;
|
||||
}
|
||||
String sagaResourceId = getSagaResourceId(globalSession);
|
||||
Channel sagaChannel = channels.get(sagaResourceId);
|
||||
if (sagaChannel == null) {
|
||||
LOGGER.error("Failed to commit SAGA global[" + globalSession.getXid()
|
||||
+ ", cannot find channel by resourceId[" + sagaResourceId + "]");
|
||||
return BranchStatus.PhaseTwo_CommitFailed_Retryable;
|
||||
}
|
||||
BranchCommitResponse response = (BranchCommitResponse) remotingServer.sendSyncRequest(sagaChannel, request);
|
||||
return response.getBranchStatus();
|
||||
}
|
||||
|
||||
@Override
|
||||
public BranchStatus branchRollbackSend(BranchRollbackRequest request, GlobalSession globalSession,
|
||||
BranchSession branchSession) throws IOException, TimeoutException {
|
||||
Map<String, Channel> channels = ChannelManager.getRmChannels();
|
||||
if (CollectionUtils.isEmpty(channels)) {
|
||||
LOGGER.error("Failed to rollback SAGA global[" + globalSession.getXid() + ", RM channels is empty.");
|
||||
return BranchStatus.PhaseTwo_RollbackFailed_Retryable;
|
||||
}
|
||||
String sagaResourceId = getSagaResourceId(globalSession);
|
||||
Channel sagaChannel = channels.get(sagaResourceId);
|
||||
if (sagaChannel == null) {
|
||||
LOGGER.error("Failed to rollback SAGA global[" + globalSession.getXid()
|
||||
+ ", cannot find channel by resourceId[" + sagaResourceId + "]");
|
||||
return BranchStatus.PhaseTwo_RollbackFailed_Retryable;
|
||||
}
|
||||
BranchRollbackResponse response = (BranchRollbackResponse) remotingServer.sendSyncRequest(sagaChannel, request);
|
||||
return response.getBranchStatus();
|
||||
}
|
||||
@Override
|
||||
public BranchStatus branchRollbackSend(BranchRollbackRequest request, GlobalSession globalSession,
|
||||
BranchSession branchSession) throws IOException, TimeoutException {
|
||||
Map<String, Channel> channels = ChannelManager.getRmChannels();
|
||||
if (CollectionUtils.isEmpty(channels)) {
|
||||
LOGGER.error("Failed to rollback SAGA global[" + globalSession.getXid() + ", RM channels is empty.");
|
||||
return BranchStatus.PhaseTwo_RollbackFailed_Retryable;
|
||||
}
|
||||
String sagaResourceId = getSagaResourceId(globalSession);
|
||||
Channel sagaChannel = channels.get(sagaResourceId);
|
||||
if (sagaChannel == null) {
|
||||
LOGGER.error("Failed to rollback SAGA global[" + globalSession.getXid()
|
||||
+ ", cannot find channel by resourceId[" + sagaResourceId + "]");
|
||||
return BranchStatus.PhaseTwo_RollbackFailed_Retryable;
|
||||
}
|
||||
BranchRollbackResponse response = (BranchRollbackResponse) remotingServer.sendSyncRequest(sagaChannel, request);
|
||||
return response.getBranchStatus();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean doGlobalCommit(GlobalSession globalSession, boolean retrying) throws TransactionException {
|
||||
try {
|
||||
BranchStatus branchStatus = branchCommit(globalSession, SessionHelper.newBranch(BranchType.SAGA,
|
||||
globalSession.getXid(), -1, getSagaResourceId(globalSession), globalSession.getStatus().name()));
|
||||
@Override
|
||||
public boolean doGlobalCommit(GlobalSession globalSession, boolean retrying) throws TransactionException {
|
||||
try {
|
||||
BranchStatus branchStatus = branchCommit(globalSession, SessionHelper.newBranch(BranchType.SAGA,
|
||||
globalSession.getXid(), -1, getSagaResourceId(globalSession), globalSession.getStatus().name()));
|
||||
|
||||
switch (branchStatus) {
|
||||
case PhaseTwo_Committed:
|
||||
removeAllBranches(globalSession);
|
||||
LOGGER.info("Successfully committed SAGA global[" + globalSession.getXid() + "]");
|
||||
break;
|
||||
case PhaseTwo_Rollbacked:
|
||||
LOGGER.info("Successfully rollbacked SAGA global[" + globalSession.getXid() + "]");
|
||||
removeAllBranches(globalSession);
|
||||
SessionHelper.endRollbacked(globalSession);
|
||||
return false;
|
||||
case PhaseTwo_RollbackFailed_Retryable:
|
||||
LOGGER.error("By [{}], failed to rollback SAGA global [{}], will retry later.", branchStatus,
|
||||
globalSession.getXid());
|
||||
SessionHolder.getRetryCommittingSessionManager().removeGlobalSession(globalSession);
|
||||
globalSession.queueToRetryRollback();
|
||||
return false;
|
||||
case PhaseOne_Failed:
|
||||
LOGGER.error("By [{}], finish SAGA global [{}]", branchStatus, globalSession.getXid());
|
||||
removeAllBranches(globalSession);
|
||||
globalSession.changeStatus(GlobalStatus.Finished);
|
||||
globalSession.end();
|
||||
return false;
|
||||
case PhaseTwo_CommitFailed_Unretryable:
|
||||
if (globalSession.canBeCommittedAsync()) {
|
||||
LOGGER.error("By [{}], failed to commit SAGA global [{}]", branchStatus,
|
||||
globalSession.getXid());
|
||||
break;
|
||||
}
|
||||
else {
|
||||
SessionHelper.endCommitFailed(globalSession);
|
||||
LOGGER.error("Finally, failed to commit SAGA global[{}]", globalSession.getXid());
|
||||
return false;
|
||||
}
|
||||
default:
|
||||
if (!retrying) {
|
||||
globalSession.queueToRetryCommit();
|
||||
return false;
|
||||
}
|
||||
else {
|
||||
LOGGER.error("Failed to commit SAGA global[{}], will retry later.", globalSession.getXid());
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex) {
|
||||
LOGGER.error("Failed to commit global[" + globalSession.getXid() + "]", ex);
|
||||
switch (branchStatus) {
|
||||
case PhaseTwo_Committed:
|
||||
SessionHelper.removeAllBranch(globalSession, !retrying);
|
||||
LOGGER.info("Successfully committed SAGA global[" + globalSession.getXid() + "]");
|
||||
break;
|
||||
case PhaseTwo_Rollbacked:
|
||||
LOGGER.info("Successfully rollbacked SAGA global[" + globalSession.getXid() + "]");
|
||||
SessionHelper.removeAllBranch(globalSession, !retrying);
|
||||
SessionHelper.endRollbacked(globalSession, retrying);
|
||||
return false;
|
||||
case PhaseTwo_RollbackFailed_Retryable:
|
||||
LOGGER.error("By [{}], failed to rollback SAGA global [{}], will retry later.", branchStatus,
|
||||
globalSession.getXid());
|
||||
SessionHolder.getRetryCommittingSessionManager().removeGlobalSession(globalSession);
|
||||
globalSession.queueToRetryRollback();
|
||||
return false;
|
||||
case PhaseOne_Failed:
|
||||
LOGGER.error("By [{}], finish SAGA global [{}]", branchStatus, globalSession.getXid());
|
||||
SessionHelper.removeAllBranch(globalSession, !retrying);
|
||||
globalSession.changeGlobalStatus(GlobalStatus.Finished);
|
||||
globalSession.end();
|
||||
return false;
|
||||
case PhaseTwo_CommitFailed_Unretryable:
|
||||
if (globalSession.canBeCommittedAsync()) {
|
||||
LOGGER.error("By [{}], failed to commit SAGA global [{}]", branchStatus,
|
||||
globalSession.getXid());
|
||||
break;
|
||||
} else {
|
||||
SessionHelper.endCommitFailed(globalSession,retrying);
|
||||
LOGGER.error("Finally, failed to commit SAGA global[{}]", globalSession.getXid());
|
||||
return false;
|
||||
}
|
||||
default:
|
||||
if (!retrying) {
|
||||
globalSession.queueToRetryCommit();
|
||||
} else {
|
||||
LOGGER.error("Failed to commit SAGA global[{}], will retry later.", globalSession.getXid());
|
||||
}
|
||||
return false;
|
||||
}
|
||||
} catch (Exception ex) {
|
||||
LOGGER.error("Failed to commit global[" + globalSession.getXid() + "]", ex);
|
||||
|
||||
if (!retrying) {
|
||||
globalSession.queueToRetryRollback();
|
||||
}
|
||||
throw new TransactionException(ex);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
if (!retrying) {
|
||||
globalSession.queueToRetryRollback();
|
||||
}
|
||||
throw new TransactionException(ex);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean doGlobalRollback(GlobalSession globalSession, boolean retrying) throws TransactionException {
|
||||
try {
|
||||
BranchStatus branchStatus = branchRollback(globalSession, SessionHelper.newBranch(BranchType.SAGA,
|
||||
globalSession.getXid(), -1, getSagaResourceId(globalSession), globalSession.getStatus().name()));
|
||||
@Override
|
||||
public boolean doGlobalRollback(GlobalSession globalSession, boolean retrying) throws TransactionException {
|
||||
try {
|
||||
BranchStatus branchStatus = branchRollback(globalSession, SessionHelper.newBranch(BranchType.SAGA,
|
||||
globalSession.getXid(), -1, getSagaResourceId(globalSession), globalSession.getStatus().name()));
|
||||
|
||||
switch (branchStatus) {
|
||||
case PhaseTwo_Rollbacked:
|
||||
removeAllBranches(globalSession);
|
||||
LOGGER.info("Successfully rollbacked SAGA global[{}]", globalSession.getXid());
|
||||
break;
|
||||
case PhaseTwo_RollbackFailed_Unretryable:
|
||||
SessionHelper.endRollbackFailed(globalSession);
|
||||
LOGGER.error("Failed to rollback SAGA global[{}]", globalSession.getXid());
|
||||
return false;
|
||||
case PhaseTwo_CommitFailed_Retryable:
|
||||
SessionHolder.getRetryRollbackingSessionManager().removeGlobalSession(globalSession);
|
||||
globalSession.queueToRetryCommit();
|
||||
LOGGER.warn("Retry by custom recover strategy [Forward] on timeout, SAGA global[{}]",
|
||||
globalSession.getXid());
|
||||
return false;
|
||||
default:
|
||||
LOGGER.error("Failed to rollback SAGA global[{}]", globalSession.getXid());
|
||||
if (!retrying) {
|
||||
globalSession.queueToRetryRollback();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
catch (Exception ex) {
|
||||
LOGGER.error("Failed to rollback global[{}]", globalSession.getXid(), ex);
|
||||
if (!retrying) {
|
||||
globalSession.queueToRetryRollback();
|
||||
}
|
||||
throw new TransactionException(ex);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
switch (branchStatus) {
|
||||
case PhaseTwo_Rollbacked:
|
||||
SessionHelper.removeAllBranch(globalSession, !retrying);
|
||||
LOGGER.info("Successfully rollbacked SAGA global[{}]",globalSession.getXid());
|
||||
break;
|
||||
case PhaseTwo_RollbackFailed_Unretryable:
|
||||
SessionHelper.endRollbackFailed(globalSession, retrying);
|
||||
LOGGER.error("Failed to rollback SAGA global[{}]", globalSession.getXid());
|
||||
return false;
|
||||
case PhaseTwo_CommitFailed_Retryable:
|
||||
SessionHolder.getRetryRollbackingSessionManager().removeGlobalSession(globalSession);
|
||||
globalSession.queueToRetryCommit();
|
||||
LOGGER.warn("Retry by custom recover strategy [Forward] on timeout, SAGA global[{}]", globalSession.getXid());
|
||||
return false;
|
||||
default:
|
||||
LOGGER.error("Failed to rollback SAGA global[{}]", globalSession.getXid());
|
||||
if (!retrying) {
|
||||
globalSession.queueToRetryRollback();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
} catch (Exception ex) {
|
||||
LOGGER.error("Failed to rollback global[{}]", globalSession.getXid(), ex);
|
||||
if (!retrying) {
|
||||
globalSession.queueToRetryRollback();
|
||||
}
|
||||
throw new TransactionException(ex);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void doGlobalReport(GlobalSession globalSession, String xid, GlobalStatus globalStatus)
|
||||
throws TransactionException {
|
||||
if (GlobalStatus.Committed.equals(globalStatus)) {
|
||||
removeAllBranches(globalSession);
|
||||
SessionHelper.endCommitted(globalSession);
|
||||
LOGGER.info("Global[{}] committed", globalSession.getXid());
|
||||
}
|
||||
else if (GlobalStatus.Rollbacked.equals(globalStatus) || GlobalStatus.Finished.equals(globalStatus)) {
|
||||
removeAllBranches(globalSession);
|
||||
SessionHelper.endRollbacked(globalSession);
|
||||
LOGGER.info("Global[{}] rollbacked", globalSession.getXid());
|
||||
}
|
||||
else {
|
||||
globalSession.changeStatus(globalStatus);
|
||||
LOGGER.info("Global[{}] reporting is successfully done. status[{}]", globalSession.getXid(),
|
||||
globalSession.getStatus());
|
||||
@Override
|
||||
public void doGlobalReport(GlobalSession globalSession, String xid, GlobalStatus globalStatus) throws TransactionException {
|
||||
if (GlobalStatus.Committed.equals(globalStatus)) {
|
||||
SessionHelper.removeAllBranch(globalSession, false);
|
||||
SessionHelper.endCommitted(globalSession,false);
|
||||
LOGGER.info("Global[{}] committed", globalSession.getXid());
|
||||
} else if (GlobalStatus.Rollbacked.equals(globalStatus)
|
||||
|| GlobalStatus.Finished.equals(globalStatus)) {
|
||||
SessionHelper.removeAllBranch(globalSession, false);
|
||||
SessionHelper.endRollbacked(globalSession, false);
|
||||
LOGGER.info("Global[{}] rollbacked", globalSession.getXid());
|
||||
} else {
|
||||
globalSession.changeGlobalStatus(globalStatus);
|
||||
LOGGER.info("Global[{}] reporting is successfully done. status[{}]", globalSession.getXid(), globalSession.getStatus());
|
||||
|
||||
if (GlobalStatus.RollbackRetrying.equals(globalStatus)
|
||||
|| GlobalStatus.TimeoutRollbackRetrying.equals(globalStatus)
|
||||
|| GlobalStatus.UnKnown.equals(globalStatus)) {
|
||||
globalSession.queueToRetryRollback();
|
||||
LOGGER.info("Global[{}] will retry rollback", globalSession.getXid());
|
||||
}
|
||||
else if (GlobalStatus.CommitRetrying.equals(globalStatus)) {
|
||||
globalSession.queueToRetryCommit();
|
||||
LOGGER.info("Global[{}] will retry commit", globalSession.getXid());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* remove all branches
|
||||
* @param globalSession the globalSession
|
||||
* @throws TransactionException the TransactionException
|
||||
*/
|
||||
private void removeAllBranches(GlobalSession globalSession) throws TransactionException {
|
||||
ArrayList<BranchSession> branchSessions = globalSession.getSortedBranches();
|
||||
for (BranchSession branchSession : branchSessions) {
|
||||
globalSession.removeBranch(branchSession);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* get saga ResourceId
|
||||
* @param globalSession the globalSession
|
||||
* @return sagaResourceId
|
||||
*/
|
||||
private String getSagaResourceId(GlobalSession globalSession) {
|
||||
return globalSession.getApplicationId() + "#" + globalSession.getTransactionServiceGroup();
|
||||
}
|
||||
if (GlobalStatus.RollbackRetrying.equals(globalStatus)
|
||||
|| GlobalStatus.TimeoutRollbackRetrying.equals(globalStatus)
|
||||
|| GlobalStatus.UnKnown.equals(globalStatus)) {
|
||||
globalSession.queueToRetryRollback();
|
||||
LOGGER.info("Global[{}] will retry rollback", globalSession.getXid());
|
||||
} else if (GlobalStatus.CommitRetrying.equals(globalStatus)) {
|
||||
globalSession.queueToRetryCommit();
|
||||
LOGGER.info("Global[{}] will retry commit", globalSession.getXid());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* get saga ResourceId
|
||||
*
|
||||
* @param globalSession the globalSession
|
||||
* @return sagaResourceId
|
||||
*/
|
||||
private String getSagaResourceId(GlobalSession globalSession) {
|
||||
return globalSession.getApplicationId() + "#" + globalSession.getTransactionServiceGroup();
|
||||
}
|
||||
}
|
||||
+7
-8
@@ -26,13 +26,12 @@ import io.seata.server.coordinator.AbstractCore;
|
||||
*/
|
||||
public class TccCore extends AbstractCore {
|
||||
|
||||
public TccCore(RemotingServer remotingServer) {
|
||||
super(remotingServer);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BranchType getHandleBranchType() {
|
||||
return BranchType.TCC;
|
||||
}
|
||||
public TccCore(RemotingServer remotingServer) {
|
||||
super(remotingServer);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BranchType getHandleBranchType() {
|
||||
return BranchType.TCC;
|
||||
}
|
||||
}
|
||||
+14
-15
@@ -28,22 +28,21 @@ import io.seata.server.coordinator.AbstractCore;
|
||||
*/
|
||||
public class XACore extends AbstractCore {
|
||||
|
||||
public XACore(RemotingServer remotingServer) {
|
||||
super(remotingServer);
|
||||
}
|
||||
public XACore(RemotingServer remotingServer) {
|
||||
super(remotingServer);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BranchType getHandleBranchType() {
|
||||
return BranchType.XA;
|
||||
}
|
||||
@Override
|
||||
public BranchType getHandleBranchType() {
|
||||
return BranchType.XA;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void branchReport(BranchType branchType, String xid, long branchId, BranchStatus status,
|
||||
String applicationData) throws TransactionException {
|
||||
super.branchReport(branchType, xid, branchId, status, applicationData);
|
||||
if (BranchStatus.PhaseOne_Failed == status) {
|
||||
|
||||
}
|
||||
}
|
||||
@Override
|
||||
public void branchReport(BranchType branchType, String xid, long branchId, BranchStatus status,
|
||||
String applicationData) throws TransactionException {
|
||||
super.branchReport(branchType, xid, branchId, status, applicationData);
|
||||
if (BranchStatus.PhaseOne_Failed == status) {
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user