Skip to content

Commit 08626b0

Browse files
committed
Merge branch 'pog'
2 parents e3f2117 + 2f3e234 commit 08626b0

File tree

2 files changed

+28
-40
lines changed

2 files changed

+28
-40
lines changed

pogreb/LICENSE

Lines changed: 0 additions & 21 deletions
This file was deleted.

pogreb/pogreb.go

Lines changed: 28 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -150,33 +150,39 @@ func normalizeOptions(opts ...any) *WrappedOptions {
150150
return pogrebopts
151151
}
152152

153-
// Init opens a pogreb store at the given path to be referenced by storeName.
154-
func (db *DB) Init(storeName string, opts ...any) error {
155-
pogrebopts := defaultPogrebOptions
156-
if len(opts) > 0 {
157-
pogrebopts = normalizeOptions(opts...)
158-
if pogrebopts == nil {
159-
return ErrBadOptions
160-
}
161-
}
162-
db.mu.Lock()
163-
defer db.mu.Unlock()
153+
func (db *DB) initStore(storeName string, pogrebOpts *WrappedOptions) error {
164154
if _, ok := db.store[storeName]; ok {
165155
return ErrStoreExists
166156
}
167157
path := db.Path()
168-
if _, err := os.Stat(filepath.Join(path, storeName, "lock")); !os.IsNotExist(err) && !pogrebopts.AllowRecovery {
158+
if _, err := os.Stat(filepath.Join(path, storeName, "lock")); !os.IsNotExist(err) && !pogrebOpts.AllowRecovery {
169159
return fmt.Errorf("%w: and seems to be running... "+
170160
"Please close it first, or use InitWithRecovery", ErrStoreExists)
171161
}
172-
c, e := pogreb.Open(filepath.Join(path, storeName), pogrebopts.Options)
162+
c, e := pogreb.Open(filepath.Join(path, storeName), pogrebOpts.Options)
173163
if e != nil {
174164
return e
175165
}
176166
db.store[storeName] = &Store{DB: c}
177167
return nil
178168
}
179169

170+
// Init opens a pogreb store at the given path to be referenced by storeName.
171+
func (db *DB) Init(storeName string, opts ...any) error {
172+
pogrebopts := defaultPogrebOptions
173+
if len(opts) > 0 {
174+
pogrebopts = normalizeOptions(opts...)
175+
if pogrebopts == nil {
176+
return ErrBadOptions
177+
}
178+
}
179+
db.mu.Lock()
180+
err := db.initStore(storeName, pogrebopts)
181+
db.mu.Unlock()
182+
183+
return err
184+
}
185+
180186
// With calls the given underlying pogreb instance.
181187
func (db *DB) With(storeName string) database.Store {
182188
db.mu.RLock()
@@ -197,16 +203,19 @@ func (db *DB) WithNew(storeName string, opts ...any) database.Filer {
197203
}
198204
}
199205

200-
db.mu.RLock()
201-
defer db.mu.RUnlock()
206+
db.mu.Lock()
207+
defer db.mu.Unlock()
202208

203209
d, ok := db.store[storeName]
204-
if ok {
210+
if ok && d == nil {
211+
delete(db.store, storeName)
212+
ok = false
213+
}
214+
215+
if ok && d != nil {
205216
return d
206217
}
207-
db.mu.RUnlock()
208-
err := db.Init(storeName, pogrebopts)
209-
db.mu.RLock()
218+
err := db.initStore(storeName, pogrebopts)
210219
if err == nil {
211220
return db.store[storeName]
212221
}

0 commit comments

Comments
 (0)