-
Notifications
You must be signed in to change notification settings - Fork 3.8k
/
alter_statement_diagnostics_requests.go
73 lines (66 loc) · 2.54 KB
/
alter_statement_diagnostics_requests.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
// Copyright 2021 The Cockroach Authors.
//
// Use of this software is governed by the Business Source License
// included in the file licenses/BSL.txt.
//
// As of the Change Date specified in that file, in accordance with
// the Business Source License, use of this software will be governed
// by the Apache License, Version 2.0, included in the file
// licenses/APL.txt.
package migrations
import (
"context"
"github.com/cockroachdb/cockroach/pkg/clusterversion"
"github.com/cockroachdb/cockroach/pkg/jobs"
"github.com/cockroachdb/cockroach/pkg/keys"
"github.com/cockroachdb/cockroach/pkg/migration"
"github.com/cockroachdb/cockroach/pkg/sql/catalog"
"github.com/cockroachdb/cockroach/pkg/sql/catalog/systemschema"
)
// Target schema changes in the system.statement_diagnostics_requests table,
// adding two columns and updating the secondary index to store those columns.
const (
addColsToStmtDiagReqs = `
ALTER TABLE system.statement_diagnostics_requests
ADD COLUMN min_execution_latency_ms INT8 NULL,
ADD COLUMN expires_at TIMESTAMPTZ NOT NULL DEFAULT now() + '100 years'`
createCompletedIdxV2 = `
CREATE INDEX completed_idx_v2 ON system.statement_diagnostics_requests (completed, ID)
STORING (statement_fingerprint, min_execution_latency_ms, expires_at)`
dropCompletedIdx = `DROP INDEX IF EXISTS completed_idx`
)
// alterSystemStmtDiagReqs changes the schema of the
// system.statement_diagnostics_requests table. It adds two columns which are
// then included into STORING clause of the secondary index.
func alterSystemStmtDiagReqs(
ctx context.Context, cs clusterversion.ClusterVersion, d migration.TenantDeps, _ *jobs.Job,
) error {
for _, op := range []operation{
{
name: "add-stmt-diag-reqs-conditional-columns",
schemaList: []string{"min_execution_latency_ms", "expires_at"},
query: addColsToStmtDiagReqs,
schemaExistsFn: hasColumn,
},
{
name: "create-stmt-diag-reqs-new-index",
schemaList: []string{"completed_idx_v2"},
query: createCompletedIdxV2,
schemaExistsFn: hasIndex,
},
{
name: "drop-stmt-diag-reqs-old-index",
schemaList: []string{"completed_idx"},
query: dropCompletedIdx,
// DROP INDEX IF EXISTS can be safely execute many times.
schemaExistsFn: func(catalog.TableDescriptor, catalog.TableDescriptor, string) (bool, error) {
return false, nil
},
},
} {
if err := migrateTable(ctx, cs, d, op, keys.StatementDiagnosticsRequestsTableID, systemschema.StatementDiagnosticsRequestsTable); err != nil {
return err
}
}
return nil
}