@@ -150,33 +150,39 @@ func normalizeOptions(opts ...any) *WrappedOptions {
150
150
return pogrebopts
151
151
}
152
152
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 {
164
154
if _ , ok := db .store [storeName ]; ok {
165
155
return ErrStoreExists
166
156
}
167
157
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 {
169
159
return fmt .Errorf ("%w: and seems to be running... " +
170
160
"Please close it first, or use InitWithRecovery" , ErrStoreExists )
171
161
}
172
- c , e := pogreb .Open (filepath .Join (path , storeName ), pogrebopts .Options )
162
+ c , e := pogreb .Open (filepath .Join (path , storeName ), pogrebOpts .Options )
173
163
if e != nil {
174
164
return e
175
165
}
176
166
db .store [storeName ] = & Store {DB : c }
177
167
return nil
178
168
}
179
169
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
+
180
186
// With calls the given underlying pogreb instance.
181
187
func (db * DB ) With (storeName string ) database.Store {
182
188
db .mu .RLock ()
@@ -197,16 +203,19 @@ func (db *DB) WithNew(storeName string, opts ...any) database.Filer {
197
203
}
198
204
}
199
205
200
- db .mu .RLock ()
201
- defer db .mu .RUnlock ()
206
+ db .mu .Lock ()
207
+ defer db .mu .Unlock ()
202
208
203
209
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 {
205
216
return d
206
217
}
207
- db .mu .RUnlock ()
208
- err := db .Init (storeName , pogrebopts )
209
- db .mu .RLock ()
218
+ err := db .initStore (storeName , pogrebopts )
210
219
if err == nil {
211
220
return db .store [storeName ]
212
221
}
0 commit comments