Skip to content

Commit cdd04f8

Browse files
author
Andrew Werner
committed
sql,systemschema,migration: add system.long_running_migrations, adopt
This commit adds a table, `system.long_running_migrations`, to store the completion status of long-running migrations. This table is used to ensure safety and isolation in the face of concurrent attempts to upgrade the cluster version. An important facet of this change is the migration to add this table to the cluster during upgrades. Given that the implementation of long-running migrations relies on the table's existence, all versions which are associated with long-running migrations must follow the version which introduces this table. This migration needs to utilize the new infrastructure rather than the `sqlmigrations` infrastructure because of some really bad behavior introduced in 20.2 (#59850). Given two such versions already existed, they have been assigned new version keys and their old version keys and values are now merely placeholders. This provides comptability with the earlier alphas. Release note: None
1 parent e094a7a commit cdd04f8

47 files changed

Lines changed: 1171 additions & 565 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

docs/generated/settings/settings.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,6 @@
100100
<tr><td><code>trace.debug.enable</code></td><td>boolean</td><td><code>false</code></td><td>if set, traces for recent requests can be seen at https://<ui>/debug/requests</td></tr>
101101
<tr><td><code>trace.lightstep.token</code></td><td>string</td><td><code></code></td><td>if set, traces go to Lightstep using this token</td></tr>
102102
<tr><td><code>trace.zipkin.collector</code></td><td>string</td><td><code></code></td><td>if set, traces go to the given Zipkin instance (example: '127.0.0.1:9411'); ignored if trace.lightstep.token is set</td></tr>
103-
<tr><td><code>version</code></td><td>version</td><td><code>20.2-18</code></td><td>set the active cluster version in the format '<major>.<minor>'</td></tr>
103+
<tr><td><code>version</code></td><td>version</td><td><code>20.2-24</code></td><td>set the active cluster version in the format '<major>.<minor>'</td></tr>
104104
</tbody>
105105
</table>

pkg/base/testing_knobs.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,4 +36,5 @@ type TestingKnobs struct {
3636
TenantTestingKnobs ModuleTestingKnobs
3737
JobsTestingKnobs ModuleTestingKnobs
3838
BackupRestore ModuleTestingKnobs
39+
MigrationManager ModuleTestingKnobs
3940
}

pkg/ccl/backupccl/system_schema.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -227,6 +227,9 @@ var systemTableBackupConfiguration = map[string]systemBackupConfiguration{
227227
systemschema.WebSessionsTable.GetName(): {
228228
includeInClusterBackup: optOutOfClusterBackup,
229229
},
230+
systemschema.LongRunningMigrationsTable.GetName(): {
231+
includeInClusterBackup: optOutOfClusterBackup,
232+
},
230233
}
231234

232235
// getSystemTablesToBackup returns a set of system table names that should be
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
doctor cluster
22
----
33
debug doctor cluster
4-
Examining 34 descriptors and 35 namespace entries...
4+
Examining 35 descriptors and 36 namespace entries...
55
Table 53: ParentID 50, ParentSchemaID 29, Name 'foo': not being dropped but no namespace entry found
66
Examining 1 running jobs...
77
ERROR: validation failed

