func openStore(cmd *cobra.Command, dir string, stopper *stop.Stopper) (*engine.RocksDB, error) { cache := engine.NewRocksDBCache(512 << 20) defer cache.Release() maxOpenFiles, err := server.SetOpenFileLimitForOneStore() if err != nil { return nil, err } db, err := engine.NewRocksDB( roachpb.Attributes{}, dir, cache, 0, maxOpenFiles, ) if err != nil { return nil, err } stopper.AddCloser(db) return db, nil }
// CreateEngines creates Engines based on the specs in ctx.Stores. func (cfg *Config) CreateEngines() (Engines, error) { engines := Engines(nil) defer engines.Close() if cfg.enginesCreated { return Engines{}, errors.Errorf("engines already created") } cfg.enginesCreated = true cache := engine.NewRocksDBCache(cfg.CacheSize) defer cache.Release() var physicalStores int for _, spec := range cfg.Stores.Specs { if !spec.InMemory { physicalStores++ } } openFileLimitPerStore, err := setOpenFileLimit(physicalStores) if err != nil { return Engines{}, err } skipSizeCheck := cfg.TestingKnobs.Store != nil && cfg.TestingKnobs.Store.(*storage.StoreTestingKnobs).SkipMinSizeCheck for _, spec := range cfg.Stores.Specs { var sizeInBytes = spec.SizeInBytes if spec.InMemory { if spec.SizePercent > 0 { sysMem, err := GetTotalMemory() if err != nil { return Engines{}, errors.Errorf("could not retrieve system memory") } sizeInBytes = int64(float64(sysMem) * spec.SizePercent / 100) } if sizeInBytes != 0 && !skipSizeCheck && sizeInBytes < base.MinimumStoreSize { return Engines{}, errors.Errorf("%f%% of memory is only %s bytes, which is below the minimum requirement of %s", spec.SizePercent, humanizeutil.IBytes(sizeInBytes), humanizeutil.IBytes(base.MinimumStoreSize)) } engines = append(engines, engine.NewInMem(spec.Attributes, sizeInBytes)) } else { if spec.SizePercent > 0 { fileSystemUsage := gosigar.FileSystemUsage{} if err := fileSystemUsage.Get(spec.Path); err != nil { return Engines{}, err } sizeInBytes = int64(float64(fileSystemUsage.Total) * spec.SizePercent / 100) } if sizeInBytes != 0 && !skipSizeCheck && sizeInBytes < base.MinimumStoreSize { return Engines{}, errors.Errorf("%f%% of %s's total free space is only %s bytes, which is below the minimum requirement of %s", spec.SizePercent, spec.Path, humanizeutil.IBytes(sizeInBytes), humanizeutil.IBytes(base.MinimumStoreSize)) } eng, err := engine.NewRocksDB( spec.Attributes, spec.Path, cache, sizeInBytes, openFileLimitPerStore, ) if err != nil { return Engines{}, err } engines = append(engines, eng) } } if len(engines) == 1 { log.Infof(context.TODO(), "1 storage engine initialized") } else { log.Infof(context.TODO(), "%d storage engines initialized", len(engines)) } enginesCopy := engines engines = nil return enginesCopy, nil }