Skip to content

sql: race in CANCEL QUERIES #28033

@danhhz

Description

@danhhz

The following test finds a data race when run with make stressrace. Found while working on #27991.

func TestCancelQueriesRace(t *testing.T) {
	s, sqlDBRaw, _ := serverutils.StartServer(t, base.TestServerArgs{})
	defer s.Stopper().Stop(context.Background())
	sqlDB := sqlutils.MakeSQLRunner(sqlDBRaw)

	go func() {
		_, _ = sqlDB.DB.Exec(`SELECT pg_sleep(1000)`)
	}()
	sqlDB.Exec(t, `CANCEL QUERIES (
		SELECT query_id FROM [SHOW QUERIES] WHERE query LIKE 'SELECT pg_sleep%'
	)`)
	sqlDB.Exec(t, `CANCEL QUERIES (
		SELECT query_id FROM [SHOW QUERIES] WHERE query LIKE 'SELECT pg_sleep%'
	)`)
}
==================
WARNING: DATA RACE
Read at 0x00c4218520e0 by goroutine 252:
  github.com/cockroachdb/cockroach/pkg/sql/sem/tree.(*ResolvableFunctionReference).Format()
      /Users/dan/crdb/src/github.com/cockroachdb/cockroach/pkg/sql/sem/tree/function_name.go:42 +0x3c
  github.com/cockroachdb/cockroach/pkg/sql/sem/tree.(*FmtCtx).formatNodeOrHideConstants()
      /Users/dan/crdb/src/github.com/cockroachdb/cockroach/pkg/sql/sem/tree/hide_constants.go:47 +0x75
  github.com/cockroachdb/cockroach/pkg/sql/sem/tree.(*FmtCtx).FormatNode()
      /Users/dan/crdb/src/github.com/cockroachdb/cockroach/pkg/sql/sem/tree/format.go:268 +0xb2
  github.com/cockroachdb/cockroach/pkg/sql/sem/tree.(*FuncExpr).Format()
      /Users/dan/crdb/src/github.com/cockroachdb/cockroach/pkg/sql/sem/tree/expr.go:1252 +0x1e8
  github.com/cockroachdb/cockroach/pkg/sql/sem/tree.(*FmtCtx).formatNodeOrHideConstants()
      /Users/dan/crdb/src/github.com/cockroachdb/cockroach/pkg/sql/sem/tree/hide_constants.go:47 +0x75
  github.com/cockroachdb/cockroach/pkg/sql/sem/tree.(*FmtCtx).FormatNode()
      /Users/dan/crdb/src/github.com/cockroachdb/cockroach/pkg/sql/sem/tree/format.go:268 +0xb2
  github.com/cockroachdb/cockroach/pkg/sql/sem/tree.(*SelectExpr).Format()
      /Users/dan/crdb/src/github.com/cockroachdb/cockroach/pkg/sql/sem/tree/select.go:169 +0x84
  github.com/cockroachdb/cockroach/pkg/sql/sem/tree.(*FmtCtx).formatNodeOrHideConstants()
      /Users/dan/crdb/src/github.com/cockroachdb/cockroach/pkg/sql/sem/tree/hide_constants.go:47 +0x75
  github.com/cockroachdb/cockroach/pkg/sql/sem/tree.(*FmtCtx).FormatNode()
      /Users/dan/crdb/src/github.com/cockroachdb/cockroach/pkg/sql/sem/tree/format.go:268 +0xb2
  github.com/cockroachdb/cockroach/pkg/sql/sem/tree.(*SelectExprs).Format()
      /Users/dan/crdb/src/github.com/cockroachdb/cockroach/pkg/sql/sem/tree/select.go:136 +0x74
  github.com/cockroachdb/cockroach/pkg/sql/sem/tree.(*FmtCtx).formatNodeOrHideConstants()
      /Users/dan/crdb/src/github.com/cockroachdb/cockroach/pkg/sql/sem/tree/hide_constants.go:47 +0x75
  github.com/cockroachdb/cockroach/pkg/sql/sem/tree.(*FmtCtx).FormatNode()
      /Users/dan/crdb/src/github.com/cockroachdb/cockroach/pkg/sql/sem/tree/format.go:268 +0xb2
  github.com/cockroachdb/cockroach/pkg/sql/sem/tree.(*SelectClause).Format()
      /Users/dan/crdb/src/github.com/cockroachdb/cockroach/pkg/sql/sem/tree/select.go:103 +0x1b1
  github.com/cockroachdb/cockroach/pkg/sql/sem/tree.(*FmtCtx).formatNodeOrHideConstants()
      /Users/dan/crdb/src/github.com/cockroachdb/cockroach/pkg/sql/sem/tree/hide_constants.go:47 +0x75
  github.com/cockroachdb/cockroach/pkg/sql/sem/tree.(*FmtCtx).FormatNode()
      /Users/dan/crdb/src/github.com/cockroachdb/cockroach/pkg/sql/sem/tree/format.go:268 +0xb2
  github.com/cockroachdb/cockroach/pkg/sql/sem/tree.(*Select).Format()
      /Users/dan/crdb/src/github.com/cockroachdb/cockroach/pkg/sql/sem/tree/select.go:52 +0xbe
  github.com/cockroachdb/cockroach/pkg/sql/sem/tree.(*FmtCtx).formatNodeOrHideConstants()
      /Users/dan/crdb/src/github.com/cockroachdb/cockroach/pkg/sql/sem/tree/hide_constants.go:47 +0x75
  github.com/cockroachdb/cockroach/pkg/sql/sem/tree.(*FmtCtx).FormatNode()
      /Users/dan/crdb/src/github.com/cockroachdb/cockroach/pkg/sql/sem/tree/format.go:268 +0xb2
  github.com/cockroachdb/cockroach/pkg/sql/sem/tree.AsStringWithFlags()
      /Users/dan/crdb/src/github.com/cockroachdb/cockroach/pkg/sql/sem/tree/format.go:298 +0x65
  github.com/cockroachdb/cockroach/pkg/sql/sem/tree.AsString()
      /Users/dan/crdb/src/github.com/cockroachdb/cockroach/pkg/sql/sem/tree/format.go:304 +0x4b
  github.com/cockroachdb/cockroach/pkg/sql/sem/tree.(*Select).String()
      /Users/dan/crdb/src/github.com/cockroachdb/cockroach/pkg/sql/sem/tree/stmt.go:847 +0x44
  github.com/cockroachdb/cockroach/pkg/sql.(*connExecutor).serialize()
      /Users/dan/crdb/src/github.com/cockroachdb/cockroach/pkg/sql/conn_executor.go:1967 +0x373
  github.com/cockroachdb/cockroach/pkg/sql.(*SessionRegistry).SerializeAll()
      /Users/dan/crdb/src/github.com/cockroachdb/cockroach/pkg/sql/exec_util.go:929 +0x263
  github.com/cockroachdb/cockroach/pkg/server.(*statusServer).ListLocalSessions()
      /Users/dan/crdb/src/github.com/cockroachdb/cockroach/pkg/server/status.go:1280 +0xfb
  github.com/cockroachdb/cockroach/pkg/server/serverpb._Status_ListLocalSessions_Handler.func1()
      /Users/dan/crdb/src/github.com/cockroachdb/cockroach/pkg/server/serverpb/status.pb.go:1551 +0xa1
  github.com/cockroachdb/cockroach/vendor/github.com/grpc-ecosystem/grpc-opentracing/go/otgrpc.OpenTracingServerInterceptor.func1()
      /Users/dan/crdb/src/github.com/cockroachdb/cockroach/vendor/github.com/grpc-ecosystem/grpc-opentracing/go/otgrpc/server.go:48 +0xc23
  github.com/cockroachdb/cockroach/pkg/rpc.NewServerWithInterceptor.func1()
      /Users/dan/crdb/src/github.com/cockroachdb/cockroach/pkg/rpc/context.go:166 +0x10c
  github.com/cockroachdb/cockroach/pkg/server/serverpb._Status_ListLocalSessions_Handler()
      /Users/dan/crdb/src/github.com/cockroachdb/cockroach/pkg/server/serverpb/status.pb.go:1553 +0x1e3
  github.com/cockroachdb/cockroach/vendor/google.golang.org/grpc.(*Server).processUnaryRPC()
      /Users/dan/crdb/src/github.com/cockroachdb/cockroach/vendor/google.golang.org/grpc/server.go:1011 +0xde7
  github.com/cockroachdb/cockroach/vendor/google.golang.org/grpc.(*Server).handleStream()
      /Users/dan/crdb/src/github.com/cockroachdb/cockroach/vendor/google.golang.org/grpc/server.go:1249 +0x1364
  github.com/cockroachdb/cockroach/vendor/google.golang.org/grpc.(*Server).serveStreams.func1.1()
      /Users/dan/crdb/src/github.com/cockroachdb/cockroach/vendor/google.golang.org/grpc/server.go:680 +0xac