pkg/cli/testdata/zip/partial1

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ requesting goroutine files for node 1... writing: debug/nodes/1/goroutines.err.t
5858
^- resulted in ...
5959
requesting log file ...
6060
requesting log file ...
61-
requesting ranges... 35 found
61+
requesting ranges... 36 found
6262
writing: debug/nodes/1/ranges/1.json
6363
writing: debug/nodes/1/ranges/2.json
6464
writing: debug/nodes/1/ranges/3.json
@@ -94,6 +94,7 @@ writing: debug/nodes/1/ranges/32.json
9494
writing: debug/nodes/1/ranges/33.json
9595
writing: debug/nodes/1/ranges/34.json
9696
writing: debug/nodes/1/ranges/35.json
97+
writing: debug/nodes/1/ranges/36.json
9798
writing: debug/nodes/2/status.json
9899
using SQL connection URL for node 2: postgresql://...
99100
retrieving SQL data for crdb_internal.feature_usage... writing: debug/nodes/2/crdb_internal.feature_usage.txt
@@ -194,7 +195,7 @@ requesting goroutine files for node 3... writing: debug/nodes/3/goroutines.err.t
194195
^- resulted in ...
195196
requesting log file ...
196197
requesting log file ...
197-
requesting ranges... 35 found
198+
requesting ranges... 36 found
198199
writing: debug/nodes/3/ranges/1.json
199200
writing: debug/nodes/3/ranges/2.json
200201
writing: debug/nodes/3/ranges/3.json
@@ -230,6 +231,7 @@ writing: debug/nodes/3/ranges/32.json
230231
writing: debug/nodes/3/ranges/33.json
231232
writing: debug/nodes/3/ranges/34.json
232233
writing: debug/nodes/3/ranges/35.json
234+
writing: debug/nodes/3/ranges/36.json
233235
doctor examining cluster...No problems found!
234236
writing: debug/reports/doctor.txt
235237
requesting list of SQL databases... 3 found
@@ -238,7 +240,7 @@ requesting database details for defaultdb... writing: debug/schema/defaultdb@det
238240
requesting database details for postgres... writing: debug/schema/[email protected]
239241
0 tables found
240242
requesting database details for system... writing: debug/schema/[email protected]
241-
29 tables found
243+
30 tables found
242244
requesting table details for system.public.namespace... writing: debug/schema/system/public_namespace.json
243245
requesting table details for system.public.descriptor... writing: debug/schema/system/public_descriptor.json
244246
requesting table details for system.public.users... writing: debug/schema/system/public_users.json
@@ -268,5 +270,6 @@ requesting table details for system.public.statement_diagnostics_requests... wri
268270
requesting table details for system.public.statement_diagnostics... writing: debug/schema/system/public_statement_diagnostics.json
269271
requesting table details for system.public.scheduled_jobs... writing: debug/schema/system/public_scheduled_jobs.json
270272
requesting table details for system.public.sqlliveness... writing: debug/schema/system/public_sqlliveness.json
273+
requesting table details for system.public.long_running_migrations... writing: debug/schema/system/public_long_running_migrations.json
271274
writing: debug/pprof-summary.sh
272275
writing: debug/hot-ranges.sh

