Skip to content

Commit ab1a740

Browse files
committed
sql/schemachanger: disable declarative CREATE statements
Previously, the decalrative schema changer had CREATE SEQUENCE and CREATE SCHEMA enabled by default. There may not be sufficient testing for both, so we are at a risk of introducing regressiosn. To dddress this, this patch will disable both by default to mitigate risk. Fixes: cockroachdb#107734 Release note: None
1 parent e5a6ded commit ab1a740

File tree

10 files changed

+42
-43
lines changed

10 files changed

+42
-43
lines changed

pkg/sql/logictest/testdata/logic_test/event_log

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -708,8 +708,8 @@ FROM system.eventlog
708708
WHERE "eventType" = 'create_schema'
709709
ORDER BY "timestamp", info
710710
----
711-
1 {"EventType": "create_schema", "Owner": "root", "SchemaName": "test.sc", "Statement": "CREATE SCHEMA test.sc", "Tag": "CREATE SCHEMA", "User": "root"}
712-
1 {"EventType": "create_schema", "Owner": "root", "SchemaName": "test.s", "Statement": "CREATE SCHEMA test.s", "Tag": "CREATE SCHEMA", "User": "root"}
711+
1 {"EventType": "create_schema", "Owner": "root", "SchemaName": "test.sc", "Statement": "CREATE SCHEMA \"\".sc", "Tag": "CREATE SCHEMA", "User": "root"}
712+
1 {"EventType": "create_schema", "Owner": "root", "SchemaName": "test.s", "Statement": "CREATE SCHEMA \"\".s", "Tag": "CREATE SCHEMA", "User": "root"}
713713
1 {"EventType": "create_schema", "Owner": "u", "SchemaName": "test.u", "Statement": "CREATE SCHEMA AUTHORIZATION u", "Tag": "CREATE SCHEMA", "User": "root"}
714714

715715
statement ok

pkg/sql/schemachanger/scbuild/internal/scbuildstmt/process.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,8 +64,8 @@ var supportedStatements = map[reflect.Type]supportedStatement{
6464
reflect.TypeOf((*tree.DropIndex)(nil)): {fn: DropIndex, statementTag: tree.DropIndexTag, on: true, checks: isV231Active},
6565
reflect.TypeOf((*tree.DropFunction)(nil)): {fn: DropFunction, statementTag: tree.DropFunctionTag, on: true, checks: isV231Active},
6666
reflect.TypeOf((*tree.CreateRoutine)(nil)): {fn: CreateFunction, statementTag: tree.CreateRoutineTag, on: true, checks: isV231Active},
67-
reflect.TypeOf((*tree.CreateSchema)(nil)): {fn: CreateSchema, statementTag: tree.CreateSchemaTag, on: true, checks: isV232Active},
68-
reflect.TypeOf((*tree.CreateSequence)(nil)): {fn: CreateSequence, statementTag: tree.CreateSequenceTag, on: true, checks: isV232Active},
67+
reflect.TypeOf((*tree.CreateSchema)(nil)): {fn: CreateSchema, statementTag: tree.CreateSchemaTag, on: false, checks: isV232Active},
68+
reflect.TypeOf((*tree.CreateSequence)(nil)): {fn: CreateSequence, statementTag: tree.CreateSequenceTag, on: false, checks: isV232Active},
6969
}
7070

7171
// supportedStatementTags tracks statement tags which are implemented