Previous write at 0x00c4218520e0 by goroutine 134:
  github.com/cockroachdb/cockroach/pkg/sql/sem/tree.(*ResolvableFunctionReference).Resolve()
      /Users/dan/crdb/src/github.com/cockroachdb/cockroach/pkg/sql/sem/tree/function_name.go:59 +0x335
  github.com/cockroachdb/cockroach/pkg/sql/sem/transform.(*IsAggregateVisitor).VisitPre()
      /Users/dan/crdb/src/github.com/cockroachdb/cockroach/pkg/sql/sem/transform/aggregates.go:40 +0x15a
  github.com/cockroachdb/cockroach/pkg/sql/sem/tree.WalkExpr()
      /Users/dan/crdb/src/github.com/cockroachdb/cockroach/pkg/sql/sem/tree/walk.go:680 +0x5c
  github.com/cockroachdb/cockroach/pkg/sql/sem/tree.WalkExprConst()
      /Users/dan/crdb/src/github.com/cockroachdb/cockroach/pkg/sql/sem/tree/walk.go:693 +0x56
  github.com/cockroachdb/cockroach/pkg/sql/sem/transform.(*ExprTransformContext).AggregateInExpr()
      /Users/dan/crdb/src/github.com/cockroachdb/cockroach/pkg/sql/sem/transform/expr_transform.go:63 +0xee
  github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder.(*Builder).hasAggregates()
      /Users/dan/crdb/src/github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/groupby.go:105 +0x183
  github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder.(*Builder).needsAggregation()
      /Users/dan/crdb/src/github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/groupby.go:95 +0xd8
  github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder.(*Builder).buildSelectClause()
      /Users/dan/crdb/src/github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/select.go:294 +0xf0
  github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder.(*Builder).buildSelect()
      /Users/dan/crdb/src/github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/select.go:248 +0x3a8
  github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder.(*Builder).buildStmt()
      /Users/dan/crdb/src/github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/builder.go:176 +0x14e
  github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder.(*Builder).Build()
      /Users/dan/crdb/src/github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/builder.go:133 +0x126
  github.com/cockroachdb/cockroach/pkg/sql.(*planner).makeOptimizerPlan()
      /Users/dan/crdb/src/github.com/cockroachdb/cockroach/pkg/sql/plan.go:378 +0x676
  github.com/cockroachdb/cockroach/pkg/sql.(*planner).optionallyUseOptimizer()
      /Users/dan/crdb/src/github.com/cockroachdb/cockroach/pkg/sql/planner.go:551 +0xeb
  github.com/cockroachdb/cockroach/pkg/sql.(*connExecutor).dispatchToExecutionEngine()
      /Users/dan/crdb/src/github.com/cockroachdb/cockroach/pkg/sql/conn_executor_exec.go:728 +0x232
  github.com/cockroachdb/cockroach/pkg/sql.(*connExecutor).execStmtInOpenState()
      /Users/dan/crdb/src/github.com/cockroachdb/cockroach/pkg/sql/conn_executor_exec.go:401 +0x108d
  github.com/cockroachdb/cockroach/pkg/sql.(*connExecutor).execStmt()
      /Users/dan/crdb/src/github.com/cockroachdb/cockroach/pkg/sql/conn_executor_exec.go:95 +0x46e
  github.com/cockroachdb/cockroach/pkg/sql.(*connExecutor).run()
      /Users/dan/crdb/src/github.com/cockroachdb/cockroach/pkg/sql/conn_executor.go:1078 +0x31dc
  github.com/cockroachdb/cockroach/pkg/sql.(*Server).ServeConn()
      /Users/dan/crdb/src/github.com/cockroachdb/cockroach/pkg/sql/conn_executor.go:415 +0x1e0
  github.com/cockroachdb/cockroach/pkg/sql/pgwire.(*conn).serveImpl.func3()
      /Users/dan/crdb/src/github.com/cockroachdb/cockroach/pkg/sql/pgwire/conn.go:267 +0x1a9

