use of io.seata.server.lock.file.FileLockManagerForTest in project seata by seata.
the class SessionStoreTest method clean.
/**
* Clean.
*
* @throws Exception the exception
*/
@BeforeEach
public void clean() throws Exception {
String sessionStorePath = CONFIG.getConfig(ConfigurationKeys.STORE_FILE_DIR);
File rootDataFile = new File(sessionStorePath + File.separator + SessionHolder.ROOT_SESSION_MANAGER_NAME);
File rootDataFileHis = new File(sessionStorePath + File.separator + SessionHolder.ROOT_SESSION_MANAGER_NAME + ".1");
if (rootDataFile.exists()) {
rootDataFile.delete();
}
if (rootDataFileHis.exists()) {
rootDataFileHis.delete();
}
LockManager lockManager = new FileLockManagerForTest();
lockManager.cleanAllLocks();
}
use of io.seata.server.lock.file.FileLockManagerForTest in project seata by seata.
the class SessionStoreTest method testRestoredFromFileRollbackRetry.
/**
* Test restored from file rollback retry.
*
* @throws Exception the exception
*/
@Test
public void testRestoredFromFileRollbackRetry() throws Exception {
try {
SessionHolder.init("file");
GlobalSession globalSession = new GlobalSession("demo-app", "my_test_tx_group", "test", 6000);
String xid = XID.generateXID(globalSession.getTransactionId());
globalSession.setXid(xid);
globalSession.addSessionLifecycleListener(SessionHolder.getRootSessionManager());
globalSession.begin();
BranchSession branchSession1 = SessionHelper.newBranchByGlobal(globalSession, BranchType.AT, RESOURCE_ID, "ta:1", "xxx");
branchSession1.lock();
globalSession.addBranch(branchSession1);
LockManager lockManager = new FileLockManagerForTest();
String otherXID = XID.generateXID(0L);
Assertions.assertFalse(lockManager.isLockable(otherXID, RESOURCE_ID, "ta:1"));
globalSession.changeStatus(GlobalStatus.Rollbacking);
globalSession.changeBranchStatus(branchSession1, BranchStatus.PhaseTwo_RollbackFailed_Retryable);
globalSession.changeStatus(GlobalStatus.RollbackRetrying);
lockManager.cleanAllLocks();
Assertions.assertTrue(lockManager.isLockable(otherXID, RESOURCE_ID, "ta:1"));
// Re-init SessionHolder: restore sessions from file
SessionHolder.init("file");
long tid = globalSession.getTransactionId();
GlobalSession reloadSession = SessionHolder.findGlobalSession(globalSession.getXid());
Assertions.assertEquals(reloadSession.getStatus(), GlobalStatus.RollbackRetrying);
GlobalSession sessionInRetryRollbackingQueue = SessionHolder.getRetryRollbackingSessionManager().findGlobalSession(globalSession.getXid());
Assertions.assertTrue(reloadSession == sessionInRetryRollbackingQueue);
BranchSession reloadBranchSession = reloadSession.getBranch(branchSession1.getBranchId());
Assertions.assertEquals(reloadBranchSession.getStatus(), BranchStatus.PhaseTwo_RollbackFailed_Retryable);
// Lock is held by session in RollbackRetrying status
Assertions.assertFalse(lockManager.isLockable(otherXID, RESOURCE_ID, "ta:1"));
// clear
reloadSession.addSessionLifecycleListener(SessionHolder.getRootSessionManager());
reloadSession.end();
} finally {
SessionHolder.destroy();
}
}
use of io.seata.server.lock.file.FileLockManagerForTest in project seata by seata.
the class SessionStoreTest method testRestoredFromFileRollbackFailed.
/**
* Test restored from file rollback failed.
*
* @throws Exception the exception
*/
@Test
public void testRestoredFromFileRollbackFailed() throws Exception {
try {
SessionHolder.init("file");
GlobalSession globalSession = new GlobalSession("demo-app", "my_test_tx_group", "test", 6000);
String xid = XID.generateXID(globalSession.getTransactionId());
globalSession.setXid(xid);
globalSession.addSessionLifecycleListener(SessionHolder.getRootSessionManager());
globalSession.begin();
BranchSession branchSession1 = SessionHelper.newBranchByGlobal(globalSession, BranchType.AT, RESOURCE_ID, "ta:1", "xxx");
branchSession1.lock();
globalSession.addBranch(branchSession1);
LockManager lockManager = new FileLockManagerForTest();
String otherXID = XID.generateXID(0L);
Assertions.assertFalse(lockManager.isLockable(otherXID, RESOURCE_ID, "ta:1"));
globalSession.changeStatus(GlobalStatus.Rollbacking);
globalSession.changeBranchStatus(branchSession1, BranchStatus.PhaseTwo_CommitFailed_Unretryable);
SessionHelper.endRollbackFailed(globalSession);
// Lock is released.
Assertions.assertTrue(lockManager.isLockable(otherXID, RESOURCE_ID, "ta:1"));
lockManager.cleanAllLocks();
Assertions.assertTrue(lockManager.isLockable(otherXID, RESOURCE_ID, "ta:1"));
// Re-init SessionHolder: restore sessions from file
SessionHolder.init("file");
long tid = globalSession.getTransactionId();
GlobalSession reloadSession = SessionHolder.findGlobalSession(globalSession.getXid());
Assertions.assertNull(reloadSession);
} finally {
SessionHolder.destroy();
}
}
Aggregations