Skip to content

Commit 260ea0a

Browse files
committed
tx:txc upgrade
1 parent bd76289 commit 260ea0a

10 files changed

Lines changed: 46 additions & 27 deletions

File tree

tx-client/src/main/java/com/codingapi/tx/client/aspect/weave/DTXLogicWeaver.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ public Object runTransaction(DTXInfo dtxInfo, BusinessCallback business) throws
6969
return transactionServiceExecutor.transactionRunning(info);
7070
} finally {
7171
synchronized (DTXLocal.cur()) {
72-
DTXLocal.cur().notify();
72+
DTXLocal.cur().notifyAll();
7373
}
7474
DTXLocal.makeNeverAppeared();
7575
log.info("tx-unit end------>");

tx-client/src/main/java/com/codingapi/tx/client/spi/message/lcn/LcnTransactionCleanService.java renamed to tx-client/src/main/java/com/codingapi/tx/client/spi/transaction/lcn/control/LcnTransactionCleanService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.codingapi.tx.client.spi.message.lcn;
1+
package com.codingapi.tx.client.spi.transaction.lcn.control;
22

33
import com.codingapi.tx.client.spi.transaction.lcn.resource.LCNConnectionProxy;
44
import com.codingapi.tx.commons.exception.TransactionClearException;

tx-client/src/main/java/com/codingapi/tx/client/spi/message/tcc/TccTransactionCleanService.java renamed to tx-client/src/main/java/com/codingapi/tx/client/spi/transaction/tcc/control/TccTransactionCleanService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.codingapi.tx.client.spi.message.tcc;
1+
package com.codingapi.tx.client.spi.transaction.tcc.control;
22

33
import com.codingapi.tx.client.bean.DTXLocal;
44
import com.codingapi.tx.client.spi.transaction.tcc.control.UnitTCCInfoMap;

tx-client/src/main/java/com/codingapi/tx/client/spi/transaction/txc/control/TxcRunningTransaction.java

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -78,15 +78,7 @@ public void onBusinessCodeSuccess(TxTransactionInfo info, Object result) throws
7878
txcService.writeUndoLog(
7979
info.getGroupId(), info.getUnitId(), (RollbackInfo) DTXLocal.cur().getAttachment());
8080
} catch (TxcLogicException e) {
81-
//执行回滚处理。(启用备用连接池的方式)
82-
try {
83-
RollbackInfo rollbackInfo = (RollbackInfo) DTXLocal.cur().getAttachment();
84-
txLogger.trace(info.getGroupId(), info.getUnitId(), "txc", "exception rollbackInfo sql " + rollbackInfo.toString());
85-
txcService.undoRollbackInfo(rollbackInfo);
86-
} catch (TxcLogicException e1) {
87-
txMangerReporter.reportTxcRollbackException(info.getGroupId(), info.getUnitId());
88-
}
89-
throw new TxClientException("txc rollback fail.");
81+
throw new TxClientException("txc write undo log fail.");
9082
}
9183
// 加入事务组
9284
transactionControlTemplate.joinGroup(info.getGroupId(), info.getUnitId(), info.getTransactionType(),

tx-client/src/main/java/com/codingapi/tx/client/spi/message/txc/TxcTransactionCleanService.java renamed to tx-client/src/main/java/com/codingapi/tx/client/spi/transaction/txc/control/TxcTransactionCleanService.java

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,16 @@
1-
package com.codingapi.tx.client.spi.message.txc;
1+
package com.codingapi.tx.client.spi.transaction.txc.control;
22

3+
import com.codingapi.tx.client.bean.DTXLocal;
34
import com.codingapi.tx.client.spi.transaction.txc.resource.def.TxcService;
4-
import com.codingapi.tx.commons.exception.TransactionClearException;
5+
import com.codingapi.tx.client.spi.transaction.txc.resource.def.bean.RollbackInfo;
56
import com.codingapi.tx.client.support.common.TransactionCleanService;
7+
import com.codingapi.tx.commons.exception.TransactionClearException;
68
import com.codingapi.tx.commons.exception.TxcLogicException;
7-
import com.codingapi.tx.logger.TxLogger;
89
import lombok.extern.slf4j.Slf4j;
910
import org.springframework.beans.factory.annotation.Autowired;
1011
import org.springframework.stereotype.Component;
1112

12-
import java.sql.SQLException;
13+
import java.util.Objects;
1314

1415
/**
1516
* Description:
@@ -31,9 +32,18 @@ public TxcTransactionCleanService(TxcService txcService) {
3132
@Override
3233
public void clear(String groupId, int state, String unitId, String unitType) throws TransactionClearException {
3334
try {
34-
// 若需要回滚读undo_log,进行回滚
35-
if (state != 1 && state != -1) {
36-
txcService.undo(groupId, unitId);
35+
try {
36+
// 若需要回滚读undo_log,进行回滚
37+
if (state != 1 && state != -1) {
38+
txcService.undo(groupId, unitId);
39+
}
40+
} catch (Exception e) {
41+
if (Objects.nonNull(DTXLocal.cur())) {
42+
RollbackInfo rollbackInfo = (RollbackInfo) DTXLocal.cur().getAttachment();
43+
if (Objects.nonNull(rollbackInfo)) {
44+
txcService.undoByRollbackInfo(rollbackInfo);
45+
}
46+
}
3747
}
3848

3949
// 清理TXC

tx-client/src/main/java/com/codingapi/tx/client/spi/transaction/txc/resource/TxcServiceImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -227,7 +227,7 @@ public void undo(String groupId, String unitId) throws TxcLogicException {
227227
}
228228

229229
@Override
230-
public void undoRollbackInfo(RollbackInfo rollbackInfo) throws TxcLogicException {
230+
public void undoByRollbackInfo(RollbackInfo rollbackInfo) throws TxcLogicException {
231231
try {
232232
txcSqlExecutor.undoRollbackInfoSql(rollbackInfo);
233233
} catch (SQLException e) {

tx-client/src/main/java/com/codingapi/tx/client/spi/transaction/txc/resource/def/TxcService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,5 +81,5 @@ public interface TxcService {
8181
*
8282
* @throws TxcLogicException
8383
*/
84-
void undoRollbackInfo(RollbackInfo rollbackInfo) throws TxcLogicException;
84+
void undoByRollbackInfo(RollbackInfo rollbackInfo) throws TxcLogicException;
8585
}

