diff --git a/chotki.go b/chotki.go index 21acefc..dd79ba1 100644 --- a/chotki.go +++ b/chotki.go @@ -124,8 +124,21 @@ func (o *Options) SetDefaults() { } o.Merger = &pebble.Merger{ - Name: "CRDT", - Merge: PebbleAdaptorMerge, + Name: "CRDT", + Merge: func(key, value []byte) (pebble.ValueMerger, error) { + /*if len(key) != 10 { + return nil, nil + }*/ + target := make([]byte, len(value)) + copy(target, value) + id, rdt := OKeyIdRdt(key) + pma := PebbleMergeAdaptor{ + id: id, + rdt: rdt, + vals: [][]byte{target}, + } + return &pma, nil + }, } if o.Logger == nil { diff --git a/merge.go b/merge.go index 6079da4..6a3580a 100644 --- a/merge.go +++ b/merge.go @@ -4,7 +4,6 @@ import ( "io" "slices" - "github.com/cockroachdb/pebble" "github.com/drpcorg/chotki/rdx" ) @@ -13,42 +12,23 @@ type Merger interface { Merge(inputs [][]byte) []byte } -func PebbleAdaptorMerge(key, value []byte) (pebble.ValueMerger, error) { - /*if len(key) != 10 { - return nil, nil - }*/ - id, rdt := OKeyIdRdt(key) - pma := PebbleMergeAdaptor{ - id: id, - rdt: rdt, - vals: make([][]byte, 0, 16), - bulk: make([]byte, 0, 4096), - } - pma.AddInput(value) - return &pma, nil -} - type PebbleMergeAdaptor struct { id rdx.ID rdt byte old bool vals [][]byte - bulk []byte -} - -func (a *PebbleMergeAdaptor) AddInput(input []byte) { - l := len(a.bulk) - a.bulk = append(a.bulk, input...) - copy(a.bulk[l:], input) - a.vals = append(a.vals, a.bulk[l:]) } func (a *PebbleMergeAdaptor) MergeNewer(value []byte) error { - a.AddInput(value) + target := make([]byte, len(value)) + copy(target, value) + a.vals = append(a.vals, target) return nil } func (a *PebbleMergeAdaptor) MergeOlder(value []byte) error { - a.AddInput(value) + target := make([]byte, len(value)) + copy(target, value) + a.vals = append(a.vals, target) a.old = true return nil } @@ -62,11 +42,5 @@ func (a *PebbleMergeAdaptor) Finish(includesBase bool) (res []byte, cl io.Closer return nil, nil, nil } res = rdx.Xmerge(a.rdt, inputs) - return res, a, nil -} - -func (a *PebbleMergeAdaptor) Close() error { - a.vals = nil - a.bulk = nil - return nil + return res, nil, nil }