use of io.seata.core.exception.TransactionException in project seata by seata.
the class WriteStoreTest method main.
/**
* The entry point of application.
*
* @param args the input arguments
* @throws InterruptedException the interrupted exception
* @throws IOException the io exception
*/
public static void main(String[] args) throws InterruptedException, IOException {
TransactionStoreManager transactionStoreManager = new FileTransactionStoreManager("~/Documents/test/data", new SessionManager() {
@Override
public void destroy() {
}
@Override
public void addGlobalSession(GlobalSession session) throws TransactionException {
}
@Override
public GlobalSession findGlobalSession(String xid) {
return null;
}
@Override
public GlobalSession findGlobalSession(String xid, boolean withBranchSessions) {
return null;
}
@Override
public void updateGlobalSessionStatus(GlobalSession session, GlobalStatus status) throws TransactionException {
}
@Override
public void removeGlobalSession(GlobalSession session) throws TransactionException {
}
@Override
public void addBranchSession(GlobalSession globalSession, BranchSession session) throws TransactionException {
}
@Override
public void updateBranchSessionStatus(BranchSession session, BranchStatus status) throws TransactionException {
}
@Override
public void removeBranchSession(GlobalSession globalSession, BranchSession session) throws TransactionException {
}
@Override
public Collection<GlobalSession> allSessions() {
return null;
}
@Override
public List<GlobalSession> findGlobalSessions(SessionCondition condition) {
List<GlobalSession> globalSessions = new ArrayList<>();
int begin = 10000;
int num = 1000;
for (int i = begin; i < begin + num; i++) {
BranchSession branchSession1 = new BranchSession();
branchSession1.setTransactionId(i);
branchSession1.setBranchId(begin + num + (i - begin) * 2);
branchSession1.setResourceId("mockDbkeY1");
BranchSession branchSession2 = new BranchSession();
branchSession2.setTransactionId(i);
branchSession2.setBranchId(begin + num + (i - begin) * 2 + 1);
branchSession2.setResourceId("mockDbkeY2");
GlobalSession globalSession = new GlobalSession(appname, vgroup, instname, 60000);
try {
globalSession.add(branchSession1);
globalSession.add(branchSession2);
globalSessions.add(globalSession);
} catch (Exception exx) {
}
}
return globalSessions;
}
@Override
public <T> T lockAndExecute(GlobalSession globalSession, GlobalSession.LockCallable<T> lockCallable) throws TransactionException {
return null;
}
@Override
public void onBegin(GlobalSession globalSession) throws TransactionException {
}
@Override
public void onStatusChange(GlobalSession globalSession, GlobalStatus status) throws TransactionException {
}
@Override
public void onBranchStatusChange(GlobalSession globalSession, BranchSession branchSession, BranchStatus status) throws TransactionException {
}
@Override
public void onAddBranch(GlobalSession globalSession, BranchSession branchSession) throws TransactionException {
}
@Override
public void onRemoveBranch(GlobalSession globalSession, BranchSession branchSession) throws TransactionException {
}
@Override
public void onClose(GlobalSession globalSession) throws TransactionException {
}
@Override
public void onEnd(GlobalSession globalSession) throws TransactionException {
}
});
long beginWriteMills = System.currentTimeMillis();
write(transactionStoreManager);
long endWriteMills = System.currentTimeMillis();
Thread.sleep(10 * 1000);
long beginReadMills = System.currentTimeMillis();
Map<SessionStorable, LogOperation> resultMap = readAll(transactionStoreManager);
long endReadMills = System.currentTimeMillis();
if ((resultMap.size() % (65535)) % 3000 == 0) {
System.out.print("check success");
} else {
System.out.print("check failed");
}
System.out.print("write cost:" + (endWriteMills - beginWriteMills) + ",read cost:" + (endReadMills - beginReadMills));
}
use of io.seata.core.exception.TransactionException in project seata by seata.
the class DefaultCoordinatorTest method branchRollback.
@Disabled
@ParameterizedTest
@MethodSource("xidAndBranchIdProviderForRollback")
public void branchRollback(String xid, Long branchId) {
BranchStatus result = null;
GlobalSession globalSession = SessionHolder.findGlobalSession(xid);
try {
result = core.branchRollback(globalSession, globalSession.getBranch(branchId));
} catch (TransactionException e) {
Assertions.fail(e.getMessage());
}
Assertions.assertEquals(result, BranchStatus.PhaseTwo_Rollbacked);
}
use of io.seata.core.exception.TransactionException in project seata by seata.
the class WriteStoreMultithreadTest method main.
public static void main(String[] args) throws Exception {
TransactionStoreManager transactionStoreManager = new FileTransactionStoreManager("data", new SessionManager() {
@Override
public void destroy() {
}
@Override
public void addGlobalSession(GlobalSession session) throws TransactionException {
}
@Override
public GlobalSession findGlobalSession(String xid) {
return null;
}
@Override
public GlobalSession findGlobalSession(String xid, boolean withBranchSessions) {
return null;
}
@Override
public void updateGlobalSessionStatus(GlobalSession session, GlobalStatus status) throws TransactionException {
}
@Override
public void removeGlobalSession(GlobalSession session) throws TransactionException {
}
@Override
public void addBranchSession(GlobalSession globalSession, BranchSession session) throws TransactionException {
}
@Override
public void updateBranchSessionStatus(BranchSession session, BranchStatus status) throws TransactionException {
}
@Override
public void removeBranchSession(GlobalSession globalSession, BranchSession session) throws TransactionException {
}
@Override
public Collection<GlobalSession> allSessions() {
return null;
}
@Override
public List<GlobalSession> findGlobalSessions(SessionCondition condition) {
List<GlobalSession> globalSessions = new ArrayList<>();
int begin = 10000;
int num = 1000;
for (int i = begin; i < begin + num; i++) {
BranchSession branchSession1 = new BranchSession();
branchSession1.setTransactionId(i);
branchSession1.setBranchId(begin + num + (i - begin) * 2);
branchSession1.setResourceId("mockDbkeY1");
BranchSession branchSession2 = new BranchSession();
branchSession2.setTransactionId(i);
branchSession2.setBranchId(begin + num + (i - begin) * 2 + 1);
branchSession2.setResourceId("mockDbkeY2");
GlobalSession globalSession = new GlobalSession(appname, vgroup, instname, 60000);
try {
globalSession.add(branchSession1);
globalSession.add(branchSession2);
globalSessions.add(globalSession);
} catch (Exception exx) {
}
}
return globalSessions;
}
@Override
public <T> T lockAndExecute(GlobalSession globalSession, GlobalSession.LockCallable<T> lockCallable) throws TransactionException {
return null;
}
@Override
public void onBegin(GlobalSession globalSession) throws TransactionException {
}
@Override
public void onStatusChange(GlobalSession globalSession, GlobalStatus status) throws TransactionException {
}
@Override
public void onBranchStatusChange(GlobalSession globalSession, BranchSession branchSession, BranchStatus status) throws TransactionException {
}
@Override
public void onAddBranch(GlobalSession globalSession, BranchSession branchSession) throws TransactionException {
}
@Override
public void onRemoveBranch(GlobalSession globalSession, BranchSession branchSession) throws TransactionException {
}
@Override
public void onClose(GlobalSession globalSession) throws TransactionException {
}
@Override
public void onEnd(GlobalSession globalSession) throws TransactionException {
}
});
long beginWriteMills = System.currentTimeMillis();
for (int i = 0; i < threadNum; i++) {
final int threadNo = i;
Thread thread = new Thread(() -> {
write(transactionStoreManager, threadNo);
});
thread.start();
}
countDownLatch.await();
long endWriteMills = System.currentTimeMillis();
System.out.println("thread nums:" + threadNum + ", per_thread_trx_num:" + per_thread_trx_num + " ,cost" + (endWriteMills - beginWriteMills));
}
use of io.seata.core.exception.TransactionException in project seata by seata.
the class LockManagerTest method concurrentUseAbilityTest.
/**
* Make sure two concurrent branchSession register process with different row key list, at least one process could
* success and only one process could success.
*
* @param branchSession1 the branch session 1
* @param branchSession2 the branch session 2
* @throws Exception the exception
*/
@ParameterizedTest
@MethodSource("deadlockBranchSessionsProvider")
public void concurrentUseAbilityTest(BranchSession branchSession1, BranchSession branchSession2) throws Exception {
LockManager lockManager = new FileLockManagerForTest();
try {
final AtomicBoolean first = new AtomicBoolean();
final AtomicBoolean second = new AtomicBoolean();
CountDownLatch countDownLatch = new CountDownLatch(2);
new Thread(() -> {
try {
first.set(lockManager.acquireLock(branchSession1));
} catch (TransactionException e) {
e.printStackTrace();
} finally {
countDownLatch.countDown();
}
}).start();
new Thread(() -> {
try {
second.set(lockManager.acquireLock(branchSession2));
} catch (TransactionException e) {
e.printStackTrace();
} finally {
countDownLatch.countDown();
}
}).start();
// Assume execute more than 5 seconds means deadlock happened.
if (countDownLatch.await(5, TimeUnit.SECONDS)) {
Assertions.assertTrue(!first.get() || !second.get());
}
} finally {
lockManager.releaseLock(branchSession1);
lockManager.releaseLock(branchSession2);
}
}
use of io.seata.core.exception.TransactionException in project seata by seata.
the class LockManagerTest method deadlockTest.
/**
* deadlock test.
*
* @param branchSession1 the branch session 1
* @param branchSession2 the branch session 2
* @throws Exception the exception
*/
@ParameterizedTest
@MethodSource("deadlockBranchSessionsProvider")
public void deadlockTest(BranchSession branchSession1, BranchSession branchSession2) throws Exception {
LockManager lockManager = new FileLockManagerForTest();
try {
CountDownLatch countDownLatch = new CountDownLatch(2);
new Thread(() -> {
try {
lockManager.acquireLock(branchSession1);
} catch (TransactionException e) {
e.printStackTrace();
} finally {
countDownLatch.countDown();
}
}).start();
new Thread(() -> {
try {
lockManager.acquireLock(branchSession2);
} catch (TransactionException e) {
e.printStackTrace();
} finally {
countDownLatch.countDown();
}
}).start();
// Assume execute more than 5 seconds means deadlock happened.
Assertions.assertTrue(countDownLatch.await(5, TimeUnit.SECONDS));
} finally {
lockManager.releaseLock(branchSession1);
lockManager.releaseLock(branchSession2);
}
}
Aggregations