Goroutine 252 (running) created at:
  github.com/cockroachdb/cockroach/vendor/google.golang.org/grpc.(*Server).serveStreams.func1()
      /Users/dan/crdb/src/github.com/cockroachdb/cockroach/vendor/google.golang.org/grpc/server.go:678 +0xb8
  github.com/cockroachdb/cockroach/vendor/google.golang.org/grpc/transport.(*http2Server).operateHeaders()
      /Users/dan/crdb/src/github.com/cockroachdb/cockroach/vendor/google.golang.org/grpc/transport/http2_server.go:417 +0x1446
  github.com/cockroachdb/cockroach/vendor/google.golang.org/grpc/transport.(*http2Server).HandleStreams()
      /Users/dan/crdb/src/github.com/cockroachdb/cockroach/vendor/google.golang.org/grpc/transport/http2_server.go:457 +0x87a
  github.com/cockroachdb/cockroach/vendor/google.golang.org/grpc.(*Server).serveStreams()
      /Users/dan/crdb/src/github.com/cockroachdb/cockroach/vendor/google.golang.org/grpc/server.go:676 +0x16e
  github.com/cockroachdb/cockroach/vendor/google.golang.org/grpc.(*Server).handleRawConn.func2()
      /Users/dan/crdb/src/github.com/cockroachdb/cockroach/vendor/google.golang.org/grpc/server.go:631 +0x53
  github.com/cockroachdb/cockroach/vendor/google.golang.org/grpc.(*Server).handleRawConn.func3()
      /Users/dan/crdb/src/github.com/cockroachdb/cockroach/vendor/google.golang.org/grpc/server.go:639 +0x34

