diff --git a/internal/services/configstore/readdb/readdb.go b/internal/services/configstore/readdb/readdb.go index 2e43b16..5b38131 100644 --- a/internal/services/configstore/readdb/readdb.go +++ b/internal/services/configstore/readdb/readdb.go @@ -68,20 +68,10 @@ func NewReadDB(ctx context.Context, logger *zap.Logger, dataDir string, e *etcd. if err := os.MkdirAll(dataDir, 0770); err != nil { return nil, err } - rdb, err := db.NewDB(db.Sqlite3, filepath.Join(dataDir, "db")) - if err != nil { - return nil, err - } - - // populate readdb - if err := rdb.Create(ctx, Stmts); err != nil { - return nil, err - } readDB := &ReadDB{ log: logger.Sugar(), dataDir: dataDir, - rdb: rdb, e: e, ost: ost, dm: dm, @@ -114,7 +104,9 @@ func (r *ReadDB) Initialize(ctx context.Context) error { func (r *ReadDB) ResetDB(ctx context.Context) error { // TODO(sgotti) this needs to be protected by a mutex - r.rdb.Close() + if r.rdb != nil { + r.rdb.Close() + } // drop rdb if err := os.Remove(filepath.Join(r.dataDir, "db")); err != nil { @@ -406,6 +398,20 @@ func (r *ReadDB) SyncRDB(ctx context.Context) error { } func (r *ReadDB) Run(ctx context.Context) error { + if r.rdb != nil { + r.rdb.Close() + } + rdb, err := db.NewDB(db.Sqlite3, filepath.Join(r.dataDir, "db")) + if err != nil { + return err + } + r.rdb = rdb + + // populate readdb + if err := r.rdb.Create(ctx, Stmts); err != nil { + return err + } + revision, err := r.GetRevision(ctx) if err != nil { return err @@ -468,7 +474,6 @@ func (r *ReadDB) Run(ctx context.Context) error { case <-ctx.Done(): r.log.Infof("readdb exiting") cancel() - r.rdb.Close() return nil case <-errCh: // cancel context and wait for the all the goroutines to exit diff --git a/internal/services/runservice/readdb/readdb.go b/internal/services/runservice/readdb/readdb.go index 56d3337..066dc39 100644 --- a/internal/services/runservice/readdb/readdb.go +++ b/internal/services/runservice/readdb/readdb.go @@ -113,15 +113,6 @@ func NewReadDB(ctx context.Context, logger *zap.Logger, dataDir string, e *etcd. if err := os.MkdirAll(dataDir, 0770); err != nil { return nil, err } - rdb, err := db.NewDB(db.Sqlite3, filepath.Join(dataDir, "db")) - if err != nil { - return nil, err - } - - // populate readdb - if err := rdb.Create(ctx, Stmts); err != nil { - return nil, err - } readDB := &ReadDB{ log: logger.Sugar(), @@ -129,7 +120,6 @@ func NewReadDB(ctx context.Context, logger *zap.Logger, dataDir string, e *etcd. dataDir: dataDir, ost: ost, dm: dm, - rdb: rdb, } return readDB, nil @@ -164,7 +154,9 @@ func (r *ReadDB) Initialize(ctx context.Context) error { func (r *ReadDB) ResetDB(ctx context.Context) error { // TODO(sgotti) this needs to be protected by a mutex - r.rdb.Close() + if r.rdb != nil { + r.rdb.Close() + } // drop rdb if err := os.Remove(filepath.Join(r.dataDir, "db")); err != nil { @@ -256,6 +248,21 @@ func (r *ReadDB) SyncRDB(ctx context.Context) error { } func (r *ReadDB) Run(ctx context.Context) error { + if r.rdb != nil { + r.rdb.Close() + } + rdb, err := db.NewDB(db.Sqlite3, filepath.Join(r.dataDir, "db")) + if err != nil { + return err + } + + r.rdb = rdb + + // populate readdb + if err := r.rdb.Create(ctx, Stmts); err != nil { + return err + } + revision, err := r.GetRevision(ctx) if err != nil { return err @@ -328,7 +335,6 @@ func (r *ReadDB) Run(ctx context.Context) error { case <-ctx.Done(): r.log.Infof("readdb exiting") cancel() - r.rdb.Close() return nil case <-errCh: // cancel context and wait for the all the goroutines to exit