pkg/sql/schemachanger/schemachanger_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -493,6 +493,7 @@ func TestSchemaChangeWaitsForOtherSchemaChanges(t *testing.T) {
493493
defer s.Stopper().Stop(ctx)
494494

495495
tdb := sqlutils.MakeSQLRunner(sqlDB)
496+
tdb.Exec(t, "SET CLUSTER SETTING sql.schema.force_declarative_statements='+CREATE SCHEMA'")
496497
tdb.Exec(t, `CREATE DATABASE db`)
497498
tdb.Exec(t, `CREATE SCHEMA db.s1`)
498499
tdb.Exec(t, `CREATE SCHEMA db.s2`)

pkg/sql/schemachanger/testdata/end_to_end/add_column_default_seq/add_column_default_seq.side_effects

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -134,8 +134,8 @@ upsert descriptor #107
134134
+ columnIds:
135135
+ - 2
136136
+ id: 106
137-
formatVersion: 3
138-
id: 107
137+
families:
138+
- columnIds:
139139
...
140140
start: "1"
141141
unexposedParentSchemaId: 105
@@ -289,8 +289,8 @@ upsert descriptor #107
289289
+ columnIds:
290290
+ - 2
291291
+ id: 106
292-
formatVersion: 3
293-
id: 107
292+
families:
293+
- columnIds:
294294
...
295295
start: "1"
296296
unexposedParentSchemaId: 105

pkg/sql/schemachanger/testdata/end_to_end/alter_table_add_check_with_seq_and_udt/alter_table_add_check_with_seq_and_udt.side_effects

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,8 @@ upsert descriptor #104
3434
+ dependedOnBy:
3535
+ - byId: true
3636
+ id: 107
37-
formatVersion: 3
38-
id: 104
37+
families:
38+
- columnIds:
3939
...
4040
start: "1"
4141
unexposedParentSchemaId: 101
@@ -120,8 +120,8 @@ upsert descriptor #104
120120
+ dependedOnBy:
121121
+ - byId: true
122122
+ id: 107
123-
formatVersion: 3
124-
id: 104
123+
families:
124+
- columnIds:
125125
...
126126
start: "1"
127127
unexposedParentSchemaId: 101

pkg/sql/schemachanger/testdata/end_to_end/create_function/create_function.side_effects

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -144,8 +144,8 @@ upsert descriptor #105
144144
+ dependedOnBy:
145145
+ - byId: true
146146
+ id: 110
147-
formatVersion: 3
148-
id: 105
147+
families:
148+
- columnIds:
149149
...
150150
start: "1"
151151
unexposedParentSchemaId: 101
@@ -288,8 +288,8 @@ upsert descriptor #105
288288
+ dependedOnBy:
289289
+ - byId: true
290290
+ id: 110
291-
formatVersion: 3
292-
id: 105
291+
families:
292+
- columnIds:
293293
...
294294
start: "1"
295295
unexposedParentSchemaId: 101

pkg/sql/schemachanger/testdata/end_to_end/drop_function/drop_function.side_effects

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -92,8 +92,8 @@ upsert descriptor #105
9292
- dependedOnBy:
9393
- - byId: true
9494
- id: 109
95-
formatVersion: 3
96-
id: 105
95+
families:
96+
- columnIds:
9797
...
9898
start: "1"
9999
unexposedParentSchemaId: 101
@@ -226,8 +226,8 @@ upsert descriptor #105
226226
+ nameMapping:
227227
+ id: 105
228228
+ name: sq1
229-
formatVersion: 3
230-
id: 105
229+
families:
230+
- columnIds:
231231
...
232232
start: "1"
233233
unexposedParentSchemaId: 101
@@ -377,8 +377,8 @@ upsert descriptor #105
377377
- nameMapping:
378378
- id: 105
379379
- name: sq1
380-
formatVersion: 3
381-
id: 105
380+
families:
381+
- columnIds:
382382
...
383383
start: "1"
384384
unexposedParentSchemaId: 101

pkg/sql/testdata/telemetry/schema

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -154,8 +154,7 @@ sql.schema.schema_changer_mode.legacy
154154
feature-usage
155155
CREATE SCHEMA a
156156
----
157-
sql.schema.create_schema
158-
sql.schema.schema_changer_mode.declarative
157+
sql.schema.schema_changer_mode.legacy
159158

160159
feature-usage
161160
CREATE INDEX ON t(b)

pkg/workload/schemachange/operation_generator.go

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@ import (
3434
"github.com/cockroachdb/cockroach/pkg/sql/sem/tree"
3535
"github.com/cockroachdb/cockroach/pkg/sql/types"
3636
"github.com/cockroachdb/cockroach/pkg/util/timeutil"
37-
"github.com/cockroachdb/cockroach/pkg/workload"
3837
"github.com/cockroachdb/errors"
3938
"github.com/jackc/pgx/v5"
4039
"github.com/jackc/pgx/v5/pgconn"
@@ -358,18 +357,6 @@ func init() {
358357
}
359358
}
360359

361-
// adjustOpWeightsForActiveVersion adjusts the weights for the active cockroach
362-
// version, allowing us to disable certain operations in mixed version scenarios.
363-
func adjustOpWeightsForCockroachVersion(
364-
ctx context.Context, pool *workload.MultiConnPool, opWeights []int,
365-
) error {
366-
tx, err := pool.Get().Begin(ctx)
367-
if err != nil {
368-
return err
369-
}
370-
return tx.Rollback(ctx)
371-
}
372-
373360
// getSupportedDeclarativeOp generates declarative operations until,
374361
// a fully supported one is found. This is required for mixed version testing
375362
// support, where statements may be partially supproted.

pkg/workload/schemachange/schemachange.go

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,10 @@ import (
2222
"os"
2323
"regexp"
2424
"sync"
25+
"sync/atomic"
2526
"time"
2627

28+
"github.com/cockroachdb/cockroach/pkg/clusterversion"
2729
"github.com/cockroachdb/cockroach/pkg/sql/pgwire/pgcode"
2830
"github.com/cockroachdb/cockroach/pkg/util/syncutil"
2931
"github.com/cockroachdb/cockroach/pkg/util/timeutil"
@@ -79,6 +81,7 @@ type schemaChange struct {
7981
logFilePath string
8082
logFile *os.File
8183
dumpLogsOnce *sync.Once
84+
declarativeStatementsEnabled atomic.Bool
8285
workers []*schemaChangeWorker
8386
fkParentInvalidPct int
8487
fkChildInvalidPct int
@@ -181,11 +184,6 @@ func (s *schemaChange) Ops(
181184
if err != nil {
182185
return workload.QueryLoad{}, err
183186
}
184-
185-
err = adjustOpWeightsForCockroachVersion(ctx, pool, opWeights)
186-
if err != nil {
187-
return workload.QueryLoad{}, err
188-
}
189187
ops := newDeck(rand.New(rand.NewSource(timeutil.Now().UnixNano())), opWeights...)
190188
// A separate deck is constructed of only schema changes supported
191189
// by the declarative schema changer. This deck has equal weights,
@@ -209,7 +207,6 @@ func (s *schemaChange) Ops(
209207
}
210208
artifactsLog = makeAtomicLog(s.logFile)
211209
}
212-
213210
s.dumpLogsOnce = &sync.Once{}
214211

215212
for i := 0; i < s.connFlags.Concurrency; i++ {
@@ -447,6 +444,21 @@ func (w *schemaChangeWorker) run(ctx context.Context) error {
447444
return errors.Wrap(err, "cannot get a connection and begin a txn")
448445
}
449446

447+
// Enable extra schema changes, if they are available this moment.
448+
if !w.workload.declarativeStatementsEnabled.Load() {
449+
cannotEnableSchemaChanges, err := isClusterVersionLessThan(ctx, tx, clusterversion.ByKey(clusterversion.V23_2))
450+
if err != nil {
451+
return errors.Wrap(err, "cannot to get active")
452+
}
453+
if !cannotEnableSchemaChanges {
454+
_, err = w.pool.Get().Exec(ctx, `SET CLUSTER SETTING sql.schema.force_declarative_statements="+CREATE SCHEMA, +CREATE SEQUENCE"`)
455+
if err != nil {
456+
return errors.Wrap(err, "cannot to enable extra schema changes")
457+
}
458+
w.workload.declarativeStatementsEnabled.Store(true)
459+
}
460+
}
461+
450462
// Release log entry locks if holding all.
451463
defer w.releaseLocksIfHeld()
452464

0 commit comments

Comments
 (0)