tx-client/src/main/java/com/codingapi/tx/client/support/checking/SimpleDTXChecking.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.codingapi.tx.client.support.checking;
22

33
import com.codingapi.tx.client.aspectlog.AspectLogger;
4+
import com.codingapi.tx.client.bean.DTXLocal;
45
import com.codingapi.tx.client.config.TxClientConfig;
56
import com.codingapi.tx.client.spi.message.RpcClient;
67
import com.codingapi.tx.client.spi.message.dto.MessageDto;
@@ -80,6 +81,13 @@ public void startDelayCheckingAsync(String groupId, String unitId, String transa
8081
txLogger.trace(groupId, unitId, Transactions.TAG_TASK, "start delay checking task");
8182
ScheduledFuture scheduledFuture = scheduledExecutorService.schedule(() -> {
8283
try {
84+
if (Objects.nonNull(DTXLocal.cur())) {
85+
synchronized (DTXLocal.cur()) {
86+
txLogger.trace(groupId, unitId, Transactions.TAG_TASK,
87+
"checking waiting for business code finish.");
88+
DTXLocal.cur().wait();
89+
}
90+
}
8391
String channel = rpcClient.loadRemoteKey();
8492
MessageDto messageDto = rpcClient.request(channel, MessageCreator.askTransactionState(groupId, unitId));
8593
int state = SerializerContext.getInstance().deSerialize(messageDto.getBytes(), Short.class);
@@ -95,7 +103,7 @@ public void startDelayCheckingAsync(String groupId, String unitId, String transa
95103

96104
} catch (RpcException e) {
97105
onAskTransactionStateException(groupId, unitId, transactionType);
98-
} catch (TransactionClearException | SerializerException e) {
106+
} catch (TransactionClearException | SerializerException | InterruptedException e) {
99107
log.error("{} > [transaction state message] error or [clean transaction] error.", transactionType);
100108
}
101109
}, clientConfig.getDtxTime(), TimeUnit.MILLISECONDS);

tx-client/src/main/java/com/codingapi/tx/client/support/common/DefaultNotifiedUnitService.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@
88
import com.codingapi.tx.commons.exception.TransactionClearException;
99
import com.codingapi.tx.commons.exception.TxClientException;
1010
import com.codingapi.tx.client.spi.message.params.NotifyUnitParams;
11+
import com.codingapi.tx.commons.util.Transactions;
12+
import com.codingapi.tx.logger.TxLogger;
13+
import org.springframework.beans.factory.annotation.Autowired;
1114

1215
/**
1316
* Description: 默认RPC命令业务
@@ -19,6 +22,9 @@ public class DefaultNotifiedUnitService implements RpcExecuteService {
1922

2023
private final TransactionCleanTemplate transactionCleanTemplate;
2124

25+
@Autowired
26+
private TxLogger txLogger;
27+
2228

2329
public DefaultNotifiedUnitService(TransactionCleanTemplate transactionCleanTemplate) {
2430
this.transactionCleanTemplate = transactionCleanTemplate;
@@ -27,12 +33,14 @@ public DefaultNotifiedUnitService(TransactionCleanTemplate transactionCleanTempl
2733
@Override
2834
public Object execute(TransactionCmd transactionCmd) throws TxClientException {
2935
try {
36+
NotifyUnitParams notifyUnitParams = transactionCmd.getMsg().loadData(NotifyUnitParams.class);
3037
if (DTXLocal.cur() != null) {
3138
synchronized (DTXLocal.cur()) {
39+
txLogger.trace(transactionCmd.getGroupId(), notifyUnitParams.getUnitId(), Transactions.TAG_TRANSACTION,
40+
"clean transaction cmd waiting for business code finish.");
3241
DTXLocal.cur().wait();
3342
}
3443
}
35-
NotifyUnitParams notifyUnitParams = transactionCmd.getMsg().loadData(NotifyUnitParams.class);
3644
transactionCleanTemplate.clean(
3745
notifyUnitParams.getGroupId(),
3846
notifyUnitParams.getUnitId(),

tx-client/src/main/java/com/codingapi/tx/client/support/separate/TXLCNTransactionServiceExecutor.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import com.codingapi.tx.client.support.common.TransactionUnitTypeList;
77
import com.codingapi.tx.client.support.common.cache.TransactionAttachmentCache;
88
import com.codingapi.tx.commons.exception.BeforeBusinessException;
9+
import com.codingapi.tx.commons.util.Transactions;
910
import com.codingapi.tx.logger.TxLogger;
1011
import lombok.extern.slf4j.Slf4j;
1112
import org.springframework.beans.factory.annotation.Autowired;
@@ -64,22 +65,22 @@ public Object transactionRunning(TxTransactionInfo info) throws Throwable {
6465

6566
try {
6667
// 5.2 业务执行前
67-
txLogger.trace(info.getGroupId(), info.getUnitId(), "transaction", "pre service business code");
68+
txLogger.trace(info.getGroupId(), info.getUnitId(), Transactions.TAG_TRANSACTION, "pre service business code");
6869
lcnTransactionControl.preBusinessCode(info);
6970
// 5.3 执行业务
70-
txLogger.trace(info.getGroupId(), info.getUnitId(), "transaction", "do service business code");
71+
txLogger.trace(info.getGroupId(), info.getUnitId(), Transactions.TAG_TRANSACTION, "do service business code");
7172
Object result = lcnTransactionControl.doBusinessCode(info);
7273

7374
// 5.4 业务执行成功
74-
txLogger.trace(info.getGroupId(), info.getUnitId(), "transaction", "service business success");
75+
txLogger.trace(info.getGroupId(), info.getUnitId(), Transactions.TAG_TRANSACTION, "service business success");
7576
lcnTransactionControl.onBusinessCodeSuccess(info, result);
7677
return result;
7778
} catch (BeforeBusinessException e) {
7879
log.error("business", e);
7980
throw e;
8081
} catch (Throwable e) {
8182
// 5.5 业务执行失败
82-
txLogger.trace(info.getGroupId(), info.getUnitId(), "transaction", "business code error");
83+
txLogger.trace(info.getGroupId(), info.getUnitId(), Transactions.TAG_TRANSACTION, "business code error");
8384
lcnTransactionControl.onBusinessCodeError(info, e);
8485
throw e;
8586
} finally {

0 commit comments

Comments
 (0)