MCPcopy Create free account
hub / github.com/nutsdb/nutsdb / release

Method release

db.go:262–319  ·  view source on GitHub ↗

release set all obj in the db instance to nil

()

Source from the content-addressed store, hash-verified

260
261// release set all obj in the db instance to nil
262func (db *DB) release() error {
263 GCEnable := db.opt.GCWhenClose
264
265 if db.ActiveFile != nil && db.ActiveFile.rwManager != nil {
266 err := db.ActiveFile.rwManager.Release()
267 if err != nil {
268 return err
269 }
270 }
271
272 db.ActiveFile = nil
273
274 if db.fm != nil {
275 err := db.fm.Close()
276 if err != nil {
277 return err
278 }
279 }
280
281 // Close TTL service first to stop the scanner goroutine
282 if db.ttlService != nil {
283 if err := db.ttlService.Stop(5 * time.Second); err != nil {
284 utils.GetLogger().Printf("TTLService stop error: %v", err)
285 }
286 }
287
288 // Now safe to release Index as all background services are stopped
289 db.Index = nil
290
291 if db.flock != nil && db.flock.Locked() {
292 err := db.flock.Unlock()
293 if err != nil {
294 return err
295 }
296 }
297
298 db.fm = nil
299
300 db.commitBuffer = nil
301
302 if db.bucketMgr != nil {
303 if err := db.bucketMgr.Close(); err != nil {
304 return err
305 }
306 }
307
308 if db.watchMgr != nil {
309 if err := db.watchMgr.close(); err != nil {
310 utils.GetLogger().Printf("watch manager closed already")
311 }
312 }
313
314 if GCEnable {
315 runtime.GC()
316 }
317
318 return nil
319}

Callers 10

CloseMethod · 0.95
Test_readEntryFunction · 0.45
rewriteFileMethod · 0.45
mergeLegacyMethod · 0.45
parseDataFilesMethod · 0.45
rebuildBucketManagerMethod · 0.45

Calls 6

GetLoggerFunction · 0.92
ReleaseMethod · 0.65
CloseMethod · 0.65
StopMethod · 0.65
PrintfMethod · 0.65
closeMethod · 0.45