Skip to content

Commit 71a8a9b

Browse files
craig[bot]andyyang890RaduBerinde
committed
154598: changefeedccl/resolvedspan: fix empty boundary handling bug r=KeithCh,asg0451 a=andyyang890 This patch fixes a bug where the empty boundary was being handled incorrectly by the resolved span frontiers, which could lead to a lot of unnecessary job progress saves during an initial scan. Fixes #154587 Release note (bug fix): A bug where a changefeed could perform many unnecessary job progress saves during an initial scan has been fixed. --- Test failures: [master] Fixes #154307 [release-25.4] Informs #154306 154653: go.mod: bump Pebble to 347d5dc77850 r=RaduBerinde a=RaduBerinde Changes: * [`347d5dc7`](cockroachdb/pebble@347d5dc7) db: add TestCrashDuringOpenRandomized * [`4e1e327d`](cockroachdb/pebble@4e1e327d) vfs/atomicfs: ensure marker properly synced * [`d1cc1fa5`](cockroachdb/pebble@d1cc1fa5) internal/arenaskl: use right type in argument to testkeys.Key * [`e5177343`](cockroachdb/pebble@e5177343) internal/testkeys: move Slice, EveryN out of the interface * [`252e253c`](cockroachdb/pebble@252e253c) internal/testkeys: include key count in TestDivvy * [`f852675e`](cockroachdb/pebble@f852675e) internal/testkeys: use uint64 in Keyspace interface * [`8c6f425c`](cockroachdb/pebble@8c6f425c) db: remove obsolete WALs before proceeding with Init * [`d97438a4`](cockroachdb/pebble@d97438a4) internal/arenaskl: add TestSkiplistFindSplice * [`6c323dcb`](cockroachdb/pebble@6c323dcb) internal/base: add doc comment discussing TrySeekUsingNext * [`29228073`](cockroachdb/pebble@29228073) sstable: track value separation policy props used * [`e52aa891`](cockroachdb/pebble@e52aa891) arenaskl: use pointer comparison to avoid key comparison * [`926e93bb`](cockroachdb/pebble@926e93bb) arenaskl: inline findSpliceForLevel in seekForBaseSplice * [`7bf60006`](cockroachdb/pebble@7bf60006) arenaskl: add BenchmarkCockroachKeysSeekPrefixGE * [`fdb9ac72`](cockroachdb/pebble@fdb9ac72) arenaskl: improve commentary around Inserter * [`9d96effa`](cockroachdb/pebble@9d96effa) arenaskl: use pointer comparison to avoid key comparison * [`5e6f0e19`](cockroachdb/pebble@5e6f0e19) arenaskl: manually inline findSpliceForLevel * [`05b2cd50`](cockroachdb/pebble@05b2cd50) arenaskl: remove unnecessary nil check * [`72e4f290`](cockroachdb/pebble@72e4f290) db: fix TestCleanupManagerCloseWithPacing * [`d8efa297`](cockroachdb/pebble@d8efa297) manifest: simplify VirtualBackings interface * [`132d6b6e`](cockroachdb/pebble@132d6b6e) tool: add `db inspect manifest` subcommand * [`3df9a2f9`](cockroachdb/pebble@3df9a2f9) chore: add crl-release-25.4 to nightlies and crossversion * [`01d4b24d`](cockroachdb/pebble@01d4b24d) fix cleanupManager.Close() hanging when deletion pacing is active Release note: none. Epic: none. Co-authored-by: Andy Yang <[email protected]> Co-authored-by: Radu Berinde <[email protected]>
3 parents 6fd7916 + 2d5f23b + 2439fc8 commit 71a8a9b

File tree

8 files changed

+161
-91
lines changed

8 files changed

+161
-91
lines changed

