func (r *rocksDBBatch) Commit() error { if r.batch == nil { panic("this batch was already committed") } r.distinctOpen = false if r.flushes > 0 { // We've previously flushed mutations to the C++ batch, so we have to flush // any remaining mutations as well and then commit the batch. r.flushMutations() if err := statusToError(C.DBCommitBatch(r.batch)); err != nil { return err } } else if r.builder.count > 0 { // Fast-path which avoids flushing mutations to the C++ batch. Instead, we // directly apply the mutations to the database. if err := r.parent.ApplyBatchRepr(r.builder.Finish()); err != nil { return err } } C.DBClose(r.batch) r.batch = nil return nil }
func (r *rocksDBBatch) Close() { if i := &r.prefixIter.rocksDBIterator; i.iter != nil { i.destroy() } if i := &r.normalIter.rocksDBIterator; i.iter != nil { i.destroy() } if r.batch != nil { C.DBClose(r.batch) } }
func (r *rocksDBBatch) Close() { r.distinct.close() if i := &r.prefixIter.iter; i.iter != nil { i.destroy() } if i := &r.normalIter.iter; i.iter != nil { i.destroy() } if r.batch != nil { C.DBClose(r.batch) } }
// Close closes the database by deallocating the underlying handle. func (r *RocksDB) Close() { if atomic.AddInt32(&r.refcount, -1) > 0 { return } if len(r.dir) == 0 { log.Infof("closing in-memory rocksdb instance") } else { log.Infof("closing rocksdb instance at %q", r.dir) } if r.rdb != nil { C.DBClose(r.rdb) r.rdb = nil } }
// Close closes the database by deallocating the underlying handle. func (r *RocksDB) Close() { if r.rdb == nil { log.Errorf("closing unopened rocksdb instance") return } if len(r.dir) == 0 { log.Infof("closing in-memory rocksdb instance") } else { log.Infof("closing rocksdb instance at %q", r.dir) } if r.rdb != nil { C.DBClose(r.rdb) r.rdb = nil } close(r.deallocated) }
func (r *rocksDBBatch) Commit() error { if r.batch == nil { panic("this batch was already committed") } if err := statusToError(C.DBWriteBatch(r.batch)); err != nil { return err } C.DBClose(r.batch) r.batch = nil // On success, run the deferred functions in reverse order. for i := len(r.defers) - 1; i >= 0; i-- { r.defers[i]() } r.defers = nil return nil }
// Close closes the database by deallocating the underlying handle. func (r *RocksDB) Close() { if r.rdb == nil { log.Errorf(context.TODO(), "closing unopened rocksdb instance") return } if len(r.dir) == 0 { if log.V(1) { log.Infof(context.TODO(), "closing in-memory rocksdb instance") } } else { log.Infof(context.TODO(), "closing rocksdb instance at %q", r.dir) } if r.rdb != nil { C.DBClose(r.rdb) r.rdb = nil } r.cache.Release() close(r.deallocated) }
func (r *rocksDBBatch) Commit() error { if r.closed() { panic("this batch was already committed") } start := timeutil.Now() var count, size int r.distinctOpen = false if r.flushes > 0 { // We've previously flushed mutations to the C++ batch, so we have to flush // any remaining mutations as well and then commit the batch. r.flushMutations() if err := statusToError(C.DBCommitAndCloseBatch(r.batch)); err != nil { return err } r.batch = nil count, size = r.flushedCount, r.flushedSize } else if r.builder.count > 0 { count, size = r.builder.count, len(r.builder.repr) // Fast-path which avoids flushing mutations to the C++ batch. Instead, we // directly apply the mutations to the database. if err := r.parent.ApplyBatchRepr(r.builder.Finish()); err != nil { return err } C.DBClose(r.batch) r.batch = nil } const batchCommitWarnThreshold = 500 * time.Millisecond if elapsed := timeutil.Since(start); elapsed >= batchCommitWarnThreshold { log.Warningf(context.TODO(), "batch [%d/%d/%d] commit took %s (>%s):\n%s", count, size, r.flushes, elapsed, batchCommitWarnThreshold, debug.Stack()) } return nil }
func (r *rocksDBBatch) Close() { if r.batch != nil { C.DBClose(r.batch) } }
// Close releases the snapshot handle. func (r *rocksDBSnapshot) Close() { C.DBClose(r.handle) }