@@ -175,25 +175,37 @@ func (db *DB) Meta() models.Metadata {
175175 return m
176176}
177177
178- func (db * DB ) UpdateMetrics () {
179- db .mu .RLock ()
180- defer db .mu .RUnlock ()
178+ func (db * DB ) updateMetrics () {
181179 for _ , s := range db .store {
182- s .metrics = s .DB .Metrics ()
180+ if s != nil && s .DB != nil {
181+ s .metrics = s .DB .Metrics ()
182+ }
183183 }
184184}
185185
186- // AllStores returns a map of the names of all pogreb datastores and the corresponding Filers.
187- func (db * DB ) AllStores () map [string ]database.Filer {
186+ func (db * DB ) UpdateMetrics () {
188187 db .mu .RLock ()
189- defer db .mu .RUnlock ()
188+ db .updateMetrics ()
189+ db .mu .RUnlock ()
190+ }
191+
192+ func (db * DB ) allStores () map [string ]database.Filer {
190193 var stores = make (map [string ]database.Filer )
191194 for n , s := range db .store {
192195 stores [n ] = s
193196 }
194197 return stores
195198}
196199
200+ // AllStores returns a map of the names of all pogreb datastores and the corresponding Filers.
201+ func (db * DB ) AllStores () map [string ]database.Filer {
202+
203+ db .mu .RLock ()
204+ ast := db .allStores ()
205+ db .mu .RUnlock ()
206+ return ast
207+ }
208+
197209// FIXME: not returning the error is probably pretty irresponsible.
198210
199211// OpenDB will either open an existing set of pogreb datastores at the given directory, or it will create a new one.
@@ -522,21 +534,19 @@ func (db *DB) CloseAll() error {
522534}
523535
524536func (db * DB ) allMetrics () map [string ]* pogreb.Metrics {
525- db .UpdateMetrics ()
537+ db .updateMetrics ()
526538 allmet := make (map [string ]* pogreb.Metrics , len (db .store ))
527- db .mu .RLock ()
528539 for name , store := range db .store {
529540 if store == nil || store .Backend ().(* pogreb.DB ) == nil {
530541 continue
531542 }
532543 allmet [name ] = store .metrics
533544 }
534- db .mu .RUnlock ()
535545 return allmet
536546}
537547
538548func (db * DB ) addAllStoresToMeta () {
539- storeMap := db .AllStores ()
549+ storeMap := db .allStores ()
540550 storeNames := make ([]string , len (storeMap ))
541551 for name := range storeMap {
542552 storeNames = append (storeNames , name )
@@ -550,6 +560,7 @@ func (db *DB) syncMetaValues() {
550560}
551561
552562// SyncAll syncs all pogreb datastores.
563+ // TODO: investigate locking here, right now if we try to hold a lock during a backup we'll hang :^)
553564func (db * DB ) SyncAll () error {
554565 db .syncMetaValues ()
555566 var errs = make ([]error , 0 )
0 commit comments