saga/saga_message.go (94 lines of code) (raw):

package saga import ( "fmt" ) type SagaMessageType int const ( StartSaga SagaMessageType = iota EndSaga AbortSaga StartTask EndTask StartCompTask EndCompTask ) func (s SagaMessageType) String() string { switch s { case StartSaga: return "Start Saga" case EndSaga: return "End Saga" case AbortSaga: return "Abort Saga" case StartTask: return "Start Task" case EndTask: return "End Task" case StartCompTask: return "Start Comp Task" case EndCompTask: return "End Comp Task" default: return "unknown" } } /* * Data Structure representation of a entry in the SagaLog. * Different SagaMessageTypes utilize different fields. * Factory Methods are supplied for creation of Saga Messages * and should be used instead of directly creatinga sagaMessage struct */ type SagaMessage struct { SagaId string MsgType SagaMessageType Data []byte TaskId string } func (s SagaMessage) String() string { return fmt.Sprintf("Message %s: Saga %s, Task %s", s.MsgType, s.SagaId, s.TaskId) } /* * StartSaga SagaMessageType * - sagaId - id of the Saga * - data - data needed to execute the saga */ func MakeStartSagaMessage(sagaId string, job []byte) SagaMessage { return SagaMessage{ SagaId: sagaId, MsgType: StartSaga, Data: job, } } /* * EndSaga SagaMessageType * - sagaId - id of the Saga */ func MakeEndSagaMessage(sagaId string) SagaMessage { return SagaMessage{ SagaId: sagaId, MsgType: EndSaga, } } /* * AbortSaga SagaMessageType * - sagaId - id of the Saga */ func MakeAbortSagaMessage(sagaId string) SagaMessage { return SagaMessage{ SagaId: sagaId, MsgType: AbortSaga, } } /* * StartTask SagaMessageType * - sagaId - id of the Saga * - taskId - id of the started Task * - data - data that is persisted to the log, useful for * diagnostic information */ func MakeStartTaskMessage(sagaId string, taskId string, data []byte) SagaMessage { return SagaMessage{ SagaId: sagaId, MsgType: StartTask, TaskId: taskId, Data: data, } } /* * EndTask SagaMessageType * - sagaId - id of the Saga * - taskId - id of the completed Task * - data - any results from task completion */ func MakeEndTaskMessage(sagaId string, taskId string, results []byte) SagaMessage { return SagaMessage{ SagaId: sagaId, MsgType: EndTask, TaskId: taskId, Data: results, } } /* * StartCompTask SagaMessageType * - sagaId - id of the Saga * - taskId - id of the started compensating task. Should * be the same as the original taskId * - data - data that is persisted to the log, useful for * diagnostic information */ func MakeStartCompTaskMessage(sagaId string, taskId string, data []byte) SagaMessage { return SagaMessage{ SagaId: sagaId, MsgType: StartCompTask, TaskId: taskId, Data: data, } } /* * EndCompTask SagaMessageType * - sagaId - id of the Saga * - taskId - id of the completed compensating task. Should * be the same as the original taskId * - data - any results from compensating task completion */ func MakeEndCompTaskMessage(sagaId string, taskId string, results []byte) SagaMessage { return SagaMessage{ SagaId: sagaId, MsgType: EndCompTask, TaskId: taskId, Data: results, } }