func Open(cfg *config.Config) (*Ledis, error) { if len(cfg.DataDir) == 0 { cfg.DataDir = config.DefaultDataDir } ldb, err := store.Open(cfg) if err != nil { return nil, err } l := new(Ledis) l.quit = make(chan struct{}) l.jobs = new(sync.WaitGroup) l.ldb = ldb if cfg.BinLog.MaxFileNum > 0 && cfg.BinLog.MaxFileSize > 0 { l.binlog, err = NewBinLog(cfg) if err != nil { return nil, err } } else { l.binlog = nil } for i := uint8(0); i < MaxDBNumber; i++ { l.dbs[i] = l.newDB(i) } l.activeExpireCycle() return l, nil }
func (s *GoLevelDBStore) open() error { var err error s.first = InvalidLogID s.last = InvalidLogID s.db, err = store.Open(s.cfg) return err }
func Open(cfg *config.Config) (*Ledis, error) { if len(cfg.DataDir) == 0 { cfg.DataDir = config.DefaultDataDir } if cfg.Databases == 0 { cfg.Databases = 16 } else if cfg.Databases > MaxDatabases { cfg.Databases = MaxDatabases } os.MkdirAll(cfg.DataDir, 0755) var err error l := new(Ledis) l.cfg = cfg if l.lock, err = filelock.Lock(path.Join(cfg.DataDir, "LOCK")); err != nil { return nil, err } l.quit = make(chan struct{}) if l.ldb, err = store.Open(cfg); err != nil { return nil, err } if cfg.UseReplication { if l.r, err = rpl.NewReplication(cfg); err != nil { return nil, err } l.rc = make(chan struct{}, 1) l.rbatch = l.ldb.NewWriteBatch() l.rDoneCh = make(chan struct{}, 1) l.wg.Add(1) go l.onReplication() //first we must try wait all replication ok //maybe some logs are not committed l.WaitReplication() } else { l.r = nil } l.dbs = make(map[int]*DB, 16) l.checkTTL() return l, nil }
func Open(cfg *config.Config) (*Ledis, error) { if len(cfg.DataDir) == 0 { fmt.Printf("no datadir set, use default %s\n", config.DefaultDataDir) cfg.DataDir = config.DefaultDataDir } ldb, err := store.Open(cfg) if err != nil { return nil, err } l := new(Ledis) l.quit = make(chan struct{}) l.jobs = new(sync.WaitGroup) l.ldb = ldb if cfg.BinLog.MaxFileNum > 0 && cfg.BinLog.MaxFileSize > 0 { println("binlog will be refactored later, use your own risk!!!") l.binlog, err = NewBinLog(cfg) if err != nil { return nil, err } } else { l.binlog = nil } for i := uint8(0); i < MaxDBNumber; i++ { l.dbs[i] = newDB(l, i) } l.activeExpireCycle() return l, nil }
func main() { flag.Parse() if len(*configPath) == 0 { println("need ledis config file") return } cfg, err := config.NewConfigWithFile(*configPath) if err != nil { println(err.Error()) return } if len(*dataDir) > 0 { cfg.DataDir = *dataDir } if len(*dbName) > 0 { cfg.DBName = *dbName } db, err := store.Open(cfg) if err != nil { println(err.Error()) return } // upgrade: ttl time key 101 to ttl time key 103 wb := db.NewWriteBatch() for i := 0; i < cfg.Databases; i++ { minK, maxK := oldKeyPair(uint8(i)) it := db.RangeIterator(minK, maxK, store.RangeROpen) num := 0 for ; it.Valid(); it.Next() { dt, k, t, err := decodeOldKey(uint8(i), it.RawKey()) if err != nil { continue } newKey := encodeNewKey(uint8(i), dt, k, t) wb.Put(newKey, it.RawValue()) wb.Delete(it.RawKey()) num++ if num%1024 == 0 { if err := wb.Commit(); err != nil { fmt.Printf("commit error :%s\n", err.Error()) } } } it.Close() if err := wb.Commit(); err != nil { fmt.Printf("commit error :%s\n", err.Error()) } } }