| package holder |
| |
| import ( |
| "errors" |
| "github.com/dk-lockdown/seata-golang/logging" |
| "github.com/dk-lockdown/seata-golang/meta" |
| "github.com/dk-lockdown/seata-golang/tc/model" |
| "github.com/dk-lockdown/seata-golang/tc/session" |
| ) |
| |
| type ISessionManager interface { |
| /** |
| * Add global session. |
| * |
| * @param session the session |
| * @throws TransactionException the transaction exception |
| */ |
| AddGlobalSession(session *session.GlobalSession) error |
| |
| /** |
| * Find global session global session. |
| * |
| * @param xid the xid |
| * @return the global session |
| */ |
| FindGlobalSession(xid string) *session.GlobalSession |
| |
| /** |
| * Find global session global session. |
| * |
| * @param xid the xid |
| * @param withBranchSessions the withBranchSessions |
| * @return the global session |
| */ |
| FindGlobalSessionWithBranchSessions(xid string, withBranchSessions bool) *session.GlobalSession |
| |
| /** |
| * Update global session status. |
| * |
| * @param session the session |
| * @param status the status |
| * @throws TransactionException the transaction exception |
| */ |
| UpdateGlobalSessionStatus(session *session.GlobalSession, status meta.GlobalStatus) error |
| |
| /** |
| * Remove global session. |
| * |
| * @param session the session |
| * @throws TransactionException the transaction exception |
| */ |
| RemoveGlobalSession(session *session.GlobalSession) error |
| |
| /** |
| * Add branch session. |
| * |
| * @param globalSession the global session |
| * @param session the session |
| * @throws TransactionException the transaction exception |
| */ |
| AddBranchSession(globalSession *session.GlobalSession, session *session.BranchSession) error |
| |
| /** |
| * Update branch session status. |
| * |
| * @param session the session |
| * @param status the status |
| * @throws TransactionException the transaction exception |
| */ |
| UpdateBranchSessionStatus(session *session.BranchSession, status meta.BranchStatus) error |
| |
| /** |
| * Remove branch session. |
| * |
| * @param globalSession the global session |
| * @param session the session |
| * @throws TransactionException the transaction exception |
| */ |
| RemoveBranchSession(globalSession *session.GlobalSession, session *session.BranchSession) error |
| |
| /** |
| * All sessions collection. |
| * |
| * @return the collection |
| */ |
| AllSessions() []*session.GlobalSession |
| |
| /** |
| * Find global sessions list. |
| * |
| * @param condition the condition |
| * @return the list |
| */ |
| FindGlobalSessions(condition model.SessionCondition) []*session.GlobalSession |
| } |
| |
| type AbstractSessionManager struct { |
| TransactionStoreManager ITransactionStoreManager |
| Name string |
| } |
| |
| func (sessionManager *AbstractSessionManager) AddGlobalSession(session *session.GlobalSession) error{ |
| logging.Logger.Debugf("MANAGER[%s] SESSION[%v] %s",sessionManager.Name, session, LogOperationGlobalAdd.String()) |
| sessionManager.writeSession(LogOperationGlobalAdd,session) |
| return nil |
| } |
| |
| func (sessionManager *AbstractSessionManager) UpdateGlobalSessionStatus(session *session.GlobalSession, status meta.GlobalStatus) error { |
| logging.Logger.Debugf("MANAGER[%s] SESSION[%v] %s",sessionManager.Name, session, LogOperationGlobalUpdate.String()) |
| sessionManager.writeSession(LogOperationGlobalUpdate,session) |
| return nil |
| } |
| |
| func (sessionManager *AbstractSessionManager) RemoveGlobalSession(session *session.GlobalSession) error{ |
| logging.Logger.Debugf("MANAGER[%s] SESSION[%v] %s",sessionManager.Name, session, LogOperationGlobalRemove.String()) |
| sessionManager.writeSession(LogOperationGlobalRemove,session) |
| return nil |
| } |
| |
| func (sessionManager *AbstractSessionManager) AddBranchSession(globalSession *session.GlobalSession, session *session.BranchSession) error{ |
| logging.Logger.Debugf("MANAGER[%s] SESSION[%v] %s",sessionManager.Name, session, LogOperationBranchAdd.String()) |
| sessionManager.writeSession(LogOperationBranchAdd,session) |
| return nil |
| } |
| |
| func (sessionManager *AbstractSessionManager) UpdateBranchSessionStatus(session *session.BranchSession, status meta.BranchStatus) error{ |
| logging.Logger.Debugf("MANAGER[%s] SESSION[%v] %s",sessionManager.Name, session, LogOperationBranchUpdate.String()) |
| sessionManager.writeSession(LogOperationBranchUpdate,session) |
| return nil |
| } |
| |
| func (sessionManager *AbstractSessionManager) RemoveBranchSession(globalSession *session.GlobalSession, session *session.BranchSession) error{ |
| logging.Logger.Debugf("MANAGER[%s] SESSION[%v] %s",sessionManager.Name, session, LogOperationBranchRemove.String()) |
| sessionManager.writeSession(LogOperationBranchRemove,session) |
| return nil |
| } |
| |
| |
| func (sessionManager *AbstractSessionManager) writeSession(logOperation LogOperation, sessionStorable session.SessionStorable) error { |
| result := sessionManager.TransactionStoreManager.WriteSession(logOperation,sessionStorable) |
| if !result { |
| if logOperation == LogOperationGlobalAdd { |
| return &meta.TransactionException{ |
| Code: meta.TransactionExceptionCodeFailedWriteSession, |
| Message: "Fail to holder global session", |
| } |
| } |
| if logOperation == LogOperationGlobalUpdate { |
| return &meta.TransactionException{ |
| Code: meta.TransactionExceptionCodeFailedWriteSession, |
| Message: "Fail to update global session", |
| } |
| } |
| if logOperation == LogOperationGlobalRemove { |
| return &meta.TransactionException{ |
| Code: meta.TransactionExceptionCodeFailedWriteSession, |
| Message: "Fail to remove global session", |
| } |
| } |
| if logOperation == LogOperationBranchAdd { |
| return &meta.TransactionException{ |
| Code: meta.TransactionExceptionCodeFailedWriteSession, |
| Message: "Fail to holder branch session", |
| } |
| } |
| if logOperation == LogOperationBranchUpdate { |
| return &meta.TransactionException{ |
| Code: meta.TransactionExceptionCodeFailedWriteSession, |
| Message: "Fail to update branch session", |
| } |
| } |
| if logOperation == LogOperationBranchRemove { |
| return &meta.TransactionException{ |
| Code: meta.TransactionExceptionCodeFailedWriteSession, |
| Message: "Fail to remove branch session", |
| } |
| } |
| return errors.New("Unknown LogOperation:"+logOperation.String()) |
| } |
| return nil |
| } |