Skip to content

Commit 39247bb

Browse files
authored
Merge pull request #982 from c9s/refactor/isolation
refactor isolation context for persistence facade configuration
2 parents 4c0fdee + e922191 commit 39247bb

File tree

4 files changed

+53
-28
lines changed

4 files changed

+53
-28
lines changed

pkg/bbgo/bootstrap.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ func BootstrapEnvironmentLightweight(ctx context.Context, environ *Environment,
1515
}
1616

1717
if userConfig.Persistence != nil {
18-
if err := environ.ConfigurePersistence(userConfig.Persistence); err != nil {
18+
if err := ConfigurePersistence(ctx, userConfig.Persistence); err != nil {
1919
return errors.Wrap(err, "persistence configure error")
2020
}
2121
}
@@ -33,7 +33,7 @@ func BootstrapEnvironment(ctx context.Context, environ *Environment, userConfig
3333
}
3434

3535
if userConfig.Persistence != nil {
36-
if err := environ.ConfigurePersistence(userConfig.Persistence); err != nil {
36+
if err := ConfigurePersistence(ctx, userConfig.Persistence); err != nil {
3737
return errors.Wrap(err, "persistence configure error")
3838
}
3939
}

pkg/bbgo/environment.go

-26
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ import (
1313
"sync"
1414
"time"
1515

16-
"github.com/codingconcepts/env"
1716
"github.com/pkg/errors"
1817
"github.com/pquerna/otp"
1918
log "github.com/sirupsen/logrus"
@@ -276,31 +275,6 @@ func (environ *Environment) Start(ctx context.Context) (err error) {
276275
return
277276
}
278277

279-
func (environ *Environment) ConfigurePersistence(conf *PersistenceConfig) error {
280-
if conf.Redis != nil {
281-
if err := env.Set(conf.Redis); err != nil {
282-
return err
283-
}
284-
285-
redisPersistence := service.NewRedisPersistenceService(conf.Redis)
286-
persistenceServiceFacade.Redis = redisPersistence
287-
}
288-
289-
if conf.Json != nil {
290-
if _, err := os.Stat(conf.Json.Directory); os.IsNotExist(err) {
291-
if err2 := os.MkdirAll(conf.Json.Directory, 0777); err2 != nil {
292-
log.WithError(err2).Errorf("can not create directory: %s", conf.Json.Directory)
293-
return err2
294-
}
295-
}
296-
297-
jsonPersistence := &service.JsonPersistenceService{Directory: conf.Json.Directory}
298-
persistenceServiceFacade.Json = jsonPersistence
299-
}
300-
301-
return nil
302-
}
303-
304278
func (environ *Environment) SetStartTime(t time.Time) *Environment {
305279
environ.startTime = t
306280
return environ

pkg/bbgo/isolation.go

+7
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,13 @@ func NewDefaultIsolation() *Isolation {
2222
}
2323
}
2424

25+
func NewIsolation(persistenceFacade *service.PersistenceServiceFacade) *Isolation {
26+
return &Isolation{
27+
gracefulShutdown: GracefulShutdown{},
28+
persistenceServiceFacade: persistenceFacade,
29+
}
30+
}
31+
2532
func GetIsolationFromContext(ctx context.Context) *Isolation {
2633
isolatedContext, ok := ctx.Value(IsolationContextKey).(*Isolation)
2734
if ok {

pkg/bbgo/persistence.go

+44
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,11 @@ package bbgo
22

33
import (
44
"context"
5+
"os"
56
"reflect"
67

8+
"github.com/codingconcepts/env"
9+
"github.com/pkg/errors"
710
log "github.com/sirupsen/logrus"
811

912
"github.com/c9s/bbgo/pkg/dynamic"
@@ -70,3 +73,44 @@ func storePersistenceFields(obj interface{}, id string, persistence service.Pers
7073
return store.Save(inf)
7174
})
7275
}
76+
77+
func NewPersistenceServiceFacade(conf *PersistenceConfig) (*service.PersistenceServiceFacade, error) {
78+
facade := &service.PersistenceServiceFacade{
79+
Memory: service.NewMemoryService(),
80+
}
81+
82+
if conf.Redis != nil {
83+
if err := env.Set(conf.Redis); err != nil {
84+
return nil, err
85+
}
86+
87+
redisPersistence := service.NewRedisPersistenceService(conf.Redis)
88+
facade.Redis = redisPersistence
89+
}
90+
91+
if conf.Json != nil {
92+
if _, err := os.Stat(conf.Json.Directory); os.IsNotExist(err) {
93+
if err2 := os.MkdirAll(conf.Json.Directory, 0777); err2 != nil {
94+
return nil, errors.Wrapf(err2, "can not create directory: %s", conf.Json.Directory)
95+
}
96+
}
97+
98+
jsonPersistence := &service.JsonPersistenceService{Directory: conf.Json.Directory}
99+
facade.Json = jsonPersistence
100+
}
101+
102+
return facade, nil
103+
}
104+
105+
func ConfigurePersistence(ctx context.Context, conf *PersistenceConfig) error {
106+
facade, err := NewPersistenceServiceFacade(conf)
107+
if err != nil {
108+
return err
109+
}
110+
111+
isolation := GetIsolationFromContext(ctx)
112+
isolation.persistenceServiceFacade = facade
113+
114+
persistenceServiceFacade = facade
115+
return nil
116+
}

0 commit comments

Comments
 (0)