pkg/cli/testdata/zip/partial1_excluded

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ requesting goroutine files for node 1... writing: debug/nodes/1/goroutines.err.t
5858
^- resulted in ...
5959
requesting log file ...
6060
requesting log file ...
61-
requesting ranges... 35 found
61+
requesting ranges... 36 found
6262
writing: debug/nodes/1/ranges/1.json
6363
writing: debug/nodes/1/ranges/2.json
6464
writing: debug/nodes/1/ranges/3.json
@@ -94,6 +94,7 @@ writing: debug/nodes/1/ranges/32.json
9494
writing: debug/nodes/1/ranges/33.json
9595
writing: debug/nodes/1/ranges/34.json
9696
writing: debug/nodes/1/ranges/35.json
97+
writing: debug/nodes/1/ranges/36.json
9798
writing: debug/nodes/2.skipped
9899
writing: debug/nodes/3/status.json
99100
using SQL connection URL for node 3: postgresql://...
@@ -125,7 +126,7 @@ requesting goroutine files for node 3... writing: debug/nodes/3/goroutines.err.t
125126
^- resulted in ...
126127
requesting log file ...
127128
requesting log file ...
128-
requesting ranges... 35 found
129+
requesting ranges... 36 found
129130
writing: debug/nodes/3/ranges/1.json
130131
writing: debug/nodes/3/ranges/2.json
131132
writing: debug/nodes/3/ranges/3.json
@@ -161,6 +162,7 @@ writing: debug/nodes/3/ranges/32.json
161162
writing: debug/nodes/3/ranges/33.json
162163
writing: debug/nodes/3/ranges/34.json
163164
writing: debug/nodes/3/ranges/35.json
165+
writing: debug/nodes/3/ranges/36.json
164166
doctor examining cluster...No problems found!
165167
writing: debug/reports/doctor.txt
166168
requesting list of SQL databases... 3 found
@@ -169,7 +171,7 @@ requesting database details for defaultdb... writing: debug/schema/defaultdb@det
169171
requesting database details for postgres... writing: debug/schema/[email protected]
170172
0 tables found
171173
requesting database details for system... writing: debug/schema/[email protected]
172-
29 tables found
174+
30 tables found
173175
requesting table details for system.public.namespace... writing: debug/schema/system/public_namespace.json
174176
requesting table details for system.public.descriptor... writing: debug/schema/system/public_descriptor.json
175177
requesting table details for system.public.users... writing: debug/schema/system/public_users.json
@@ -199,5 +201,6 @@ requesting table details for system.public.statement_diagnostics_requests... wri
199201
requesting table details for system.public.statement_diagnostics... writing: debug/schema/system/public_statement_diagnostics.json
200202
requesting table details for system.public.scheduled_jobs... writing: debug/schema/system/public_scheduled_jobs.json
201203
requesting table details for system.public.sqlliveness... writing: debug/schema/system/public_sqlliveness.json
204+
requesting table details for system.public.long_running_migrations... writing: debug/schema/system/public_long_running_migrations.json
202205
writing: debug/pprof-summary.sh
203206
writing: debug/hot-ranges.sh

pkg/cli/testdata/zip/partial2

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ requesting goroutine files for node 1... writing: debug/nodes/1/goroutines.err.t
5858
^- resulted in ...
5959
requesting log file ...
6060
requesting log file ...
61-
requesting ranges... 35 found
61+
requesting ranges... 36 found
6262
writing: debug/nodes/1/ranges/1.json
6363
writing: debug/nodes/1/ranges/2.json
6464
writing: debug/nodes/1/ranges/3.json
@@ -94,6 +94,7 @@ writing: debug/nodes/1/ranges/32.json
9494
writing: debug/nodes/1/ranges/33.json
9595
writing: debug/nodes/1/ranges/34.json
9696
writing: debug/nodes/1/ranges/35.json
97+
writing: debug/nodes/1/ranges/36.json
9798
writing: debug/nodes/3/status.json
9899
using SQL connection URL for node 3: postgresql://...
99100
retrieving SQL data for crdb_internal.feature_usage... writing: debug/nodes/3/crdb_internal.feature_usage.txt
@@ -124,7 +125,7 @@ requesting goroutine files for node 3... writing: debug/nodes/3/goroutines.err.t
124125
^- resulted in ...
125126
requesting log file ...
126127
requesting log file ...
127-
requesting ranges... 35 found
128+
requesting ranges... 36 found
128129
writing: debug/nodes/3/ranges/1.json
129130
writing: debug/nodes/3/ranges/2.json
130131
writing: debug/nodes/3/ranges/3.json
@@ -160,6 +161,7 @@ writing: debug/nodes/3/ranges/32.json
160161
writing: debug/nodes/3/ranges/33.json
161162
writing: debug/nodes/3/ranges/34.json
162163
writing: debug/nodes/3/ranges/35.json
164+
writing: debug/nodes/3/ranges/36.json
163165
doctor examining cluster...No problems found!
164166
writing: debug/reports/doctor.txt
165167
requesting list of SQL databases... 3 found
@@ -168,7 +170,7 @@ requesting database details for defaultdb... writing: debug/schema/defaultdb@det
168170
requesting database details for postgres... writing: debug/schema/[email protected]
169171
0 tables found
170172
requesting database details for system... writing: debug/schema/[email protected]
171-
29 tables found
173+
30 tables found
172174
requesting table details for system.public.namespace... writing: debug/schema/system/public_namespace.json
173175
requesting table details for system.public.descriptor... writing: debug/schema/system/public_descriptor.json
174176
requesting table details for system.public.users... writing: debug/schema/system/public_users.json
@@ -198,5 +200,6 @@ requesting table details for system.public.statement_diagnostics_requests... wri
198200
requesting table details for system.public.statement_diagnostics... writing: debug/schema/system/public_statement_diagnostics.json
199201
requesting table details for system.public.scheduled_jobs... writing: debug/schema/system/public_scheduled_jobs.json
200202
requesting table details for system.public.sqlliveness... writing: debug/schema/system/public_sqlliveness.json
203+
requesting table details for system.public.long_running_migrations... writing: debug/schema/system/public_long_running_migrations.json
201204
writing: debug/pprof-summary.sh
202205
writing: debug/hot-ranges.sh

