github.com/decred/dcrlnd@v0.7.6/batch/interface.go (about) 1 package batch 2 3 import "github.com/decred/dcrlnd/kvdb" 4 5 // Request defines an operation that can be batched into a single bbolt 6 // transaction. 7 type Request struct { 8 // Reset is called before each invocation of Update and is used to clear 9 // any possible modifications to local state as a result of previous 10 // calls to Update that were not committed due to a concurrent batch 11 // failure. 12 // 13 // NOTE: This field is optional. 14 Reset func() 15 16 // Update is applied alongside other operations in the batch. 17 // 18 // NOTE: This method MUST NOT acquire any mutexes. 19 Update func(tx kvdb.RwTx) error 20 21 // OnCommit is called if the batch or a subset of the batch including 22 // this request all succeeded without failure. The passed error should 23 // contain the result of the transaction commit, as that can still fail 24 // even if none of the closures returned an error. 25 // 26 // NOTE: This field is optional. 27 OnCommit func(commitErr error) error 28 29 // lazy should be true if we don't have to immediately execute this 30 // request when it comes in. This means that it can be scheduled later, 31 // allowing larger batches. 32 lazy bool 33 } 34 35 // SchedulerOption is a type that can be used to supply options to a scheduled 36 // request. 37 type SchedulerOption func(r *Request) 38 39 // LazyAdd will make the request be executed lazily, added to the next batch to 40 // reduce db contention. 41 func LazyAdd() SchedulerOption { 42 return func(r *Request) { 43 r.lazy = true 44 } 45 } 46 47 // Scheduler abstracts a generic batching engine that accumulates an incoming 48 // set of Requests, executes them, and returns the error from the operation. 49 type Scheduler interface { 50 // Execute schedules a Request for execution with the next available 51 // batch. This method blocks until the the underlying closure has been 52 // run against the database. The resulting error is returned to the 53 // caller. 54 Execute(req *Request) error 55 }