Goroutine 134 (running) created at:
  github.com/cockroachdb/cockroach/pkg/sql/pgwire.(*conn).serveImpl()
      /Users/dan/crdb/src/github.com/cockroachdb/cockroach/pkg/sql/pgwire/conn.go:266 +0x147a
  github.com/cockroachdb/cockroach/pkg/sql/pgwire.serveConn()
      /Users/dan/crdb/src/github.com/cockroachdb/cockroach/pkg/sql/pgwire/conn.go:162 +0x240
  github.com/cockroachdb/cockroach/pkg/sql/pgwire.(*Server).ServeConn()
      /Users/dan/crdb/src/github.com/cockroachdb/cockroach/pkg/sql/pgwire/server.go:453 +0x9b2
  github.com/cockroachdb/cockroach/pkg/server.(*Server).Start.func19.1()
      /Users/dan/crdb/src/github.com/cockroachdb/cockroach/pkg/server/server.go:1608 +0x17e
  github.com/cockroachdb/cockroach/pkg/util/netutil.(*Server).ServeWith.func1()
      /Users/dan/crdb/src/github.com/cockroachdb/cockroach/pkg/util/netutil/net.go:141 +0xd9
==================

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-sql-executionRelating to SQL execution.C-bugCode not up to spec/doc, specs & docs deemed correct. Solution expected to change code/behavior.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions