Skip to content

Commit 11f559f

Browse files
committed
tool: use VersionEdit.DebugString in manifest dump
Use the VersionEdit.DebugString helper to format version edits within the `manifest dump` command, removing duplicate code. This also fixes a bug where blob file and blob reference components of a version edit were not printed. Informs #112.
1 parent b10c0e8 commit 11f559f

File tree

4 files changed

+84
-103
lines changed

4 files changed

+84
-103
lines changed

internal/manifest/testdata/version_edit_decode

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@ decode
1010
----
1111
011a6c6576656c64622e4279746577697365436f6d70617261746f720302
1212
0400020203030409
13-
comparer: leveldb.BytewiseComparator log-num: 2
13+
comparer: leveldb.BytewiseComparator
14+
log-num: 2
1415
next-file-num: 3
1516
last-seq-num: 9
1617

@@ -24,7 +25,8 @@ decode
2425
----
2526
011a6c6576656c64622e4279746577697365436f6d70617261746f720202
2627
03070400
27-
comparer: leveldb.BytewiseComparator log-num: 2
28+
comparer: leveldb.BytewiseComparator
29+
log-num: 2
2830
next-file-num: 7
2931

3032
decode

internal/manifest/version_edit.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -560,7 +560,7 @@ func (v *VersionEdit) Decode(r io.Reader) error {
560560
func (v *VersionEdit) string(verbose bool, fmtKey base.FormatKey) string {
561561
var buf bytes.Buffer
562562
if v.ComparerName != "" {
563-
fmt.Fprintf(&buf, " comparer: %s", v.ComparerName)
563+
fmt.Fprintf(&buf, " comparer: %s\n", v.ComparerName)
564564
}
565565
if v.MinUnflushedLogNum != 0 {
566566
fmt.Fprintf(&buf, " log-num: %d\n", v.MinUnflushedLogNum)

tool/manifest.go

Lines changed: 4 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,8 @@ package tool
66

77
import (
88
"bytes"
9-
"cmp"
109
"fmt"
1110
"io"
12-
"slices"
1311
"time"
1412

1513
"github.com/HdrHistogram/hdrhistogram-go"
@@ -194,67 +192,15 @@ func (m *manifestT) runDump(cmd *cobra.Command, args []string) {
194192
continue
195193
}
196194

197-
empty := true
198195
if ve.ComparerName != "" {
199-
empty = false
200-
fmt.Fprintf(stdout, " comparer: %s", ve.ComparerName)
201196
comparer = m.comparers[ve.ComparerName]
202197
if comparer == nil {
203-
fmt.Fprintf(stdout, " (unknown)")
198+
fmt.Fprintf(stderr, " comparer %q unknown\n", ve.ComparerName)
204199
}
205-
fmt.Fprintf(stdout, "\n")
206200
m.fmtKey.setForComparer(ve.ComparerName, m.comparers)
207201
}
208-
if ve.MinUnflushedLogNum != 0 {
209-
empty = false
210-
fmt.Fprintf(stdout, " log-num: %d\n", ve.MinUnflushedLogNum)
211-
}
212-
if ve.ObsoletePrevLogNum != 0 {
213-
empty = false
214-
fmt.Fprintf(stdout, " prev-log-num: %d\n", ve.ObsoletePrevLogNum)
215-
}
216-
if ve.NextFileNum != 0 {
217-
empty = false
218-
fmt.Fprintf(stdout, " next-file-num: %d\n", ve.NextFileNum)
219-
}
220-
if ve.LastSeqNum != 0 {
221-
empty = false
222-
fmt.Fprintf(stdout, " last-seq-num: %d\n", ve.LastSeqNum)
223-
}
224-
entries := make([]manifest.DeletedTableEntry, 0, len(ve.DeletedTables))
225-
for df := range ve.DeletedTables {
226-
empty = false
227-
entries = append(entries, df)
228-
}
229-
slices.SortFunc(entries, func(a, b manifest.DeletedTableEntry) int {
230-
if v := cmp.Compare(a.Level, b.Level); v != 0 {
231-
return v
232-
}
233-
return cmp.Compare(a.FileNum, b.FileNum)
234-
})
235-
for _, df := range entries {
236-
fmt.Fprintf(stdout, " deleted: L%d %s\n", df.Level, df.FileNum)
237-
}
238-
for _, nf := range ve.NewTables {
239-
empty = false
240-
fmt.Fprintf(stdout, " added: L%d %s:%d",
241-
nf.Level, nf.Meta.TableNum, nf.Meta.Size)
242-
formatSeqNumRange(stdout, nf.Meta.SmallestSeqNum, nf.Meta.LargestSeqNum)
243-
smallest := nf.Meta.Smallest()
244-
largest := nf.Meta.Largest()
245-
formatKeyRange(stdout, m.fmtKey, &smallest, &largest)
246-
if nf.Meta.CreationTime != 0 {
247-
fmt.Fprintf(stdout, " (%s)",
248-
time.Unix(nf.Meta.CreationTime, 0).UTC().Format(time.RFC3339))
249-
}
250-
fmt.Fprintf(stdout, "\n")
251-
}
252-
if empty {
253-
// NB: An empty version edit can happen if we log a version edit with
254-
// a zero field. RocksDB does this with a version edit that contains
255-
// `LogNum == 0`.
256-
fmt.Fprintf(stdout, " <empty>\n")
257-
}
202+
203+
fmt.Fprint(stdout, ve.DebugString(m.fmtKey.fn))
258204
editIdx++
259205
}
260206

@@ -274,7 +220,7 @@ func (m *manifestT) runDump(cmd *cobra.Command, args []string) {
274220
}
275221

276222
func anyOverlap(cmp base.Compare, ve *manifest.VersionEdit, start, end key) bool {
277-
if start == nil && end == nil {
223+
if start == nil && end == nil || len(ve.NewTables) == 0 && len(ve.DeletedTables) == 0 {
278224
return true
279225
}
280226
for _, df := range ve.DeletedTables {

tool/testdata/manifest_dump

Lines changed: 75 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ MANIFEST-000006
3434
log-num: 5
3535
next-file-num: 6
3636
last-seq-num: 14
37-
added: L0 000004:709<#12-#14>[bar#14,DEL-foo#13,SET] (2023-12-04T17:57:25Z)
37+
add-table: L0 000004:[bar#14,DEL-foo#13,SET] seqnums:[12-14] points:[bar#14,DEL-foo#13,SET] size:709 (2023-12-04T17:57:25Z)
3838
EOF
3939
--- L0.0 ---
4040
000004:709<#12-#14>[bar#14,DEL-foo#13,SET]
@@ -63,7 +63,7 @@ MANIFEST-000006
6363
log-num: 5
6464
next-file-num: 6
6565
last-seq-num: 14
66-
added: L0 000004:709<#12-#14>[bar#14,DEL-foo#13,SET] (2023-12-04T17:57:25Z)
66+
add-table: L0 000004:[bar#14,DEL-foo#13,SET] seqnums:[12-14] points:[bar#14,DEL-foo#13,SET] size:709 (2023-12-04T17:57:25Z)
6767
EOF
6868
--- L0.0 ---
6969
000004:709<#12-#14>[bar#14,DEL-foo#13,SET]
@@ -122,7 +122,7 @@ MANIFEST-000006
122122
log-num: 5
123123
next-file-num: 6
124124
last-seq-num: 14
125-
added: L0 000004:709<#12-#14>[bar#14,DEL-foo#13,SET] (2023-12-04T17:57:25Z)
125+
add-table: L0 000004:[bar#14,DEL-foo#13,SET] seqnums:[12-14] points:[bar#14,DEL-foo#13,SET] size:709 (2023-12-04T17:57:25Z)
126126
EOF
127127
--- L0.0 ---
128128
000004:709<#12-#14>[bar#14,DEL-foo#13,SET]
@@ -146,7 +146,7 @@ MANIFEST-000006
146146
log-num: 5
147147
next-file-num: 6
148148
last-seq-num: 14
149-
added: L0 000004:709<#12-#14>[626172#14,DEL-666f6f#13,SET] (2023-12-04T17:57:25Z)
149+
add-table: L0 000004:[626172#14,DEL-666f6f#13,SET] seqnums:[12-14] points:[626172#14,DEL-666f6f#13,SET] size:709 (2023-12-04T17:57:25Z)
150150
EOF
151151
--- L0.0 ---
152152
000004:709<#12-#14>[626172#14,DEL-666f6f#13,SET]
@@ -170,7 +170,7 @@ MANIFEST-000006
170170
log-num: 5
171171
next-file-num: 6
172172
last-seq-num: 14
173-
added: L0 000004:709<#12-#14> (2023-12-04T17:57:25Z)
173+
add-table: L0 000004:[#14,DEL-#13,SET] seqnums:[12-14] points:[#14,DEL-#13,SET] size:709 (2023-12-04T17:57:25Z)
174174
EOF
175175
--- L0.0 ---
176176
000004:709<#12-#14>
@@ -194,7 +194,7 @@ MANIFEST-000006
194194
log-num: 5
195195
next-file-num: 6
196196
last-seq-num: 14
197-
added: L0 000004:709<#12-#14>[bar#14,DEL-foo#13,SET] (2023-12-04T17:57:25Z)
197+
add-table: L0 000004:[bar#14,DEL-foo#13,SET] seqnums:[12-14] points:[bar#14,DEL-foo#13,SET] size:709 (2023-12-04T17:57:25Z)
198198
EOF
199199
--- L0.0 ---
200200
000004:709<#12-#14>[bar#14,DEL-foo#13,SET]
@@ -218,7 +218,7 @@ MANIFEST-000006
218218
log-num: 5
219219
next-file-num: 6
220220
last-seq-num: 14
221-
added: L0 000004:709<#12-#14>[test formatter: bar#14,DEL-test formatter: foo#13,SET] (2023-12-04T17:57:25Z)
221+
add-table: L0 000004:[test formatter: bar#14,DEL-test formatter: foo#13,SET] seqnums:[12-14] points:[test formatter: bar#14,DEL-test formatter: foo#13,SET] size:709 (2023-12-04T17:57:25Z)
222222
EOF
223223
--- L0.0 ---
224224
000004:709<#12-#14>[test formatter: bar#14,DEL-test formatter: foo#13,SET]
@@ -262,13 +262,13 @@ MANIFEST-invalid
262262
log-num: 2
263263
next-file-num: 5
264264
last-seq-num: 20
265-
added: L6 000001:0<#2-#5>[#0,DEL-#0,DEL]
265+
add-table: L6 000001:[#0,DEL-#0,DEL] seqnums:[2-5] points:[#0,DEL-#0,DEL]
266266
65/1
267267
comparer: leveldb.BytewiseComparator
268268
log-num: 3
269269
next-file-num: 5
270270
last-seq-num: 20
271-
added: L6 000002:0<#1-#4>[#0,DEL-#0,DEL]
271+
add-table: L6 000002:[#0,DEL-#0,DEL] seqnums:[1-4] points:[#0,DEL-#0,DEL]
272272
EOF
273273
pebble: files 000002:[#0,DEL-#0,DEL] and 000001:[#0,DEL-#0,DEL] collided on sort keys
274274

@@ -303,38 +303,38 @@ MANIFEST-000001
303303
log-num: 4
304304
next-file-num: 6
305305
last-seq-num: 14
306-
added: L0 000005:647<#10-#14>[aaa#10,SET-ccc#14,MERGE] (2023-12-12T18:55:00Z)
306+
add-table: L0 000005:[aaa#10,SET-ccc#14,MERGE] seqnums:[10-14] points:[aaa#10,SET-ccc#14,MERGE] size:647 (2023-12-12T18:55:00Z)
307307
90/3
308308
next-file-num: 6
309309
last-seq-num: 14
310-
deleted: L0 000005
311-
added: L6 000005:647<#10-#14>[aaa#10,SET-ccc#14,MERGE] (2023-12-12T18:55:00Z)
310+
del-table: L0 000005
311+
add-table: L6 000005:[aaa#10,SET-ccc#14,MERGE] seqnums:[10-14] points:[aaa#10,SET-ccc#14,MERGE] size:647 (2023-12-12T18:55:00Z)
312312
143/4
313313
next-file-num: 7
314314
last-seq-num: 15
315-
added: L0 000006:680<#15-#15>[bbb#15,SET-ccc#15,SET] (2023-12-12T18:55:00Z)
315+
add-table: L0 000006:[bbb#15,SET-ccc#15,SET] seqnums:[15-15] points:[bbb#15,SET-ccc#15,SET] size:680 (2023-12-12T18:55:00Z)
316316
193/5
317317
next-file-num: 8
318318
last-seq-num: 16
319-
added: L6 000007:671<#16-#16>[ddd#16,SET-ddd#16,SET] (2023-12-12T18:55:00Z)
319+
add-table: L6 000007:[ddd#16,SET-ddd#16,SET] seqnums:[16-16] points:[ddd#16,SET-ddd#16,SET] size:671 (2023-12-12T18:55:00Z)
320320
243/6
321321
next-file-num: 9
322322
last-seq-num: 16
323-
deleted: L0 000006
324-
deleted: L6 000005
325-
added: L6 000008:738<#0-#15>[aaa#0,SET-ccc#0,MERGE] (2023-12-12T18:55:00Z)
323+
del-table: L0 000006
324+
del-table: L6 000005
325+
add-table: L6 000008:[aaa#0,SET-ccc#0,MERGE] seqnums:[0-15] points:[aaa#0,SET-ccc#0,MERGE] size:738 (2023-12-12T18:55:00Z)
326326
299/7
327327
log-num: 9
328328
next-file-num: 11
329329
last-seq-num: 19
330-
added: L0 000010:736<#17-#19>[aaa#17,DEL-eee#inf,RANGEDEL] (2023-12-12T18:55:00Z)
330+
add-table: L0 000010:[aaa#17,DEL-eee#inf,RANGEDEL] seqnums:[17-19] points:[aaa#17,DEL-eee#inf,RANGEDEL] size:736 (2023-12-12T18:55:00Z)
331331
351/8
332332
next-file-num: 12
333333
last-seq-num: 19
334-
deleted: L0 000010
335-
deleted: L6 000007
336-
deleted: L6 000008
337-
added: L6 000011:870<#0-#19>[aaa#17,DEL-eee#inf,RANGEDEL] (2023-12-12T18:55:00Z)
334+
del-table: L0 000010
335+
del-table: L6 000007
336+
del-table: L6 000008
337+
add-table: L6 000011:[aaa#17,DEL-eee#inf,RANGEDEL] seqnums:[0-19] points:[aaa#17,DEL-eee#inf,RANGEDEL] size:870 (2023-12-12T18:55:00Z)
338338
EOF
339339
--- L0 ---
340340
--- L1 ---
@@ -353,39 +353,42 @@ MANIFEST-000001
353353
comparer: alt-comparer
354354
next-file-num: 2
355355
25/1
356-
38/1
356+
log-num: 2
357+
next-file-num: 3
358+
last-seq-num: 9
359+
38/2
357360
log-num: 4
358361
next-file-num: 6
359362
last-seq-num: 14
360-
added: L0 000005:647<#10-#14>[aaa#10,SET-ccc#14,MERGE] (2023-12-12T18:55:00Z)
361-
90/2
363+
add-table: L0 000005:[aaa#10,SET-ccc#14,MERGE] seqnums:[10-14] points:[aaa#10,SET-ccc#14,MERGE] size:647 (2023-12-12T18:55:00Z)
364+
90/3
362365
next-file-num: 6
363366
last-seq-num: 14
364-
deleted: L0 000005
365-
added: L6 000005:647<#10-#14>[aaa#10,SET-ccc#14,MERGE] (2023-12-12T18:55:00Z)
366-
143/3
367+
del-table: L0 000005
368+
add-table: L6 000005:[aaa#10,SET-ccc#14,MERGE] seqnums:[10-14] points:[aaa#10,SET-ccc#14,MERGE] size:647 (2023-12-12T18:55:00Z)
369+
143/4
367370
next-file-num: 7
368371
last-seq-num: 15
369-
added: L0 000006:680<#15-#15>[bbb#15,SET-ccc#15,SET] (2023-12-12T18:55:00Z)
370-
193/4
371-
243/4
372+
add-table: L0 000006:[bbb#15,SET-ccc#15,SET] seqnums:[15-15] points:[bbb#15,SET-ccc#15,SET] size:680 (2023-12-12T18:55:00Z)
373+
193/5
374+
243/5
372375
next-file-num: 9
373376
last-seq-num: 16
374-
deleted: L0 000006
375-
deleted: L6 000005
376-
added: L6 000008:738<#0-#15>[aaa#0,SET-ccc#0,MERGE] (2023-12-12T18:55:00Z)
377-
299/5
377+
del-table: L0 000006
378+
del-table: L6 000005
379+
add-table: L6 000008:[aaa#0,SET-ccc#0,MERGE] seqnums:[0-15] points:[aaa#0,SET-ccc#0,MERGE] size:738 (2023-12-12T18:55:00Z)
380+
299/6
378381
log-num: 9
379382
next-file-num: 11
380383
last-seq-num: 19
381-
added: L0 000010:736<#17-#19>[aaa#17,DEL-eee#inf,RANGEDEL] (2023-12-12T18:55:00Z)
382-
351/6
384+
add-table: L0 000010:[aaa#17,DEL-eee#inf,RANGEDEL] seqnums:[17-19] points:[aaa#17,DEL-eee#inf,RANGEDEL] size:736 (2023-12-12T18:55:00Z)
385+
351/7
383386
next-file-num: 12
384387
last-seq-num: 19
385-
deleted: L0 000010
386-
deleted: L6 000007
387-
deleted: L6 000008
388-
added: L6 000011:870<#0-#19>[aaa#17,DEL-eee#inf,RANGEDEL] (2023-12-12T18:55:00Z)
388+
del-table: L0 000010
389+
del-table: L6 000007
390+
del-table: L6 000008
391+
add-table: L6 000011:[aaa#17,DEL-eee#inf,RANGEDEL] seqnums:[0-19] points:[aaa#17,DEL-eee#inf,RANGEDEL] size:870 (2023-12-12T18:55:00Z)
389392
EOF
390393
--- L0 ---
391394
--- L1 ---
@@ -416,7 +419,7 @@ MANIFEST-000001
416419
log-num: 4
417420
next-file-num: 6
418421
last-seq-num: 38
419-
added: L0 000005:1056<#10-#38>[a#38,RANGEKEYDEL-z@1#35,SET] (2023-12-11T18:59:04Z)
422+
add-table: L0 000005:[a#38,RANGEKEYDEL-z@1#35,SET] seqnums:[10-38] points:[a@1#10,SET-z@1#35,SET] ranges:[a#38,RANGEKEYDEL-z#inf,RANGEKEYSET] size:1056 (2023-12-11T18:59:04Z)
420423
EOF
421424
--- L0.0 ---
422425
000005:1056<#10-#38>[a#38,RANGEKEYDEL-z@1#35,SET]
@@ -426,3 +429,33 @@ EOF
426429
--- L4 ---
427430
--- L5 ---
428431
--- L6 ---
432+
433+
manifest dump
434+
./testdata/find-val-sep-db/MANIFEST-000001
435+
----
436+
MANIFEST-000001
437+
0/0
438+
comparer: leveldb.BytewiseComparator
439+
next-file-num: 2
440+
39/1
441+
log-num: 4
442+
next-file-num: 7
443+
last-seq-num: 13
444+
add-table: L0 000005:[aaa\x00#10,SET-ddd\x00#13,SET] seqnums:[10-13] points:[aaa\x00#10,SET-ddd\x00#13,SET] size:791 blobrefs:[(000006: 18); depth:1] (2025-05-28T18:51:26Z)
445+
add-blob-file: 000006 size:[109 (109B)] vals:[18 (18B)]
446+
107/2
447+
log-num: 7
448+
next-file-num: 10
449+
last-seq-num: 15
450+
add-table: L0 000008:[eee\x00#14,SET-fff\x00#15,SET] seqnums:[14-15] points:[eee\x00#14,SET-fff\x00#15,SET] size:759 blobrefs:[(000009: 13); depth:1] (2025-05-28T18:51:26Z)
451+
add-blob-file: 000009 size:[103 (103B)] vals:[13 (13B)]
452+
EOF
453+
--- L0.0 ---
454+
000005:791<#10-#13>[aaa\x00#10,SET-ddd\x00#13,SET]
455+
000008:759<#14-#15>[eee\x00#14,SET-fff\x00#15,SET]
456+
--- L1 ---
457+
--- L2 ---
458+
--- L3 ---
459+
--- L4 ---
460+
--- L5 ---
461+
--- L6 ---

0 commit comments

Comments
 (0)