// initEngine parses the engine specification according to the // dataDirRE regexp and instantiates an engine of correct type. func initEngine(spec string) (storage.Engine, error) { // Error if regexp doesn't match. matches := dataDirRE.FindStringSubmatch(spec) if matches == nil || len(matches) != 3 { return nil, util.Errorf("invalid engine specification %q", spec) } var engine storage.Engine var err error if matches[1] == "mem" { size, err := strconv.ParseInt(matches[2], 10, 64) if err != nil { return nil, util.Errorf("unable to init in-memory storage %q", spec) } engine = storage.NewInMem(size) } else { var typ storage.DiskType switch matches[2] { case "hdd": typ = storage.HDD case "ssd": typ = storage.SSD default: return nil, util.Errorf("unhandled disk type %q", matches[1]) } engine, err = storage.NewRocksDB(typ, matches[2]) if err != nil { return nil, util.Errorf("unable to init rocksdb with data dir %q", matches[2]) } } return engine, nil }
// initEngine parses the store attributes as a colon-separated list // and instantiates an engine based on the dir parameter. If dir parses // to an integer, it's taken to mean an in-memory engine; otherwise, // dir is treated as a path and a RocksDB engine is created. func initEngine(attrsStr, path string) (storage.Engine, error) { attrs := parseAttributes(attrsStr) var engine storage.Engine if size, err := strconv.ParseUint(path, 10, 64); err == nil { if size == 0 { return nil, util.Errorf("unable to initialize an in-memory store with capacity 0") } engine = storage.NewInMem(attrs, int64(size)) } else { engine, err = storage.NewRocksDB(attrs, path) if err != nil { return nil, util.Errorf("unable to init rocksdb with data dir %q: %v", path, err) } } return engine, nil }