added KVWriter.NewBatchEx() method
This commit is contained in:
parent
fb048f6c64
commit
d94ccf2d74
|
@ -23,6 +23,10 @@ func (w *Writer) NewBatch() store.KVBatch {
|
||||||
return store.NewEmulatedBatch(w.store.mo)
|
return store.NewEmulatedBatch(w.store.mo)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (w *Writer) NewBatchEx(options store.KVBatchOptions) ([]byte, store.KVBatch, error) {
|
||||||
|
return make([]byte, options.TotalBytes), w.NewBatch(), nil
|
||||||
|
}
|
||||||
|
|
||||||
func (w *Writer) ExecuteBatch(batch store.KVBatch) error {
|
func (w *Writer) ExecuteBatch(batch store.KVBatch) error {
|
||||||
|
|
||||||
emulatedBatch, ok := batch.(*store.EmulatedBatch)
|
emulatedBatch, ok := batch.(*store.EmulatedBatch)
|
||||||
|
|
|
@ -29,6 +29,10 @@ func (w *Writer) NewBatch() store.KVBatch {
|
||||||
return &rv
|
return &rv
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (w *Writer) NewBatchEx(options store.KVBatchOptions) ([]byte, store.KVBatch, error) {
|
||||||
|
return make([]byte, options.TotalBytes), w.NewBatch(), nil
|
||||||
|
}
|
||||||
|
|
||||||
func (w *Writer) ExecuteBatch(b store.KVBatch) error {
|
func (w *Writer) ExecuteBatch(b store.KVBatch) error {
|
||||||
batch, ok := b.(*Batch)
|
batch, ok := b.(*Batch)
|
||||||
if !ok {
|
if !ok {
|
||||||
|
|
|
@ -29,6 +29,10 @@ func (w *Writer) NewBatch() store.KVBatch {
|
||||||
return store.NewEmulatedBatch(w.s.mo)
|
return store.NewEmulatedBatch(w.s.mo)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (w *Writer) NewBatchEx(options store.KVBatchOptions) ([]byte, store.KVBatch, error) {
|
||||||
|
return make([]byte, options.TotalBytes), w.NewBatch(), nil
|
||||||
|
}
|
||||||
|
|
||||||
func (w *Writer) ExecuteBatch(batch store.KVBatch) error {
|
func (w *Writer) ExecuteBatch(batch store.KVBatch) error {
|
||||||
|
|
||||||
emulatedBatch, ok := batch.(*store.EmulatedBatch)
|
emulatedBatch, ok := batch.(*store.EmulatedBatch)
|
||||||
|
|
|
@ -94,6 +94,14 @@ type KVWriter interface {
|
||||||
// NewBatch returns a KVBatch for performaing batch operations on this kvstore
|
// NewBatch returns a KVBatch for performaing batch operations on this kvstore
|
||||||
NewBatch() KVBatch
|
NewBatch() KVBatch
|
||||||
|
|
||||||
|
// NewBatchEx returns a KVBatch and an associated byte array
|
||||||
|
// that's pre-sized based on the KVBatchOptions. The caller can
|
||||||
|
// use the returned byte array for keys and values associated with
|
||||||
|
// the batch. Once the batch is either executed or closed, the
|
||||||
|
// associated byte array should no longer be accessed by the
|
||||||
|
// caller.
|
||||||
|
NewBatchEx(KVBatchOptions) ([]byte, KVBatch, error)
|
||||||
|
|
||||||
// ExecuteBatch will execute the KVBatch, the provided KVBatch **MUST** have
|
// ExecuteBatch will execute the KVBatch, the provided KVBatch **MUST** have
|
||||||
// been created by the same KVStore (though not necessarily the same KVWriter)
|
// been created by the same KVStore (though not necessarily the same KVWriter)
|
||||||
// Batch execution is atomic, either all the operations or none will be performed
|
// Batch execution is atomic, either all the operations or none will be performed
|
||||||
|
@ -103,6 +111,27 @@ type KVWriter interface {
|
||||||
Close() error
|
Close() error
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// KVBatchOptions provides the KVWriter.NewBatchEx() method with batch
|
||||||
|
// preparation and preallocation information.
|
||||||
|
type KVBatchOptions struct {
|
||||||
|
// TotalBytes is the sum of key and value bytes needed by the
|
||||||
|
// caller for the entire batch. It affects the size of the
|
||||||
|
// returned byte array of KVWrite.NewBatchEx().
|
||||||
|
TotalBytes int
|
||||||
|
|
||||||
|
// NumSets is the number of Set() calls the caller will invoke on
|
||||||
|
// the KVBatch.
|
||||||
|
NumSets int
|
||||||
|
|
||||||
|
// NumMerges is the number of Merge() calls the caller will invoke
|
||||||
|
// on the KVBatch.
|
||||||
|
NumDeletes int
|
||||||
|
|
||||||
|
// NumMerges is the number of Merge() calls the caller will invoke
|
||||||
|
// on the KVBatch.
|
||||||
|
NumMerges int
|
||||||
|
}
|
||||||
|
|
||||||
// KVBatch is an abstraction for making multiple KV mutations at once
|
// KVBatch is an abstraction for making multiple KV mutations at once
|
||||||
type KVBatch interface {
|
type KVBatch interface {
|
||||||
|
|
||||||
|
|
|
@ -23,6 +23,10 @@ func (w *Writer) NewBatch() store.KVBatch {
|
||||||
return &Batch{s: w.s, o: w.o.NewBatch()}
|
return &Batch{s: w.s, o: w.o.NewBatch()}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (w *Writer) NewBatchEx(options store.KVBatchOptions) ([]byte, store.KVBatch, error) {
|
||||||
|
return make([]byte, options.TotalBytes), w.NewBatch(), nil
|
||||||
|
}
|
||||||
|
|
||||||
func (w *Writer) ExecuteBatch(b store.KVBatch) (err error) {
|
func (w *Writer) ExecuteBatch(b store.KVBatch) (err error) {
|
||||||
batch, ok := b.(*Batch)
|
batch, ok := b.(*Batch)
|
||||||
if !ok {
|
if !ok {
|
||||||
|
|
|
@ -96,6 +96,10 @@ func (w *writer) NewBatch() store.KVBatch {
|
||||||
return &batch{}
|
return &batch{}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (w *writer) NewBatchEx(options store.KVBatchOptions) ([]byte, store.KVBatch, error) {
|
||||||
|
return make([]byte, options.TotalBytes), w.NewBatch(), nil
|
||||||
|
}
|
||||||
|
|
||||||
func (w *writer) ExecuteBatch(store.KVBatch) error {
|
func (w *writer) ExecuteBatch(store.KVBatch) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user