コード例 #1
0
ファイル: snapshot_command.go プロジェクト: xingfeng2510/etcd
// makeDB copies the database snapshot to the snapshot directory
func makeDB(snapdir, dbfile string) {
	f, ferr := os.OpenFile(dbfile, os.O_RDONLY, 0600)
	if ferr != nil {
		ExitWithError(ExitInvalidInput, ferr)
	}
	defer f.Close()

	if err := os.MkdirAll(snapdir, 0755); err != nil {
		ExitWithError(ExitIO, err)
	}

	dbpath := path.Join(snapdir, "db")
	db, dberr := os.OpenFile(dbpath, os.O_WRONLY|os.O_CREATE, 0600)
	if dberr != nil {
		ExitWithError(ExitIO, dberr)
	}
	if _, err := io.Copy(db, f); err != nil {
		ExitWithError(ExitIO, err)
	}
	db.Close()

	// update consistentIndex so applies go through on etcdserver despite
	// having a new raft instance
	be := backend.NewDefaultBackend(dbpath)
	s := storage.NewStore(be, nil, &initIndex{})
	id := s.TxnBegin()
	btx := be.BatchTx()
	del := func(k, v []byte) error {
		_, _, err := s.TxnDeleteRange(id, k, nil)
		return err
	}
	// delete stored members from old cluster since using new members
	btx.UnsafeForEach([]byte("members"), del)
	btx.UnsafeForEach([]byte("members_removed"), del)
	// trigger write-out of new consistent index
	s.TxnEnd(id)
	s.Commit()
	s.Close()
}
コード例 #2
0
ファイル: storage.go プロジェクト: zhuleilei/etcd
func initStorage() {
	s = storage.NewStore("storage-bench", time.Duration(batchInterval), batchLimit)
	os.Remove("storage-bench") // boltDB has an opened fd, so removing the file is ok
}
コード例 #3
0
ファイル: storage.go プロジェクト: vanloswang/etcd
func initStorage() {
	be := backend.New("storage-bench", time.Duration(batchInterval), batchLimit)
	s = storage.NewStore(be, &lease.FakeLessor{})
	os.Remove("storage-bench") // boltDB has an opened fd, so removing the file is ok
}