diff --git a/api/bolt/datastore.go b/api/bolt/datastore.go index f729e84b0..448a454e9 100644 --- a/api/bolt/datastore.go +++ b/api/bolt/datastore.go @@ -90,20 +90,13 @@ func (store *Store) edition() portainer.SoftwareEdition { } // NewStore initializes a new Store and the associated services -func NewStore(storePath string, fileService portainer.FileService) (*Store, error) { - store := &Store{ +func NewStore(storePath string, fileService portainer.FileService) *Store { + return &Store{ path: storePath, fileService: fileService, isNew: true, connection: &internal.DbConnection{}, } - - databasePath := path.Join(storePath, databaseFileName) - if _, err := fileService.FileExists(databasePath); err != nil { - return nil, err - } - - return store, nil } // Open opens and initializes the BoltDB database. @@ -120,10 +113,9 @@ func (store *Store) Open() error { return err } - //if failed to retrieve DBVersion from database - //treat it as a new store - if _, err := store.VersionService.DBVersion(); err != nil { - store.isNew = true + // if we have DBVersion in the database then ensure we flag this as NOT a new store + if _, err := store.VersionService.DBVersion(); err == nil { + store.isNew = false } return nil diff --git a/api/bolt/migrate_data_test.go b/api/bolt/migrate_data_test.go index 895d8695e..552f2f211 100644 --- a/api/bolt/migrate_data_test.go +++ b/api/bolt/migrate_data_test.go @@ -17,12 +17,23 @@ func testVersion(store *Store, versionWant int, t *testing.T) { } func TestMigrateData(t *testing.T) { - t.Run("MigrateData for New Store", func(t *testing.T) { + t.Run("MigrateData for New Store & Re-Open Check", func(t *testing.T) { store, teardown := MustNewTestStore(false) defer teardown() + + if !store.IsNew() { + t.Error("Expect a new DB") + } + store.MigrateData(false) + testVersion(store, portainer.DBVersion, t) store.Close() + + store.Open() + if store.IsNew() { + t.Error("Expect store to NOT be new DB") + } }) tests := []struct { diff --git a/api/bolt/teststore.go b/api/bolt/teststore.go index bfec62acb..5e9d5899e 100644 --- a/api/bolt/teststore.go +++ b/api/bolt/teststore.go @@ -35,11 +35,7 @@ func NewTestStore(init bool) (*Store, func(), error) { return nil, nil, err } - store, err := NewStore(dataStorePath, fileService) - if err != nil { - return nil, nil, err - } - + store := NewStore(dataStorePath, fileService) err = store.Open() if err != nil { return nil, nil, err diff --git a/api/cmd/portainer/main.go b/api/cmd/portainer/main.go index 5a9139dae..2d646d80a 100644 --- a/api/cmd/portainer/main.go +++ b/api/cmd/portainer/main.go @@ -57,12 +57,8 @@ func initFileService(dataStorePath string) portainer.FileService { } func initDataStore(dataStorePath string, rollback bool, fileService portainer.FileService, shutdownCtx context.Context) portainer.DataStore { - store, err := bolt.NewStore(dataStorePath, fileService) - if err != nil { - log.Fatalf("failed creating data store: %v", err) - } - - err = store.Open() + store := bolt.NewStore(dataStorePath, fileService) + err := store.Open() if err != nil { log.Fatalf("failed opening store: %v", err) }