pkg/cli/testdata/zip/specialnames

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ requesting table details for defaultdb.public."../system"... writing: debug/sche
2222
requesting database details for postgres... writing: debug/schema/[email protected]
2323
0 tables found
2424
requesting database details for system... writing: debug/schema/[email protected]
25-
29 tables found
25+
30 tables found
2626
requesting table details for system.public.namespace... writing: debug/schema/system-1/public_namespace.json
2727
requesting table details for system.public.descriptor... writing: debug/schema/system-1/public_descriptor.json
2828
requesting table details for system.public.users... writing: debug/schema/system-1/public_users.json
@@ -52,3 +52,4 @@ requesting table details for system.public.statement_diagnostics_requests... wri
5252
requesting table details for system.public.statement_diagnostics... writing: debug/schema/system-1/public_statement_diagnostics.json
5353
requesting table details for system.public.scheduled_jobs... writing: debug/schema/system-1/public_scheduled_jobs.json
5454
requesting table details for system.public.sqlliveness... writing: debug/schema/system-1/public_sqlliveness.json
55+
requesting table details for system.public.long_running_migrations... writing: debug/schema/system-1/public_long_running_migrations.json

pkg/cli/testdata/zip/testzip

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ requesting heap profile for node 1... writing: debug/nodes/1/heap.pprof
5757
requesting heap files for node 1... ? found
5858
requesting goroutine files for node 1... 0 found
5959
requesting log file ...
60-
requesting ranges... 35 found
60+
requesting ranges... 36 found
6161
writing: debug/nodes/1/ranges/1.json
6262
writing: debug/nodes/1/ranges/2.json
6363
writing: debug/nodes/1/ranges/3.json
@@ -93,6 +93,7 @@ writing: debug/nodes/1/ranges/32.json
9393
writing: debug/nodes/1/ranges/33.json
9494
writing: debug/nodes/1/ranges/34.json
9595
writing: debug/nodes/1/ranges/35.json
96+
writing: debug/nodes/1/ranges/36.json
9697
doctor examining cluster...No problems found!
9798
writing: debug/reports/doctor.txt
9899
requesting list of SQL databases... 3 found
@@ -101,7 +102,7 @@ requesting database details for defaultdb... writing: debug/schema/defaultdb@det
101102
requesting database details for postgres... writing: debug/schema/[email protected]
102103
0 tables found
103104
requesting database details for system... writing: debug/schema/[email protected]
104-
29 tables found
105+
30 tables found
105106
requesting table details for system.public.namespace... writing: debug/schema/system/public_namespace.json
106107
requesting table details for system.public.descriptor... writing: debug/schema/system/public_descriptor.json
107108
requesting table details for system.public.users... writing: debug/schema/system/public_users.json
@@ -131,5 +132,6 @@ requesting table details for system.public.statement_diagnostics_requests... wri
131132
requesting table details for system.public.statement_diagnostics... writing: debug/schema/system/public_statement_diagnostics.json
132133
requesting table details for system.public.scheduled_jobs... writing: debug/schema/system/public_scheduled_jobs.json
133134
requesting table details for system.public.sqlliveness... writing: debug/schema/system/public_sqlliveness.json
135+
requesting table details for system.public.long_running_migrations... writing: debug/schema/system/public_long_running_migrations.json
134136
writing: debug/pprof-summary.sh
135137
writing: debug/hot-ranges.sh

