mirror of
				https://github.com/taigrr/bitcask
				synced 2025-01-18 04:03:17 -08:00 
			
		
		
		
	exclusive lock before closing db in merge (#196)
Co-authored-by: yash <yash.chandra@grabpay.com>
This commit is contained in:
		
							parent
							
								
									4e7414e920
								
							
						
					
					
						commit
						3a6235ea03
					
				
							
								
								
									
										22
									
								
								bitcask.go
									
									
									
									
									
								
							
							
						
						
									
										22
									
								
								bitcask.go
									
									
									
									
									
								
							| @ -96,12 +96,13 @@ func (b *Bitcask) Stats() (stats Stats, err error) { | ||||
| // database. | ||||
| func (b *Bitcask) Close() error { | ||||
| 	b.mu.RLock() | ||||
| 	defer b.mu.RUnlock() | ||||
| 
 | ||||
| 	defer func() { | ||||
| 		b.mu.RUnlock() | ||||
| 		b.Flock.Unlock() | ||||
| 	}() | ||||
| 	return b.close() | ||||
| } | ||||
| 
 | ||||
| func (b *Bitcask) close() error { | ||||
| 	defer b.Flock.Unlock() | ||||
| 	if err := b.saveIndex(); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| @ -378,6 +379,12 @@ func (b *Bitcask) Reopen() error { | ||||
| 	b.mu.Lock() | ||||
| 	defer b.mu.Unlock() | ||||
| 
 | ||||
| 	return b.reopen() | ||||
| } | ||||
| 
 | ||||
| // reopen reloads a bitcask object with index and datafiles | ||||
| // caller of this method should take care of locking | ||||
| func (b *Bitcask) reopen() error { | ||||
| 	datafiles, lastID, err := loadDatafiles(b.path, b.config.MaxKeySize, b.config.MaxValueSize, b.config.FileFileModeBeforeUmask) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| @ -470,7 +477,10 @@ func (b *Bitcask) Merge() error { | ||||
| 	if err = mdb.Close(); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	if err = b.Close(); err != nil { | ||||
| 	// no reads and writes till we reopen | ||||
| 	b.mu.Lock() | ||||
| 	defer b.mu.Unlock() | ||||
| 	if err = b.close(); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 
 | ||||
| @ -514,7 +524,7 @@ func (b *Bitcask) Merge() error { | ||||
| 	b.metadata.ReclaimableSpace = 0 | ||||
| 
 | ||||
| 	// And finally reopen the database | ||||
| 	return b.Reopen() | ||||
| 	return b.reopen() | ||||
| } | ||||
| 
 | ||||
| // Open opens the database at the given path with optional options. | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user