Skip to content

Commit 0bf4046

Browse files
author
Anthony Romano
authored
Merge pull request #8428 from heyitsanthony/mvcc-revisions
mvcc: Revisions() method for index to avoid key allocation
2 parents 02c6f0d + f58c0cf commit 0bf4046

File tree

3 files changed

+19
-1
lines changed

3 files changed

+19
-1
lines changed

mvcc/index.go

+13
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import (
2424
type index interface {
2525
Get(key []byte, atRev int64) (rev, created revision, ver int64, err error)
2626
Range(key, end []byte, atRev int64) ([][]byte, []revision)
27+
Revisions(key, end []byte, atRev int64) []revision
2728
Put(key []byte, rev revision)
2829
Tombstone(key []byte, rev revision) error
2930
RangeSince(key, end []byte, rev int64) []revision
@@ -84,6 +85,18 @@ func (ti *treeIndex) keyIndex(keyi *keyIndex) *keyIndex {
8485
return nil
8586
}
8687

88+
func (ti *treeIndex) Revisions(key, end []byte, atRev int64) (revs []revision) {
89+
if end == nil {
90+
rev, _, _, err := ti.Get(key, atRev)
91+
if err != nil {
92+
return nil
93+
}
94+
return []revision{rev}
95+
}
96+
_, rev := ti.Range(key, end, atRev)
97+
return rev
98+
}
99+
87100
func (ti *treeIndex) Range(key, end []byte, atRev int64) (keys [][]byte, revs []revision) {
88101
if end == nil {
89102
rev, _, _, err := ti.Get(key, atRev)

mvcc/kvstore_test.go

+5
Original file line numberDiff line numberDiff line change
@@ -741,6 +741,11 @@ type fakeIndex struct {
741741
indexCompactRespc chan map[revision]struct{}
742742
}
743743

744+
func (i *fakeIndex) Revisions(key, end []byte, atRev int64) []revision {
745+
_, rev := i.Range(key, end, atRev)
746+
return rev
747+
}
748+
744749
func (i *fakeIndex) Get(key []byte, atRev int64) (rev, created revision, ver int64, err error) {
745750
i.Recorder.Record(testutil.Action{Name: "get", Params: []interface{}{key, atRev}})
746751
r := <-i.indexGetRespc

mvcc/kvstore_txn.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ func (tr *storeTxnRead) rangeKeys(key, end []byte, curRev int64, ro RangeOptions
120120
return &RangeResult{KVs: nil, Count: -1, Rev: 0}, ErrCompacted
121121
}
122122

123-
_, revpairs := tr.s.kvindex.Range(key, end, int64(rev))
123+
revpairs := tr.s.kvindex.Revisions(key, end, int64(rev))
124124
if len(revpairs) == 0 {
125125
return &RangeResult{KVs: nil, Count: 0, Rev: curRev}, nil
126126
}

0 commit comments

Comments
 (0)