pkg/clusterversion/cockroach_versions.go

Lines changed: 32 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,24 @@ const (
203203
CPutInline
204204
// ReplicaVersions enables the versioning of Replica state.
205205
ReplicaVersions
206+
// replacedTruncatedAndRangeAppliedStateMigration stands in for
207+
// TruncatedAndRangeAppliedStateMigration which was re-introduced after the
208+
// migration job was introduced. This is necessary because the jobs
209+
// infrastructure used to run this migration in v21.1 and its later alphas
210+
// was introduced after this version was first introduced. Later code in the
211+
// release relies on the job to run the migration but the job relies on
212+
// its startup migrations having been run. Versions associated with long
213+
// running migrations must follow LongRunningMigrations.
214+
replacedTruncatedAndRangeAppliedStateMigration
215+
// replacedPostTruncatedAndRangeAppliedStateMigration is like the above
216+
// version. See its comment.
217+
replacedPostTruncatedAndRangeAppliedStateMigration
218+
// NewSchemaChanger enables the new schema changer.
219+
NewSchemaChanger
220+
// LongRunningMigrations introduces the LongRunningMigrations table and jobs.
221+
// All versions which have a registered long-running migration must have a
222+
// version higher than this version.
223+
LongRunningMigrations
206224
// TruncatedAndRangeAppliedStateMigration is part of the migration to stop
207225
// using the legacy truncated state within KV. After the migration, we'll be
208226
// using the unreplicated truncated state and the RangeAppliedState on all
@@ -217,8 +235,6 @@ const (
217235
// using the replicated legacy TruncatedState. It's also used in asserting
218236
// that no replicated truncated state representation is found.
219237
PostTruncatedAndRangeAppliedStateMigration
220-
// NewSchemaChanger enables the new schema changer.
221-
NewSchemaChanger
222238

223239
// Step (1): Add new versions here.
224240
)
@@ -350,17 +366,29 @@ var versionsSingleton = keyedVersions([]keyedVersion{
350366
Version: roachpb.Version{Major: 20, Minor: 2, Internal: 12},
351367
},
352368
{
353-
Key: TruncatedAndRangeAppliedStateMigration,
369+
Key: replacedTruncatedAndRangeAppliedStateMigration,
354370
Version: roachpb.Version{Major: 20, Minor: 2, Internal: 14},
355371
},
356372
{
357-
Key: PostTruncatedAndRangeAppliedStateMigration,
373+
Key: replacedPostTruncatedAndRangeAppliedStateMigration,
358374
Version: roachpb.Version{Major: 20, Minor: 2, Internal: 16},
359375
},
360376
{
361377
Key: NewSchemaChanger,
362378
Version: roachpb.Version{Major: 20, Minor: 2, Internal: 18},
363379
},
380+
{
381+
Key: LongRunningMigrations,
382+
Version: roachpb.Version{Major: 20, Minor: 2, Internal: 20},
383+
},
384+
{
385+
Key: TruncatedAndRangeAppliedStateMigration,
386+
Version: roachpb.Version{Major: 20, Minor: 2, Internal: 22},
387+
},
388+
{
389+
Key: PostTruncatedAndRangeAppliedStateMigration,
390+
Version: roachpb.Version{Major: 20, Minor: 2, Internal: 24},
391+
},
364392
// Step (2): Add new versions here.
365393
})
366394

0 commit comments

Comments
 (0)