diff --git a/db.go b/db.go index 4cffe9cea..b458113de 100644 --- a/db.go +++ b/db.go @@ -233,33 +233,35 @@ func Open(opt Options) (db *DB, err error) { if err := createDirs(opt); err != nil { return nil, err } - dirLockGuard, err = acquireDirectoryLock(opt.Dir, lockFile, opt.ReadOnly) - if err != nil { - return nil, err - } - defer func() { - if dirLockGuard != nil { - _ = dirLockGuard.release() - } - }() - absDir, err := filepath.Abs(opt.Dir) - if err != nil { - return nil, err - } - absValueDir, err := filepath.Abs(opt.ValueDir) - if err != nil { - return nil, err - } - if absValueDir != absDir { - valueDirLockGuard, err = acquireDirectoryLock(opt.ValueDir, lockFile, opt.ReadOnly) + if !opt.BypassLockGuard { + dirLockGuard, err = acquireDirectoryLock(opt.Dir, lockFile, opt.ReadOnly) if err != nil { return nil, err } defer func() { - if valueDirLockGuard != nil { - _ = valueDirLockGuard.release() + if dirLockGuard != nil { + _ = dirLockGuard.release() } }() + absDir, err := filepath.Abs(opt.Dir) + if err != nil { + return nil, err + } + absValueDir, err := filepath.Abs(opt.ValueDir) + if err != nil { + return nil, err + } + if absValueDir != absDir { + valueDirLockGuard, err = acquireDirectoryLock(opt.ValueDir, lockFile, opt.ReadOnly) + if err != nil { + return nil, err + } + defer func() { + if valueDirLockGuard != nil { + _ = valueDirLockGuard.release() + } + }() + } } } diff --git a/options.go b/options.go index 4374fc39d..eb56337c8 100644 --- a/options.go +++ b/options.go @@ -78,6 +78,8 @@ type Options struct { LogRotatesToFlush int32 ZSTDCompressionLevel int + BypassLockGuard bool + // When set, checksum will be validated for each entry read from the value log file. VerifyValueChecksum bool