From 540dab4ea4847f1e7ff30b833324d2f9701fff05 Mon Sep 17 00:00:00 2001 From: Xiangkun Yin <32592585+ptyin@users.noreply.github.com> Date: Sat, 2 Mar 2024 21:20:19 +0800 Subject: [PATCH] feature: add default implementation for StateMachineConfig (#669) --- .../engine/default_statemachine_config.go | 123 ++++++++++++++++++ 1 file changed, 123 insertions(+) create mode 100644 pkg/saga/statemachine/engine/default_statemachine_config.go diff --git a/pkg/saga/statemachine/engine/default_statemachine_config.go b/pkg/saga/statemachine/engine/default_statemachine_config.go new file mode 100644 index 000000000..2d7b1d8e9 --- /dev/null +++ b/pkg/saga/statemachine/engine/default_statemachine_config.go @@ -0,0 +1,123 @@ +package engine + +import ( + "github.com/seata/seata-go/pkg/saga/statemachine/engine/events" + "github.com/seata/seata-go/pkg/saga/statemachine/engine/expr" + "github.com/seata/seata-go/pkg/saga/statemachine/engine/invoker" + "github.com/seata/seata-go/pkg/saga/statemachine/engine/sequence" + "github.com/seata/seata-go/pkg/saga/statemachine/engine/status_decision" + "github.com/seata/seata-go/pkg/saga/statemachine/engine/store" +) + +const ( + DefaultTransOperTimeout = 60000 * 30 + DefaultServiceInvokeTimeout = 60000 * 5 +) + +type DefaultStateMachineConfig struct { + // Configuration + transOperationTimeout int + serviceInvokeTimeout int + charset string + defaultTenantId string + + // Components + + // Store related components + stateLogRepository store.StateLogRepository + stateLogStore store.StateLogStore + stateLangStore store.StateLangStore + stateMachineRepository store.StateMachineRepository + + // Expression related components + expressionFactoryManager expr.ExpressionFactoryManager + expressionResolver expr.ExpressionResolver + + // Invoker related components + serviceInvokerManager invoker.ServiceInvokerManager + scriptInvokerManager invoker.ScriptInvokerManager + + // Other components + statusDecisionStrategy status_decision.StatusDecisionStrategy + seqGenerator sequence.SeqGenerator +} + +func (c *DefaultStateMachineConfig) StateLogRepository() store.StateLogRepository { + return c.stateLogRepository +} + +func (c *DefaultStateMachineConfig) StateMachineRepository() store.StateMachineRepository { + return c.stateMachineRepository +} + +func (c *DefaultStateMachineConfig) StateLogStore() store.StateLogStore { + return c.stateLogStore +} + +func (c *DefaultStateMachineConfig) StateLangStore() store.StateLangStore { + return c.stateLangStore +} + +func (c *DefaultStateMachineConfig) ExpressionFactoryManager() expr.ExpressionFactoryManager { + return c.expressionFactoryManager +} + +func (c *DefaultStateMachineConfig) ExpressionResolver() expr.ExpressionResolver { + return c.expressionResolver +} + +func (c *DefaultStateMachineConfig) SeqGenerator() sequence.SeqGenerator { + return c.seqGenerator +} + +func (c *DefaultStateMachineConfig) StatusDecisionStrategy() status_decision.StatusDecisionStrategy { + return c.statusDecisionStrategy +} + +func (c *DefaultStateMachineConfig) EventPublisher() events.EventPublisher { + //TODO implement me + panic("implement me") +} + +func (c *DefaultStateMachineConfig) AsyncEventPublisher() events.EventPublisher { + //TODO implement me + panic("implement me") +} + +func (c *DefaultStateMachineConfig) ServiceInvokerManager() invoker.ServiceInvokerManager { + return c.serviceInvokerManager +} + +func (c *DefaultStateMachineConfig) ScriptInvokerManager() invoker.ScriptInvokerManager { + return c.scriptInvokerManager +} + +func (c *DefaultStateMachineConfig) CharSet() string { + return c.charset +} + +func (c *DefaultStateMachineConfig) SetCharSet(charset string) { + c.charset = charset +} + +func (c *DefaultStateMachineConfig) DefaultTenantId() string { + return c.defaultTenantId +} + +func (c *DefaultStateMachineConfig) TransOperationTimeout() int { + return c.transOperationTimeout +} + +func (c *DefaultStateMachineConfig) ServiceInvokeTimeout() int { + return c.serviceInvokeTimeout +} + +func NewDefaultStateMachineConfig() *DefaultStateMachineConfig { + c := &DefaultStateMachineConfig{ + transOperationTimeout: DefaultTransOperTimeout, + serviceInvokeTimeout: DefaultServiceInvokeTimeout, + charset: "UTF-8", + defaultTenantId: "000001", + } + return c +}