From c824784c9a778d91141d94fdb3a8d3059ea2df4d Mon Sep 17 00:00:00 2001 From: Hangjie Mo Date: Tue, 6 Sep 2022 13:48:55 +0800 Subject: [PATCH] parser: support do some adminStmt in read-only mode (#37635) close pingcap/tidb#37631 --- executor/executor_test.go | 1 + parser/ast/util.go | 9 +++++++++ tests/readonlytest/readonly_test.go | 6 ++++++ 3 files changed, 16 insertions(+) diff --git a/executor/executor_test.go b/executor/executor_test.go index e8dd7541d1..7999b04590 100644 --- a/executor/executor_test.go +++ b/executor/executor_test.go @@ -4308,6 +4308,7 @@ func TestAdminShowDDLJobs(t *testing.T) { require.NoError(t, err) err = meta.NewMeta(txn).AddHistoryDDLJob(job, true) require.NoError(t, err) + tk.Session().StmtCommit() re = tk.MustQuery("admin show ddl jobs 1") row = re.Rows()[0] diff --git a/parser/ast/util.go b/parser/ast/util.go index 6caae36a20..445b0461b1 100644 --- a/parser/ast/util.go +++ b/parser/ast/util.go @@ -55,6 +55,15 @@ func IsReadOnly(node Node) bool { } } return true + case *AdminStmt: + switch node.(*AdminStmt).Tp { + case AdminShowTelemetry, AdminShowDDL, AdminShowDDLJobs, AdminShowSlow, + AdminCaptureBindings, AdminShowNextRowID, AdminShowDDLJobQueries, + AdminShowDDLJobQueriesWithRange: + return true + default: + return false + } default: return false } diff --git a/tests/readonlytest/readonly_test.go b/tests/readonlytest/readonly_test.go index 7b803cb45c..5bf71f17a0 100644 --- a/tests/readonlytest/readonly_test.go +++ b/tests/readonlytest/readonly_test.go @@ -155,6 +155,12 @@ func TestRestriction(t *testing.T) { require.Error(t, err) require.Equal(t, err.Error(), PriviledgedErrMsg) + // can do some Admin stmts + _, err = s.udb.Exec("admin show ddl jobs") + require.NoError(t, err) + _, err = s.udb.Exec("admin show slow recent 1") + require.NoError(t, err) + // turn off tidb_restricted_read_only does not affect tidb_super_read_only setVariableNoError(t, s.db, TiDBRestrictedReadOnly, 0)