From 4caa457fbe0a32eedac08a79fe99d79b8f51273d Mon Sep 17 00:00:00 2001 From: c9s Date: Wed, 5 Oct 2022 18:42:31 +0800 Subject: [PATCH 1/3] bbgo: pull out ConfigurePersistence method to simple function --- pkg/bbgo/bootstrap.go | 4 ++-- pkg/bbgo/environment.go | 26 -------------------------- pkg/bbgo/isolation.go | 7 +++++++ pkg/bbgo/persistence.go | 27 +++++++++++++++++++++++++++ 4 files changed, 36 insertions(+), 28 deletions(-) diff --git a/pkg/bbgo/bootstrap.go b/pkg/bbgo/bootstrap.go index 73188c7d2a..c635ba9cd3 100644 --- a/pkg/bbgo/bootstrap.go +++ b/pkg/bbgo/bootstrap.go @@ -15,7 +15,7 @@ func BootstrapEnvironmentLightweight(ctx context.Context, environ *Environment, } if userConfig.Persistence != nil { - if err := environ.ConfigurePersistence(userConfig.Persistence); err != nil { + if err := ConfigurePersistence(userConfig.Persistence); err != nil { return errors.Wrap(err, "persistence configure error") } } @@ -33,7 +33,7 @@ func BootstrapEnvironment(ctx context.Context, environ *Environment, userConfig } if userConfig.Persistence != nil { - if err := environ.ConfigurePersistence(userConfig.Persistence); err != nil { + if err := ConfigurePersistence(userConfig.Persistence); err != nil { return errors.Wrap(err, "persistence configure error") } } diff --git a/pkg/bbgo/environment.go b/pkg/bbgo/environment.go index 455a8d6409..9f57420dbc 100644 --- a/pkg/bbgo/environment.go +++ b/pkg/bbgo/environment.go @@ -13,7 +13,6 @@ import ( "sync" "time" - "github.com/codingconcepts/env" "github.com/pkg/errors" "github.com/pquerna/otp" log "github.com/sirupsen/logrus" @@ -276,31 +275,6 @@ func (environ *Environment) Start(ctx context.Context) (err error) { return } -func (environ *Environment) ConfigurePersistence(conf *PersistenceConfig) error { - if conf.Redis != nil { - if err := env.Set(conf.Redis); err != nil { - return err - } - - redisPersistence := service.NewRedisPersistenceService(conf.Redis) - persistenceServiceFacade.Redis = redisPersistence - } - - if conf.Json != nil { - if _, err := os.Stat(conf.Json.Directory); os.IsNotExist(err) { - if err2 := os.MkdirAll(conf.Json.Directory, 0777); err2 != nil { - log.WithError(err2).Errorf("can not create directory: %s", conf.Json.Directory) - return err2 - } - } - - jsonPersistence := &service.JsonPersistenceService{Directory: conf.Json.Directory} - persistenceServiceFacade.Json = jsonPersistence - } - - return nil -} - func (environ *Environment) SetStartTime(t time.Time) *Environment { environ.startTime = t return environ diff --git a/pkg/bbgo/isolation.go b/pkg/bbgo/isolation.go index f85b8d9155..44df20034b 100644 --- a/pkg/bbgo/isolation.go +++ b/pkg/bbgo/isolation.go @@ -22,6 +22,13 @@ func NewDefaultIsolation() *Isolation { } } +func NewIsolation(persistenceFacade *service.PersistenceServiceFacade) *Isolation { + return &Isolation{ + gracefulShutdown: GracefulShutdown{}, + persistenceServiceFacade: persistenceFacade, + } +} + func GetIsolationFromContext(ctx context.Context) *Isolation { isolatedContext, ok := ctx.Value(IsolationContextKey).(*Isolation) if ok { diff --git a/pkg/bbgo/persistence.go b/pkg/bbgo/persistence.go index 8d2a2aa339..3a555cb1c2 100644 --- a/pkg/bbgo/persistence.go +++ b/pkg/bbgo/persistence.go @@ -2,8 +2,10 @@ package bbgo import ( "context" + "os" "reflect" + "github.com/codingconcepts/env" log "github.com/sirupsen/logrus" "github.com/c9s/bbgo/pkg/dynamic" @@ -70,3 +72,28 @@ func storePersistenceFields(obj interface{}, id string, persistence service.Pers return store.Save(inf) }) } + +func ConfigurePersistence(conf *PersistenceConfig) error { + if conf.Redis != nil { + if err := env.Set(conf.Redis); err != nil { + return err + } + + redisPersistence := service.NewRedisPersistenceService(conf.Redis) + persistenceServiceFacade.Redis = redisPersistence + } + + if conf.Json != nil { + if _, err := os.Stat(conf.Json.Directory); os.IsNotExist(err) { + if err2 := os.MkdirAll(conf.Json.Directory, 0777); err2 != nil { + log.WithError(err2).Errorf("can not create directory: %s", conf.Json.Directory) + return err2 + } + } + + jsonPersistence := &service.JsonPersistenceService{Directory: conf.Json.Directory} + persistenceServiceFacade.Json = jsonPersistence + } + + return nil +} From 673304bcf177542c3f07090c46067994f60262ef Mon Sep 17 00:00:00 2001 From: c9s Date: Wed, 5 Oct 2022 18:46:26 +0800 Subject: [PATCH 2/3] bbgo: refactor ConfigurePersistence --- pkg/bbgo/persistence.go | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/pkg/bbgo/persistence.go b/pkg/bbgo/persistence.go index 3a555cb1c2..5783755244 100644 --- a/pkg/bbgo/persistence.go +++ b/pkg/bbgo/persistence.go @@ -6,6 +6,7 @@ import ( "reflect" "github.com/codingconcepts/env" + "github.com/pkg/errors" log "github.com/sirupsen/logrus" "github.com/c9s/bbgo/pkg/dynamic" @@ -73,27 +74,40 @@ func storePersistenceFields(obj interface{}, id string, persistence service.Pers }) } -func ConfigurePersistence(conf *PersistenceConfig) error { +func NewPersistenceServiceFacade(conf *PersistenceConfig) (*service.PersistenceServiceFacade, error) { + facade := &service.PersistenceServiceFacade{ + Memory: service.NewMemoryService(), + } + if conf.Redis != nil { if err := env.Set(conf.Redis); err != nil { - return err + return nil, err } redisPersistence := service.NewRedisPersistenceService(conf.Redis) - persistenceServiceFacade.Redis = redisPersistence + facade.Redis = redisPersistence } if conf.Json != nil { if _, err := os.Stat(conf.Json.Directory); os.IsNotExist(err) { if err2 := os.MkdirAll(conf.Json.Directory, 0777); err2 != nil { - log.WithError(err2).Errorf("can not create directory: %s", conf.Json.Directory) - return err2 + return nil, errors.Wrapf(err2, "can not create directory: %s", conf.Json.Directory) } } jsonPersistence := &service.JsonPersistenceService{Directory: conf.Json.Directory} - persistenceServiceFacade.Json = jsonPersistence + facade.Json = jsonPersistence + } + + return facade, nil +} + +func ConfigurePersistence(conf *PersistenceConfig) error { + facade, err := NewPersistenceServiceFacade(conf) + if err != nil { + return err } + persistenceServiceFacade = facade return nil } From e92219194f40797ada2368428d338468364e9d28 Mon Sep 17 00:00:00 2001 From: c9s Date: Wed, 5 Oct 2022 18:48:12 +0800 Subject: [PATCH 3/3] bbgo: configure persistence facade into the isolation context --- pkg/bbgo/bootstrap.go | 4 ++-- pkg/bbgo/persistence.go | 5 ++++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/pkg/bbgo/bootstrap.go b/pkg/bbgo/bootstrap.go index c635ba9cd3..59d5576926 100644 --- a/pkg/bbgo/bootstrap.go +++ b/pkg/bbgo/bootstrap.go @@ -15,7 +15,7 @@ func BootstrapEnvironmentLightweight(ctx context.Context, environ *Environment, } if userConfig.Persistence != nil { - if err := ConfigurePersistence(userConfig.Persistence); err != nil { + if err := ConfigurePersistence(ctx, userConfig.Persistence); err != nil { return errors.Wrap(err, "persistence configure error") } } @@ -33,7 +33,7 @@ func BootstrapEnvironment(ctx context.Context, environ *Environment, userConfig } if userConfig.Persistence != nil { - if err := ConfigurePersistence(userConfig.Persistence); err != nil { + if err := ConfigurePersistence(ctx, userConfig.Persistence); err != nil { return errors.Wrap(err, "persistence configure error") } } diff --git a/pkg/bbgo/persistence.go b/pkg/bbgo/persistence.go index 5783755244..e87fd92a7e 100644 --- a/pkg/bbgo/persistence.go +++ b/pkg/bbgo/persistence.go @@ -102,12 +102,15 @@ func NewPersistenceServiceFacade(conf *PersistenceConfig) (*service.PersistenceS return facade, nil } -func ConfigurePersistence(conf *PersistenceConfig) error { +func ConfigurePersistence(ctx context.Context, conf *PersistenceConfig) error { facade, err := NewPersistenceServiceFacade(conf) if err != nil { return err } + isolation := GetIsolationFromContext(ctx) + isolation.persistenceServiceFacade = facade + persistenceServiceFacade = facade return nil }