// newLevelDB returns a leveldb backend, creating leveldb // at the path if it doesn't already exist. func (e Engine) newLevelDB(config dvid.StoreConfig) (*LevelDB, bool, error) { path, _, err := parseConfig(config) if err != nil { return nil, false, err } // Is there a database already at this path? If not, create. var created bool if _, err := os.Stat(path); os.IsNotExist(err) { dvid.Infof("Database not already at path (%s). Creating directory...\n", path) created = true // Make a directory at the path. if err := os.MkdirAll(path, 0744); err != nil { return nil, true, fmt.Errorf("Can't make directory at %s: %v", path, err) } } else { dvid.Infof("Found directory at %s (err = %v)\n", path, err) } // Open the database dvid.StartCgo() defer dvid.StopCgo() opt, err := getOptions(config.Config) if err != nil { return nil, false, err } leveldb := &LevelDB{ directory: path, config: config, options: opt, } dvid.Infof("Opening basholeveldb @ path %s\n", path) ldb, err := levigo.Open(path, opt.Options) if err != nil { return nil, false, err } leveldb.ldb = ldb // if we know it's newly created, just return. if created { return leveldb, created, nil } // otherwise, check if there's been any metadata or we need to initialize it. metadataExists, err := leveldb.metadataExists() if err != nil { leveldb.Close() return nil, false, err } return leveldb, !metadataExists, nil }
// newLevelDB returns a leveldb backend. If create is true, the leveldb // will be created at the path if it doesn't already exist. func (e Engine) newLevelDB(config dvid.EngineConfig) (*LevelDB, bool, error) { // Create path depending on whether it is testing database or not. path := config.Path if config.Testing { path = filepath.Join(os.TempDir(), config.Path) } // Is there a database already at this path? If not, create. var created bool if _, err := os.Stat(path); os.IsNotExist(err) { dvid.Infof("Database not already at path (%s). Creating directory...\n", path) created = true // Make a directory at the path. if err := os.MkdirAll(path, 0744); err != nil { return nil, true, fmt.Errorf("Can't make directory at %s: %v", path, err) } } else { dvid.Infof("Found directory at %s (err = %v)\n", path, err) } // Open the database dvid.StartCgo() defer dvid.StopCgo() opt, err := getOptions(config.Config) if err != nil { return nil, false, err } leveldb := &LevelDB{ directory: path, config: config, options: opt, } ldb, err := levigo.Open(path, opt.Options) if err != nil { return nil, false, err } leveldb.ldb = ldb return leveldb, created, nil }
// NewKeyValueStore returns a leveldb backend. If create is true, the leveldb // will be created at the path if it doesn't already exist. func NewKeyValueStore(path string, create bool, config dvid.Config) (storage.Engine, error) { dvid.StartCgo() defer dvid.StopCgo() opt, err := GetOptions(create, config) if err != nil { return nil, err } leveldb := &LevelDB{ directory: path, config: config, options: opt, } ldb, err := levigo.Open(path, opt.Options) if err != nil { return nil, err } leveldb.ldb = ldb return leveldb, nil }