Skip to content

Commit ed0cde6

Browse files
committed
internal: clean up tests to use the new key format
Also improve some of the update code to use existing routines.
1 parent 1dc0749 commit ed0cde6

File tree

15 files changed

+1077
-1066
lines changed

15 files changed

+1077
-1066
lines changed

internal/base/internal_test.go

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -133,21 +133,21 @@ func TestInternalKeySeparator(t *testing.T) {
133133
b string
134134
expected string
135135
}{
136-
{"foo.SET.100", "foo.SET.99", "foo.SET.100"},
137-
{"foo.SET.100", "foo.SET.100", "foo.SET.100"},
138-
{"foo.SET.100", "foo.DEL.100", "foo.SET.100"},
139-
{"foo.SET.100", "foo.SET.101", "foo.SET.100"},
140-
{"foo.SET.100", "bar.SET.99", "foo.SET.100"},
141-
{"foo.SET.100", "hello.SET.200", "g.SEPARATOR.72057594037927935"},
142-
{"ABC1AAAAA.SET.100", "ABC2ABB.SET.200", "ABC2.SEPARATOR.72057594037927935"},
143-
{"AAA1AAA.SET.100", "AAA2AA.SET.200", "AAA2.SEPARATOR.72057594037927935"},
144-
{"AAA1AAA.SET.100", "AAA4.SET.200", "AAA2.SEPARATOR.72057594037927935"},
145-
{"AAA1AAA.SET.100", "AAA2.SET.200", "AAA1B.SEPARATOR.72057594037927935"},
146-
{"AAA1AAA.SET.100", "AAA2A.SET.200", "AAA2.SEPARATOR.72057594037927935"},
147-
{"AAA1.SET.100", "AAA2.SET.200", "AAA1.SET.100"},
148-
{"foo.SET.100", "foobar.SET.200", "foo.SET.100"},
149-
{"foobar.SET.100", "foo.SET.200", "foobar.SET.100"},
150-
{"foo.INGESTSST.100", "foo.INGESTSST.99", "foo.INGESTSST.100"},
136+
{"foo#100,SET", "foo#99,SET", "foo#100,SET"},
137+
{"foo#100,SET", "foo#100,SET", "foo#100,SET"},
138+
{"foo#100,SET", "foo#100,DEL", "foo#100,SET"},
139+
{"foo#100,SET", "foo#101,SET", "foo#100,SET"},
140+
{"foo#100,SET", "bar#99,SET", "foo#100,SET"},
141+
{"foo#100,SET", "hello#200,SET", "g#72057594037927935,SEPARATOR"},
142+
{"ABC1AAAAA#100,SET", "ABC2ABB#200,SET", "ABC2#72057594037927935,SEPARATOR"},
143+
{"AAA1AAA#100,SET", "AAA2AA#200,SET", "AAA2#72057594037927935,SEPARATOR"},
144+
{"AAA1AAA#100,SET", "AAA4#200,SET", "AAA2#72057594037927935,SEPARATOR"},
145+
{"AAA1AAA#100,SET", "AAA2#200,SET", "AAA1B#72057594037927935,SEPARATOR"},
146+
{"AAA1AAA#100,SET", "AAA2A#200,SET", "AAA2#72057594037927935,SEPARATOR"},
147+
{"AAA1#100,SET", "AAA2#200,SET", "AAA1#100,SET"},
148+
{"foo#100,SET", "foobar#200,SET", "foo#100,SET"},
149+
{"foobar#100,SET", "foo#200,SET", "foobar#100,SET"},
150+
{"foo#100,INGESTSST", "foo#99,INGESTSST", "foo#100,INGESTSST"},
151151
}
152152
d := DefaultComparer
153153
for _, c := range testCases {

internal/compact/iterator_test.go

Lines changed: 30 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import (
2020
"github.com/cockroachdb/pebble/internal/base"
2121
"github.com/cockroachdb/pebble/internal/keyspan"
2222
"github.com/cockroachdb/pebble/internal/rangekey"
23+
"github.com/cockroachdb/pebble/sstable"
2324
"github.com/cockroachdb/pebble/sstable/valblk"
2425
"github.com/stretchr/testify/require"
2526
)
@@ -112,47 +113,57 @@ func TestCompactionIter(t *testing.T) {
112113
kvs = kvs[:0]
113114
rangeKeys = rangeKeys[:0]
114115
rangeDels = rangeDels[:0]
116+
117+
parsed, err := sstable.ParseTestKVsAndSpans(d.Input, nil /* bv */)
118+
require.NoError(t, err)
119+
115120
rangeDelFragmenter := keyspan.Fragmenter{
116121
Cmp: base.DefaultComparer.Compare,
117122
Format: base.DefaultComparer.FormatKey,
118123
Emit: func(s keyspan.Span) {
119124
rangeDels = append(rangeDels, s)
120125
},
121126
}
122-
for _, key := range strings.Split(d.Input, "\n") {
123-
// If the line ends in a '}' assume it's a span.
124-
if strings.HasSuffix(key, "}") {
125-
s := keyspan.ParseSpan(strings.TrimSpace(key))
126-
rangeKeys = append(rangeKeys, s)
127+
128+
for _, kv := range parsed {
129+
if kv.IsKeySpan() {
130+
// Pre-fragmented range key span
131+
if rangekey.IsRangeKey(kv.Span.Keys[0].Kind()) {
132+
rangeKeys = append(rangeKeys, *kv.Span)
133+
} else {
134+
// Range delete - add to fragmenter.
135+
rangeDelFragmenter.Add(*kv.Span)
136+
}
127137
continue
128138
}
129139

130-
j := strings.Index(key, ":")
131-
ik := base.ParseInternalKey(key[:j])
132-
if rangekey.IsRangeKey(ik.Kind()) {
140+
// Point key - check for range keys and range deletes
141+
if rangekey.IsRangeKey(kv.Key.Kind()) {
133142
panic("range keys must be pre-fragmented and formatted as spans")
134143
}
135-
if ik.Kind() == base.InternalKeyKindRangeDelete {
144+
145+
if kv.Key.Kind() == base.InternalKeyKindRangeDelete {
146+
// Range delete in old format: key#seq,RANGEDEL = endKey
136147
rangeDelFragmenter.Add(keyspan.Span{
137-
Start: ik.UserKey,
138-
End: []byte(key[j+1:]),
139-
Keys: []keyspan.Key{{Trailer: ik.Trailer}},
148+
Start: kv.Key.UserKey,
149+
End: kv.Value,
150+
Keys: []keyspan.Key{{Trailer: kv.Key.Trailer}},
140151
})
141152
continue
142153
}
143154

144155
var iv base.InternalValue
145-
if strings.HasPrefix(key[j+1:], "varint(") {
146-
valueStr := strings.TrimSuffix(strings.TrimPrefix(key[j+1:], "varint("), ")")
147-
v, err := strconv.ParseUint(valueStr, 10, 64)
156+
valueStr := string(kv.Value)
157+
if strings.HasPrefix(valueStr, "varint(") {
158+
v, err := strconv.ParseUint(strings.TrimSuffix(strings.TrimPrefix(valueStr, "varint("), ")"), 10, 64)
148159
require.NoError(t, err)
149160
iv = base.MakeInPlaceValue(binary.AppendUvarint([]byte(nil), v))
150-
} else if strings.HasPrefix(key[j+1:], "blobref(") {
151-
iv = decodeBlobReference(t, key[j+1:])
161+
} else if strings.HasPrefix(valueStr, "blobref(") {
162+
iv = decodeBlobReference(t, valueStr)
152163
} else {
153-
iv = base.MakeInPlaceValue([]byte(key[j+1:]))
164+
iv = base.MakeInPlaceValue(kv.Value)
154165
}
155-
kvs = append(kvs, base.InternalKV{K: ik, V: iv})
166+
kvs = append(kvs, base.InternalKV{K: kv.Key, V: iv})
156167
}
157168
rangeDelFragmenter.Finish()
158169
return ""

0 commit comments

Comments
 (0)