DEPS.bzl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1834,10 +1834,10 @@ def go_deps():
18341834
patches = [
18351835
"@com_github_cockroachdb_cockroach//build/patches:com_github_cockroachdb_pebble.patch",
18361836
],
1837-
sha256 = "2fefabece81a88650b7562c3d1b2498b57f32624453b9b277ee34e5b7bfc8afc",
1838-
strip_prefix = "github.com/cockroachdb/[email protected]20250923154941-e1277c42a560",
1837+
sha256 = "1fcaa5c3baecb9719f8aa46b75020d0a87927e5e2496bcfa82e689d2ffea9c6b",
1838+
strip_prefix = "github.com/cockroachdb/[email protected]20251002180823-347d5dc77850",
18391839
urls = [
1840-
"https://storage.googleapis.com/cockroach-godeps/gomod/github.com/cockroachdb/pebble/com_github_cockroachdb_pebble-v0.0.0-20250923154941-e1277c42a560.zip",
1840+
"https://storage.googleapis.com/cockroach-godeps/gomod/github.com/cockroachdb/pebble/com_github_cockroachdb_pebble-v0.0.0-20251002180823-347d5dc77850.zip",
18411841
],
18421842
)
18431843
go_repository(

build/bazelutil/distdir_files.bzl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -356,7 +356,7 @@ DISTDIR_FILES = {
356356
"https://storage.googleapis.com/cockroach-godeps/gomod/github.com/cockroachdb/gostdlib/com_github_cockroachdb_gostdlib-v1.19.0.zip": "c4d516bcfe8c07b6fc09b8a9a07a95065b36c2855627cb3514e40c98f872b69e",
357357
"https://storage.googleapis.com/cockroach-godeps/gomod/github.com/cockroachdb/logtags/com_github_cockroachdb_logtags-v0.0.0-20241215232642-bb51bb14a506.zip": "920068af09e3846d9ebb4e4a7787ff1dd10f3989c5f940ad861b0f6a9f824f6e",
358358
"https://storage.googleapis.com/cockroach-godeps/gomod/github.com/cockroachdb/metamorphic/com_github_cockroachdb_metamorphic-v0.0.0-20231108215700-4ba948b56895.zip": "28c8cf42192951b69378cf537be5a9a43f2aeb35542908cc4fe5f689505853ea",
359-
"https://storage.googleapis.com/cockroach-godeps/gomod/github.com/cockroachdb/pebble/com_github_cockroachdb_pebble-v0.0.0-20250923154941-e1277c42a560.zip": "2fefabece81a88650b7562c3d1b2498b57f32624453b9b277ee34e5b7bfc8afc",
359+
"https://storage.googleapis.com/cockroach-godeps/gomod/github.com/cockroachdb/pebble/com_github_cockroachdb_pebble-v0.0.0-20251002180823-347d5dc77850.zip": "1fcaa5c3baecb9719f8aa46b75020d0a87927e5e2496bcfa82e689d2ffea9c6b",
360360
"https://storage.googleapis.com/cockroach-godeps/gomod/github.com/cockroachdb/redact/com_github_cockroachdb_redact-v1.1.6.zip": "018eccb5fb9ca52d43ec9eaf213539d01c1f2b94e0e822406ebfb2e9321ef6cf",
361361
"https://storage.googleapis.com/cockroach-godeps/gomod/github.com/cockroachdb/returncheck/com_github_cockroachdb_returncheck-v0.0.0-20200612231554-92cdbca611dd.zip": "ce92ba4352deec995b1f2eecf16eba7f5d51f5aa245a1c362dfe24c83d31f82b",
362362
"https://storage.googleapis.com/cockroach-godeps/gomod/github.com/cockroachdb/stress/com_github_cockroachdb_stress-v0.0.0-20220803192808-1806698b1b7b.zip": "3fda531795c600daf25532a4f98be2a1335cd1e5e182c72789bca79f5f69fcc1",

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ require (
142142
github.com/cockroachdb/go-test-teamcity v0.0.0-20191211140407-cff980ad0a55
143143
github.com/cockroachdb/gostdlib v1.19.0
144144
github.com/cockroachdb/logtags v0.0.0-20241215232642-bb51bb14a506
145-
github.com/cockroachdb/pebble v0.0.0-20250923154941-e1277c42a560
145+
github.com/cockroachdb/pebble v0.0.0-20251002180823-347d5dc77850
146146
github.com/cockroachdb/redact v1.1.6
147147
github.com/cockroachdb/returncheck v0.0.0-20200612231554-92cdbca611dd
148148
github.com/cockroachdb/stress v0.0.0-20220803192808-1806698b1b7b

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -577,8 +577,8 @@ github.com/cockroachdb/logtags v0.0.0-20241215232642-bb51bb14a506 h1:ASDL+UJcILM
577577
github.com/cockroachdb/logtags v0.0.0-20241215232642-bb51bb14a506/go.mod h1:Mw7HqKr2kdtu6aYGn3tPmAftiP3QPX63LdK/zcariIo=
578578
github.com/cockroachdb/metamorphic v0.0.0-20231108215700-4ba948b56895 h1:XANOgPYtvELQ/h4IrmPAohXqe2pWA8Bwhejr3VQoZsA=
579579
github.com/cockroachdb/metamorphic v0.0.0-20231108215700-4ba948b56895/go.mod h1:aPd7gM9ov9M8v32Yy5NJrDyOcD8z642dqs+F0CeNXfA=
580-
github.com/cockroachdb/pebble v0.0.0-20250923154941-e1277c42a560 h1:jf/rjcPdZkA4qwbsmuJFZ7jQbssRedM67THQXtnChVQ=
581-
github.com/cockroachdb/pebble v0.0.0-20250923154941-e1277c42a560/go.mod h1:H/DxkYtsYVJwPFLikOL9yzb/PV7oIkz44CUmn4KecKg=
580+
github.com/cockroachdb/pebble v0.0.0-20251002180823-347d5dc77850 h1:pT7rhCsjLQJrmTxV79g6d0oSBSgJ4Mqqs448ADowab0=
581+
github.com/cockroachdb/pebble v0.0.0-20251002180823-347d5dc77850/go.mod h1:H/DxkYtsYVJwPFLikOL9yzb/PV7oIkz44CUmn4KecKg=
582582
github.com/cockroachdb/redact v1.1.6 h1:zXJBwDZ84xJNlHl1rMyCojqyIxv+7YUpQiJLQ7n4314=
583583
github.com/cockroachdb/redact v1.1.6/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg=
584584
github.com/cockroachdb/returncheck v0.0.0-20200612231554-92cdbca611dd h1:KFOt5I9nEKZgCnOSmy8r4Oykh8BYQO8bFOTgHDS8YZA=

pkg/ccl/changefeedccl/resolvedspan/frontier.go

Lines changed: 19 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -255,18 +255,12 @@ func (f *resolvedSpanFrontier) ForwardResolvedSpan(
255255
return false, err
256256
}
257257
f.latestTS.Forward(r.Timestamp)
258-
if r.BoundaryType != jobspb.ResolvedSpan_NONE {
259-
newBoundary := resolvedSpanBoundary{
260-
ts: r.Timestamp,
261-
typ: r.BoundaryType,
262-
}
263-
boundaryForwarded := f.boundary.Forward(newBoundary)
264-
if boundaryForwarded && !forwarded {
265-
// The frontier is considered forwarded if the boundary type
266-
// changes to non-NONE and all the spans are at the boundary
267-
// timestamp already.
268-
forwarded, _, _ = f.AtBoundary()
269-
}
258+
boundaryForwarded := f.boundary.Forward(r.Timestamp, r.BoundaryType)
259+
if boundaryForwarded && !forwarded {
260+
// The frontier is considered forwarded if the boundary type
261+
// changes to non-NONE and all the spans are at the boundary
262+
// timestamp already.
263+
forwarded, _, _ = f.AtBoundary()
270264
}
271265
return forwarded, nil
272266
}
@@ -408,27 +402,35 @@ func newResolvedSpanBoundary(
408402
// At returns whether a timestamp is equal to the boundary timestamp
409403
// and if so, the boundary type as well.
410404
func (b *resolvedSpanBoundary) At(ts hlc.Timestamp) (bool, jobspb.ResolvedSpan_BoundaryType) {
411-
if ts.Equal(b.ts) {
405+
if b.IsSet() && ts.Equal(b.ts) {
412406
return true, b.typ
413407
}
414408
return false, 0
415409
}
416410

417411
// After returns whether the boundary is after a given timestamp.
418412
func (b *resolvedSpanBoundary) After(ts hlc.Timestamp) bool {
419-
return b.ts.After(ts)
413+
return b.IsSet() && b.ts.After(ts)
420414
}
421415

422416
// Forward forwards the boundary to the new boundary if it is later.
423417
// It returns true if the boundary changed and false otherwise.
424-
func (b *resolvedSpanBoundary) Forward(newBoundary resolvedSpanBoundary) bool {
425-
if newBoundary.After(b.ts) {
426-
*b = newBoundary
418+
func (b *resolvedSpanBoundary) Forward(
419+
ts hlc.Timestamp, typ jobspb.ResolvedSpan_BoundaryType,
420+
) bool {
421+
if typ != jobspb.ResolvedSpan_NONE && ts.After(b.ts) {
422+
b.ts = ts
423+
b.typ = typ
427424
return true
428425
}
429426
return false
430427
}
431428

429+
// IsSet returns whether the boundary is set.
430+
func (b *resolvedSpanBoundary) IsSet() bool {
431+
return b.typ != jobspb.ResolvedSpan_NONE
432+
}
433+
432434
// SafeFormat implements the redact.SafeFormatter interface.
433435
func (b *resolvedSpanBoundary) SafeFormat(s redact.SafePrinter, _ rune) {
434436
s.Printf("%v boundary (%v)", b.typ, b.ts)

pkg/ccl/changefeedccl/resolvedspan/frontier_test.go

Lines changed: 120 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -179,15 +179,48 @@ func TestCoordinatorFrontier(t *testing.T) {
179179
}
180180

181181
type frontier interface {
182-
AddSpansAt(startAt hlc.Timestamp, spans ...roachpb.Span) error
182+
AddSpansAt(hlc.Timestamp, ...roachpb.Span) error
183183
Frontier() hlc.Timestamp
184+
Forward(roachpb.Span, hlc.Timestamp) (bool, error)
184185
ForwardResolvedSpan(jobspb.ResolvedSpan) (bool, error)
185186
InBackfill(jobspb.ResolvedSpan) bool
186187
AtBoundary() (bool, jobspb.ResolvedSpan_BoundaryType, hlc.Timestamp)
187188
All() iter.Seq[jobspb.ResolvedSpan]
188189
Frontiers() iter.Seq2[descpb.ID, span.ReadOnlyFrontier]
189190
}
190191

192+
func newFrontier(
193+
t testing.TB,
194+
frontierType string,
195+
statementTime hlc.Timestamp,
196+
initialHighwater hlc.Timestamp,
197+
codec resolvedspan.TableCodec,
198+
perTableTracking bool,
199+
spans ...roachpb.Span,
200+
) (frontier, error) {
201+
switch frontierType {
202+
case "aggregator":
203+
return resolvedspan.NewAggregatorFrontier(
204+
statementTime,
205+
initialHighwater,
206+
codec,
207+
perTableTracking,
208+
spans...,
209+
)
210+
case "coordinator":
211+
return resolvedspan.NewCoordinatorFrontier(
212+
statementTime,
213+
initialHighwater,
214+
codec,
215+
perTableTracking,
216+
spans...,
217+
)
218+
default:
219+
t.Fatalf("unknown frontier type: %s", frontierType)
220+
}
221+
panic("unreachable")
222+
}
223+
191224
func testBackfillSpan(
192225
t *testing.T, f frontier, start, end string, ts hlc.Timestamp, frontierAfterSpan hlc.Timestamp,
193226
) {
@@ -379,29 +412,15 @@ func TestFrontierPerTableResolvedTimestamps(t *testing.T) {
379412
initialHighWater := hlc.Timestamp{}
380413

381414
// Create frontier with multiple table spans.
382-
f, err := func() (frontier, error) {
383-
switch frontierType {
384-
case "aggregator":
385-
return resolvedspan.NewAggregatorFrontier(
386-
statementTime,
387-
initialHighWater,
388-
codec,
389-
true, /* perTableTracking */
390-
tableSpans...,
391-
)
392-
case "coordinator":
393-
return resolvedspan.NewCoordinatorFrontier(
394-
statementTime,
395-
initialHighWater,
396-
codec,
397-
true, /* perTableTracking */
398-
tableSpans...,
399-
)
400-
default:
401-
t.Fatalf("unknown frontier type: %s", frontierType)
402-
}
403-
panic("unreachable")
404-
}()
415+
f, err := newFrontier(
416+
t,
417+
frontierType,
418+
statementTime,
419+
initialHighWater,
420+
codec,
421+
true, /* perTableTracking */
422+
tableSpans...,
423+
)
405424
require.NoError(t, err)
406425
require.Equal(t, initialHighWater, f.Frontier())
407426

@@ -503,29 +522,15 @@ func TestFrontierForwardFullTableSpan(t *testing.T) {
503522
statementTime := makeTS(5)
504523
var initialHighWater hlc.Timestamp
505524

506-
f, err := func() (span.Frontier, error) {
507-
switch frontierType {
508-
case "aggregator":
509-
return resolvedspan.NewAggregatorFrontier(
510-
statementTime,
511-
initialHighWater,
512-
codec,
513-
true, /* perTableTracking */
514-
tableSpans...,
515-
)
516-
case "coordinator":
517-
return resolvedspan.NewCoordinatorFrontier(
518-
statementTime,
519-
initialHighWater,
520-
codec,
521-
true, /* perTableTracking */
522-
tableSpans...,
523-
)
524-
default:
525-
t.Fatalf("unknown frontier type: %s", frontierType)
526-
}
527-
panic("unreachable")
528-
}()
525+
f, err := newFrontier(
526+
t,
527+
frontierType,
528+
statementTime,
529+
initialHighWater,
530+
codec,
531+
true, /* perTableTracking */
532+
tableSpans...,
533+
)
529534
require.NoError(t, err)
530535
require.Equal(t, initialHighWater, f.Frontier())
531536

@@ -610,26 +615,14 @@ FROM [SHOW RANGES FROM TABLE foo WITH KEYS]`)
610615
now := makeTS(timeutil.Now().Unix())
611616

612617
// Create the frontier and add all the spans.
613-
f, err := func() (frontier, error) {
614-
switch frontierType {
615-
case "aggregator":
616-
return resolvedspan.NewAggregatorFrontier(
617-
now,
618-
now,
619-
codec,
620-
perTableTracking,
621-
)
622-
case "coordinator":
623-
return resolvedspan.NewCoordinatorFrontier(
624-
now,
625-
now,
626-
codec,
627-
perTableTracking,
628-
)
629-
default:
630-
panic("unreachable")
631-
}
632-
}()
618+
f, err := newFrontier(
619+
b,
620+
frontierType,
621+
now,
622+
now,
623+
codec,
624+
perTableTracking,
625+
)
633626
require.NoError(b, err)
634627
require.NoError(b, f.AddSpansAt(now, spans...))
635628

@@ -655,3 +648,63 @@ FROM [SHOW RANGES FROM TABLE foo WITH KEYS]`)
655648
}
656649
}
657650
}
651+
652+
func TestFrontierAtBoundary(t *testing.T) {
653+
defer leaktest.AfterTest(t)()
654+
defer log.Scope(t).Close(t)
655+
656+
rnd, _ := randutil.NewTestRand()
657+
perTableTracking := rnd.Intn(2) == 0
658+
t.Logf("per-table tracking: %t", perTableTracking)
659+
660+
testutils.RunValues(t, "frontier type", []string{"aggregator", "coordinator"},
661+
func(t *testing.T, frontierType string) {
662+
statementTime := makeTS(timeutil.Now().Unix())
663+
var initialHighWater hlc.Timestamp
664+
f, err := newFrontier(
665+
t,
666+
frontierType,
667+
statementTime,
668+
initialHighWater,
669+
mockCodec{},
670+
perTableTracking,
671+
makeSpan("a", "f"),
672+
)
673+
require.NoError(t, err)
674+
675+
// We can't be at boundary until a boundary is set.
676+
atBoundary, _, _ := f.AtBoundary()
677+
require.False(t, atBoundary)
678+
_, err = f.ForwardResolvedSpan(jobspb.ResolvedSpan{
679+
Span: makeSpan("a", "f"),
680+
Timestamp: statementTime,
681+
})
682+
require.NoError(t, err)
683+
atBoundary, _, _ = f.AtBoundary()
684+
require.False(t, atBoundary)
685+
686+
// Set a boundary by forwarding part of the span space.
687+
ts := statementTime.AddDuration(3 * time.Second)
688+
_, err = f.ForwardResolvedSpan(jobspb.ResolvedSpan{
689+
Span: makeSpan("a", "c"),
690+
Timestamp: ts,
691+
BoundaryType: jobspb.ResolvedSpan_BACKFILL,
692+
})
693+
require.NoError(t, err)
694+
atBoundary, _, _ = f.AtBoundary()
695+
require.False(t, atBoundary)
696+
697+
// Verify the boundary is reached after forwarding
698+
// the rest of the span space.
699+
_, err = f.ForwardResolvedSpan(jobspb.ResolvedSpan{
700+
Span: makeSpan("c", "f"),
701+
Timestamp: ts,
702+
BoundaryType: jobspb.ResolvedSpan_BACKFILL,
703+
})
704+
require.NoError(t, err)
705+
atBoundary, boundaryType, boundaryTS := f.AtBoundary()
706+
require.True(t, atBoundary)
707+
require.Equal(t, jobspb.ResolvedSpan_BACKFILL, boundaryType)
708+
require.Equal(t, ts, boundaryTS)
709+
})
710+
}

pkg/ccl/storageccl/engineccl/testdata/data_key_manager_io

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ create("data-dir/COCKROACHDB_DATA_KEYS_000001_monolith")
2121
write("data-dir/COCKROACHDB_DATA_KEYS_000001_monolith", <...280 bytes...>)
2222
sync("data-dir/COCKROACHDB_DATA_KEYS_000001_monolith")
2323
create("data-dir/marker.datakeys.000001.COCKROACHDB_DATA_KEYS_000001_monolith")
24+
sync("data-dir/marker.datakeys.000001.COCKROACHDB_DATA_KEYS_000001_monolith")
2425
close("data-dir/marker.datakeys.000001.COCKROACHDB_DATA_KEYS_000001_monolith")
2526
sync("data-dir")
2627
close("data-dir/COCKROACHDB_DATA_KEYS_000001_monolith")
@@ -33,6 +34,7 @@ create("data-dir/COCKROACHDB_DATA_KEYS_000002_monolith")
3334
write("data-dir/COCKROACHDB_DATA_KEYS_000002_monolith", <...489 bytes...>)
3435
sync("data-dir/COCKROACHDB_DATA_KEYS_000002_monolith")
3536
create("data-dir/marker.datakeys.000002.COCKROACHDB_DATA_KEYS_000002_monolith")
37+
sync("data-dir/marker.datakeys.000002.COCKROACHDB_DATA_KEYS_000002_monolith")
3638
close("data-dir/marker.datakeys.000002.COCKROACHDB_DATA_KEYS_000002_monolith")
3739
remove("data-dir/marker.datakeys.000001.COCKROACHDB_DATA_KEYS_000001_monolith")
3840
sync("data-dir")
@@ -66,6 +68,7 @@ create("data-dir/COCKROACHDB_DATA_KEYS_000003_monolith")
6668
write("data-dir/COCKROACHDB_DATA_KEYS_000003_monolith", <...698 bytes...>)
6769
sync("data-dir/COCKROACHDB_DATA_KEYS_000003_monolith")
6870
create("data-dir/marker.datakeys.000003.COCKROACHDB_DATA_KEYS_000003_monolith")
71+
sync("data-dir/marker.datakeys.000003.COCKROACHDB_DATA_KEYS_000003_monolith")
6972
close("data-dir/marker.datakeys.000003.COCKROACHDB_DATA_KEYS_000003_monolith")
7073
remove("data-dir/marker.datakeys.000002.COCKROACHDB_DATA_KEYS_000002_monolith")
7174
sync("data-dir")
@@ -97,6 +100,7 @@ create("data-dir/COCKROACHDB_DATA_KEYS_000001_monolith")
97100
write("data-dir/COCKROACHDB_DATA_KEYS_000001_monolith", <...280 bytes...>)
98101
sync("data-dir/COCKROACHDB_DATA_KEYS_000001_monolith")
99102
create("data-dir/marker.datakeys.000001.COCKROACHDB_DATA_KEYS_000001_monolith")
103+
sync("data-dir/marker.datakeys.000001.COCKROACHDB_DATA_KEYS_000001_monolith")
100104
close("data-dir/marker.datakeys.000001.COCKROACHDB_DATA_KEYS_000001_monolith")
101105
sync("data-dir")
102106
close("data-dir/COCKROACHDB_DATA_KEYS_000001_monolith")
@@ -107,6 +111,7 @@ create("data-dir/COCKROACHDB_DATA_KEYS_000002_monolith")
107111
write("data-dir/COCKROACHDB_DATA_KEYS_000002_monolith", <...489 bytes...>)
108112
sync("data-dir/COCKROACHDB_DATA_KEYS_000002_monolith")
109113
create("data-dir/marker.datakeys.000002.COCKROACHDB_DATA_KEYS_000002_monolith")
114+
sync("data-dir/marker.datakeys.000002.COCKROACHDB_DATA_KEYS_000002_monolith")
110115
close("data-dir/marker.datakeys.000002.COCKROACHDB_DATA_KEYS_000002_monolith")
111116
remove("data-dir/marker.datakeys.000001.COCKROACHDB_DATA_KEYS_000001_monolith")
112117
sync("data-dir")

0 commit comments

Comments
 (0)