// SetSnapshot causes reads to provided as they were when the passed in // Snapshot was created by DB.NewSnapshot. This is useful for getting // consistent reads during a bulk operation. // // See the LevelDB documentation for details. func (ro *ReadOptions) SetSnapshot(snap *Snapshot) { var s *C.rocksdb_snapshot_t if snap != nil { s = snap.snap } C.rocksdb_readoptions_set_snapshot(ro.Opt, s) }
func (db *DB) NewReadOptions(createSnapshot bool) *ReadOptions { var opt = new(ReadOptions) opt.rOpt = C.rocksdb_readoptions_create() if createSnapshot { opt.snap = C.rocksdb_create_snapshot(db.db) C.rocksdb_readoptions_set_snapshot(opt.rOpt, opt.snap) opt.db = db.db } return opt }
// GetSnapshot returns the value for the given key from the given // snapshotID, nil otherwise. func (r *RocksDB) GetSnapshot(key Key, snapshotID string) ([]byte, error) { snapshotHandle, ok := r.snapshots[snapshotID] if !ok { return nil, util.Errorf("snapshotID %s does not exist", snapshotID) } opts := C.rocksdb_readoptions_create() C.rocksdb_readoptions_set_snapshot(opts, snapshotHandle) defer C.rocksdb_readoptions_destroy(opts) return r.getInternal(key, opts) }
// ScanSnapshot returns up to max key/value objects starting from // start (inclusive) and ending at end (non-inclusive) from the // given snapshotID. // Specify max=0 for unbounded scans. func (r *RocksDB) ScanSnapshot(start, end Key, max int64, snapshotID string) ([]proto.RawKeyValue, error) { snapshotHandle, ok := r.snapshots[snapshotID] if !ok { return nil, util.Errorf("snapshotID %s does not exist", snapshotID) } opts := C.rocksdb_readoptions_create() C.rocksdb_readoptions_set_fill_cache(opts, 0) C.rocksdb_readoptions_set_snapshot(opts, snapshotHandle) defer C.rocksdb_readoptions_destroy(opts) return r.scanInternal(start, end, max, opts) }
// If snapshot is set, read as of the supplied snapshot // which must belong to the DB that is being read and which must // not have been released. // Default: nil func (self *ReadOptions) SetSnapshot(snap *Snapshot) { C.rocksdb_readoptions_set_snapshot(self.c, snap.c) }