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) Commit() error { if r.batch == nil { panic("this batch was already committed") } if err := statusToError(C.DBCommitBatch(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 }
func (r *rocksDBBatch) Commit() error { if r.batch == nil { 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.DBCommitBatch(r.batch)); err != nil { return err } 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 } } 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()) } C.DBClose(r.batch) r.batch = nil return nil }