Skip to content

Commit a1a41db

Browse files
committed
scexec: add deferred mutation to rename TTL schedule
This will make sure the TTL schedule name matches the new table name when a table is renamed, just as the legacy schema changer does. Release note: None
1 parent 8368922 commit a1a41db

File tree

40 files changed

+141
-43
lines changed

40 files changed

+141
-43
lines changed

pkg/sql/descmetadata/BUILD.bazel

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@ go_library(
99
"//pkg/jobs/jobspb",
1010
"//pkg/keys",
1111
"//pkg/settings",
12+
"//pkg/sql/catalog",
1213
"//pkg/sql/catalog/descpb",
1314
"//pkg/sql/catalog/descs",
14-
"//pkg/sql/catalog/tabledesc",
1515
"//pkg/sql/isql",
1616
"//pkg/sql/schemachanger/scexec",
1717
"//pkg/sql/sem/catconstants",

pkg/sql/descmetadata/metadata_updater.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,9 @@ import (
1212
"github.com/cockroachdb/cockroach/pkg/jobs/jobspb"
1313
"github.com/cockroachdb/cockroach/pkg/keys"
1414
"github.com/cockroachdb/cockroach/pkg/settings"
15+
"github.com/cockroachdb/cockroach/pkg/sql/catalog"
1516
"github.com/cockroachdb/cockroach/pkg/sql/catalog/descpb"
1617
"github.com/cockroachdb/cockroach/pkg/sql/catalog/descs"
17-
"github.com/cockroachdb/cockroach/pkg/sql/catalog/tabledesc"
1818
"github.com/cockroachdb/cockroach/pkg/sql/isql"
1919
"github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scexec"
2020
"github.com/cockroachdb/cockroach/pkg/sql/sem/catconstants"
@@ -96,7 +96,7 @@ func (mu metadataUpdater) DeleteSchedule(ctx context.Context, scheduleID jobspb.
9696

9797
// UpdateTTLScheduleLabel implement scexec.DescriptorMetadataUpdater.
9898
func (mu metadataUpdater) UpdateTTLScheduleLabel(
99-
ctx context.Context, tbl *tabledesc.Mutable,
99+
ctx context.Context, tbl catalog.TableDescriptor,
100100
) error {
101101
if !tbl.HasRowLevelTTL() {
102102
return nil
@@ -109,7 +109,7 @@ func (mu metadataUpdater) UpdateTTLScheduleLabel(
109109
sessiondata.NodeUserSessionDataOverride,
110110
"UPDATE system.scheduled_jobs SET schedule_name = $1 WHERE schedule_id = $2",
111111
ttlbase.BuildScheduleLabel(tbl),
112-
tbl.RowLevelTTL.ScheduleID,
112+
tbl.GetRowLevelTTL().ScheduleID,
113113
)
114114
return err
115115
}

pkg/sql/schemachanger/scdeps/sctestdeps/test_deps.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ import (
3030
"github.com/cockroachdb/cockroach/pkg/sql/catalog/multiregion"
3131
"github.com/cockroachdb/cockroach/pkg/sql/catalog/nstree"
3232
"github.com/cockroachdb/cockroach/pkg/sql/catalog/schemadesc"
33-
"github.com/cockroachdb/cockroach/pkg/sql/catalog/tabledesc"
3433
"github.com/cockroachdb/cockroach/pkg/sql/catalog/typedesc"
3534
"github.com/cockroachdb/cockroach/pkg/sql/catalog/zone"
3635
"github.com/cockroachdb/cockroach/pkg/sql/privilege"
@@ -692,6 +691,8 @@ func (s *TestState) mustReadImmutableDescriptor(id descpb.ID) (catalog.Descripto
692691
// mustReadMutableDescriptor looks up a descriptor and returns a mutable
693692
// deep copy.
694693
func (s *TestState) mustReadMutableDescriptor(id descpb.ID) (catalog.MutableDescriptor, error) {
694+
//
695+
695696
u := s.uncommittedInMemory.LookupDescriptor(id)
696697
if u == nil {
697698
return nil, errors.Wrapf(catalog.ErrDescriptorNotFound, "reading mutable descriptor #%d", id)
@@ -1332,8 +1333,8 @@ func (s *TestState) DeleteSchedule(ctx context.Context, id jobspb.ScheduleID) er
13321333
}
13331334

13341335
// UpdateTTLScheduleLabel implements scexec.DescriptorMetadataUpdater
1335-
func (s *TestState) UpdateTTLScheduleLabel(ctx context.Context, tbl *tabledesc.Mutable) error {
1336-
s.LogSideEffectf("update ttl schedule label #%d", tbl.ID)
1336+
func (s *TestState) UpdateTTLScheduleLabel(ctx context.Context, tbl catalog.TableDescriptor) error {
1337+
s.LogSideEffectf("update ttl schedule label #%d", tbl.GetID())
13371338
return nil
13381339
}
13391340

pkg/sql/schemachanger/scexec/BUILD.bazel

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ go_library(
2929
"//pkg/sql/catalog/catalogkeys",
3030
"//pkg/sql/catalog/descpb",
3131
"//pkg/sql/catalog/nstree",
32-
"//pkg/sql/catalog/tabledesc",
3332
"//pkg/sql/pgwire/pgcode",
3433
"//pkg/sql/pgwire/pgerror",
3534
"//pkg/sql/schemachanger/scerrors",

pkg/sql/schemachanger/scexec/dependencies.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ import (
1919
"github.com/cockroachdb/cockroach/pkg/sql/catalog"
2020
"github.com/cockroachdb/cockroach/pkg/sql/catalog/catalogkeys"
2121
"github.com/cockroachdb/cockroach/pkg/sql/catalog/descpb"
22-
"github.com/cockroachdb/cockroach/pkg/sql/catalog/tabledesc"
2322
"github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scexec/scmutationexec"
2423
"github.com/cockroachdb/cockroach/pkg/sql/sessiondata"
2524
"github.com/cockroachdb/cockroach/pkg/util/hlc"
@@ -371,7 +370,7 @@ type DescriptorMetadataUpdater interface {
371370

372371
// UpdateTTLScheduleLabel updates the schedule_name for the TTL Scheduled Job
373372
// of the given table.
374-
UpdateTTLScheduleLabel(ctx context.Context, tbl *tabledesc.Mutable) error
373+
UpdateTTLScheduleLabel(ctx context.Context, tbl catalog.TableDescriptor) error
375374
}
376375

377376
type TemporarySchemaCreator interface {

pkg/sql/schemachanger/scexec/exec_deferred_mutation.go

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ type deferredState struct {
2828
scheduleIDsToDelete []jobspb.ScheduleID
2929
statsToRefresh catalog.DescriptorIDSet
3030
indexesToSplitAndScatter []indexesToSplitAndScatter
31+
ttlScheduleMetadataUpdates []ttlScheduleMetadataUpdate
3132
gcJobs
3233
}
3334

@@ -41,6 +42,11 @@ type indexesToSplitAndScatter struct {
4142
copyIndexID catid.IndexID
4243
}
4344

45+
type ttlScheduleMetadataUpdate struct {
46+
tableID descpb.ID
47+
newName string
48+
}
49+
4450
type schemaChangerJobUpdate struct {
4551
isNonCancelable bool
4652
runningStatus redact.RedactableString
@@ -76,6 +82,16 @@ func (s *deferredState) RefreshStats(descriptorID descpb.ID) {
7682
s.statsToRefresh.Add(descriptorID)
7783
}
7884

85+
func (s *deferredState) UpdateTTLScheduleMetadata(
86+
ctx context.Context, tableID descpb.ID, newName string,
87+
) error {
88+
s.ttlScheduleMetadataUpdates = append(s.ttlScheduleMetadataUpdates, ttlScheduleMetadataUpdate{
89+
tableID: tableID,
90+
newName: newName,
91+
})
92+
return nil
93+
}
94+
7995
func (s *deferredState) AddNewSchemaChangerJob(
8096
jobID jobspb.JobID,
8197
stmts []scpb.Statement,
@@ -190,6 +206,21 @@ func (s *deferredState) exec(
190206
return err
191207
}
192208
}
209+
for _, ttlUpdate := range s.ttlScheduleMetadataUpdates {
210+
descs, err := c.MustReadImmutableDescriptors(ctx, ttlUpdate.tableID)
211+
if err != nil {
212+
return err
213+
}
214+
desc := descs[0]
215+
// Skip if this isn't a table descriptor
216+
tableDesc, ok := desc.(catalog.TableDescriptor)
217+
if !ok {
218+
continue
219+
}
220+
if err := m.UpdateTTLScheduleLabel(ctx, tableDesc); err != nil {
221+
return err
222+
}
223+
}
193224
for _, idx := range s.indexesToSplitAndScatter {
194225
descs, err := c.MustReadImmutableDescriptors(ctx, idx.tableID)
195226
if err != nil {

pkg/sql/schemachanger/scexec/executor_external_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -526,7 +526,7 @@ func (noopMetadataUpdater) DeleteSchedule(ctx context.Context, scheduleID jobspb
526526

527527
// UpdateTTLScheduleLabel implements scexec.DescriptorMetadataUpdater.
528528
func (noopMetadataUpdater) UpdateTTLScheduleLabel(
529-
ctx context.Context, tbl *tabledesc.Mutable,
529+
ctx context.Context, tbl catalog.TableDescriptor,
530530
) error {
531531
return nil
532532
}

pkg/sql/schemachanger/scexec/scmutationexec/dependencies.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,4 +148,7 @@ type DeferredMutationStateUpdater interface {
148148
AddIndexForMaybeSplitAndScatter(
149149
tableID catid.DescID, indexID catid.IndexID, copyIndexID catid.IndexID,
150150
)
151+
152+
// UpdateTTLScheduleMetadata updates the TTL schedule metadata for a table.
153+
UpdateTTLScheduleMetadata(ctx context.Context, tableID descpb.ID, newName string) error
151154
}

pkg/sql/schemachanger/scexec/scmutationexec/table.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,3 +30,9 @@ func (i *immediateVisitor) SetTableSchemaLocked(
3030
tbl.SchemaLocked = op.Locked
3131
return nil
3232
}
33+
34+
func (d *deferredVisitor) UpdateTTLScheduleMetadata(
35+
ctx context.Context, op scop.UpdateTTLScheduleMetadata,
36+
) error {
37+
return d.DeferredMutationStateUpdater.UpdateTTLScheduleMetadata(ctx, op.TableID, op.NewName)
38+
}

pkg/sql/schemachanger/scop/deferred_mutation.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,3 +97,12 @@ type MaybeAddSplitForIndex struct {
9797
IndexID descpb.IndexID
9898
CopyIndexID descpb.IndexID
9999
}
100+
101+
// UpdateTTLScheduleMetadata updates the TTL schedule metadata for a table
102+
// when its name changes. This ensures TTL jobs continue to work properly
103+
// after table renames.
104+
type UpdateTTLScheduleMetadata struct {
105+
deferredMutationOp
106+
TableID descpb.ID
107+
NewName string
108+
}

0 commit comments

Comments
 (0)