// Open opens the named kv DB file for reading/writing. It // creates the file if it does not exist yet. func Open(dbFile string, opts *kv.Options) (*kv.DB, error) { createOpen := kv.Open verb := "opening" if _, err := os.Stat(dbFile); os.IsNotExist(err) { createOpen = kv.Create verb = "creating" } if opts == nil { opts = &kv.Options{} } if opts.Locker == nil { opts.Locker = func(dbFile string) (io.Closer, error) { lkfile := dbFile + ".lock" cl, err := lock.Lock(lkfile) if err != nil { return nil, fmt.Errorf("failed to acquire lock on %s: %v", lkfile, err) } return cl, nil } } if v, _ := strconv.ParseBool(os.Getenv("CAMLI_KV_VERIFY")); v { opts.VerifyDbBeforeOpen = true opts.VerifyDbAfterOpen = true opts.VerifyDbBeforeClose = true opts.VerifyDbAfterClose = true } db, err := createOpen(dbFile, opts) if err != nil { return nil, fmt.Errorf("error %s %s: %v", verb, dbFile, err) } return db, nil }
// Open opens the named kv DB file for reading/writing. It // creates the file if it does not exist yet. func Open(filePath string, opts *kv.Options) (*kv.DB, error) { // TODO(mpl): use it in index pkg and such createOpen := kv.Open if _, err := os.Stat(filePath); os.IsNotExist(err) { createOpen = kv.Create } if opts == nil { opts = &kv.Options{} } if opts.Locker == nil { opts.Locker = func(fullPath string) (io.Closer, error) { return lock.Lock(filePath + ".lock") } } return createOpen(filePath, opts) }