Skip to content

opt: remove race-causing lazy calculation of properties #36148

@madelynnblue

Description

@madelynnblue
WARNING: DATA RACE
Read at 0x000005ee2ca8 by goroutine 340:
  github.com/cockroachdb/cockroach/pkg/sql/opt/memo.(*FiltersItem).ScalarProps()
      /home/mjibson/src/github.com/cockroachdb/cockroach/pkg/sql/opt/memo/expr.og.go:6310 +0x47
  github.com/cockroachdb/cockroach/pkg/sql/opt/norm.(*CustomFuncs).IsContradiction()
      /home/mjibson/src/github.com/cockroachdb/cockroach/pkg/sql/opt/norm/custom_funcs.go:429 +0x5e
  github.com/cockroachdb/cockroach/pkg/sql/opt/norm.(*Factory).ConstructSelect()
      /home/mjibson/src/github.com/cockroachdb/cockroach/pkg/sql/opt/norm/factory.og.go:273 +0x1291
  github.com/cockroachdb/cockroach/pkg/sql/opt/norm.(*Factory).ConstructSelect()
      /home/mjibson/src/github.com/cockroachdb/cockroach/pkg/sql/opt/norm/factory.og.go:159 +0x671
  github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder.(*Builder).buildWhere()
      /home/mjibson/src/github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/select.go:728 +0x42b
  github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder.(*Builder).buildSelectClause()
      /home/mjibson/src/github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/select.go:636 +0xd0
  github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder.(*Builder).buildSelect()
      /home/mjibson/src/github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/select.go:589 +0x47e
  github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder.(*Builder).buildStmt()
      /home/mjibson/src/github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/builder.go:215 +0x3c4
  github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder.(*scope).replaceSubquery()
      /home/mjibson/src/github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/scope.go:1102 +0x28c
  github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder.(*scope).VisitPre()
      /home/mjibson/src/github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/scope.go:878 +0x2fc
  github.com/cockroachdb/cockroach/pkg/sql/sem/tree.WalkExpr()
      /home/mjibson/src/github.com/cockroachdb/cockroach/pkg/sql/sem/tree/walk.go:680 +0x83
  github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder.(*scope).walkExprTree()
      /home/mjibson/src/github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/scope.go:266 +0x7e
  github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder.(*scope).resolveType()
      /home/mjibson/src/github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/scope.go:302 +0x59
  github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder.(*Builder).analyzeSelectList()
      /home/mjibson/src/github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/project.go:146 +0x65e
  github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder.(*Builder).analyzeReturningList()
      /home/mjibson/src/github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/project.go:98 +0x28a
  github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder.(*mutationBuilder).buildReturning()
      /home/mjibson/src/github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/mutation_builder.go:677 +0x9ad
  github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder.(*mutationBuilder).buildDelete()
      /home/mjibson/src/github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/delete.go:92 +0x199
  github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder.(*Builder).buildDelete()
      /home/mjibson/src/github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/delete.go:78 +0x4d4
  github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder.(*Builder).buildStmt()
      /home/mjibson/src/github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/builder.go:206 +0x28f
  github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder.(*Builder).buildDataSource()
      /home/mjibson/src/github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/select.go:121 +0x105e
  github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder.(*Builder).buildDataSource()
      /home/mjibson/src/github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/select.go:57 +0x3da
  github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder.(*Builder).buildFromTables()
      /home/mjibson/src/github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/select.go:748 +0xa1
  github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder.(*Builder).buildFromTables()
      /home/mjibson/src/github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/select.go:755 +0x115
  github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder.(*Builder).buildFrom()
      /home/mjibson/src/github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/select.go:694 +0xdd
  github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder.(*Builder).buildSelectClause()
      /home/mjibson/src/github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/select.go:635 +0x85
  github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder.(*Builder).buildSelect()
      /home/mjibson/src/github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/select.go:589 +0x47e
  github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder.(*Builder).buildStmt()
      /home/mjibson/src/github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/builder.go:215 +0x3c4
  github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder.(*scope).replaceSubquery()
      /home/mjibson/src/github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/scope.go:1102 +0x28c
  github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder.(*scope).VisitPre()
      /home/mjibson/src/github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/scope.go:878 +0x2fc
  github.com/cockroachdb/cockroach/pkg/sql/sem/tree.WalkExpr()
      /home/mjibson/src/github.com/cockroachdb/cockroach/pkg/sql/sem/tree/walk.go:680 +0x83
  github.com/cockroachdb/cockroach/pkg/sql/sem/tree.(*CastExpr).Walk()
      /home/mjibson/src/github.com/cockroachdb/cockroach/pkg/sql/sem/tree/walk.go:131 +0x6c
  github.com/cockroachdb/cockroach/pkg/sql/sem/tree.WalkExpr()
      /home/mjibson/src/github.com/cockroachdb/cockroach/pkg/sql/sem/tree/walk.go:683 +0x45b
  github.com/cockroachdb/cockroach/pkg/sql/sem/tree.(*BinaryExpr).Walk()
      /home/mjibson/src/github.com/cockroachdb/cockroach/pkg/sql/sem/tree/walk.go:73 +0xe3
  github.com/cockroachdb/cockroach/pkg/sql/sem/tree.WalkExpr()
      /home/mjibson/src/github.com/cockroachdb/cockroach/pkg/sql/sem/tree/walk.go:683 +0x45b
  github.com/cockroachdb/cockroach/pkg/sql/sem/tree.(*ParenExpr).Walk()
      /home/mjibson/src/github.com/cockroachdb/cockroach/pkg/sql/sem/tree/walk.go:466 +0x7e
  github.com/cockroachdb/cockroach/pkg/sql/sem/tree.WalkExpr()
      /home/mjibson/src/github.com/cockroachdb/cockroach/pkg/sql/sem/tree/walk.go:683 +0x45b
  github.com/cockroachdb/cockroach/pkg/sql/sem/tree.(*CastExpr).Walk()
      /home/mjibson/src/github.com/cockroachdb/cockroach/pkg/sql/sem/tree/walk.go:131 +0x6c
  github.com/cockroachdb/cockroach/pkg/sql/sem/tree.WalkExpr()
      /home/mjibson/src/github.com/cockroachdb/cockroach/pkg/sql/sem/tree/walk.go:683 +0x45b
  github.com/cockroachdb/cockroach/pkg/sql/sem/tree.walkExprSlice()
      /home/mjibson/src/github.com/cockroachdb/cockroach/pkg/sql/sem/tree/walk.go:515 +0xe4
  github.com/cockroachdb/cockroach/pkg/sql/sem/tree.(*FuncExpr).Walk()
      /home/mjibson/src/github.com/cockroachdb/cockroach/pkg/sql/sem/tree/walk.go:303 +0x97
  github.com/cockroachdb/cockroach/pkg/sql/sem/tree.WalkExpr()
      /home/mjibson/src/github.com/cockroachdb/cockroach/pkg/sql/sem/tree/walk.go:683 +0x45b
  github.com/cockroachdb/cockroach/pkg/sql/sem/tree.(*CastExpr).Walk()
      /home/mjibson/src/github.com/cockroachdb/cockroach/pkg/sql/sem/tree/walk.go:131 +0x6c
  github.com/cockroachdb/cockroach/pkg/sql/sem/tree.WalkExpr()
      /home/mjibson/src/github.com/cockroachdb/cockroach/pkg/sql/sem/tree/walk.go:683 +0x45b
  github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder.(*scope).walkExprTree()
      /home/mjibson/src/github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/scope.go:266 +0x7e
  github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder.(*scope).resolveType()
      /home/mjibson/src/github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/scope.go:302 +0x59
  github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder.(*Builder).analyzeSelectList()
      /home/mjibson/src/github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/project.go:146 +0x65e
  github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder.(*Builder).analyzeProjectionList()
      /home/mjibson/src/github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/project.go:80 +0x302
  github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder.(*Builder).buildSelectClause()
      /home/mjibson/src/github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/select.go:644 +0x31e
  github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder.(*Builder).buildSelect()
      /home/mjibson/src/github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/select.go:589 +0x47e
  github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder.(*mutationBuilder).buildInputForInsert()
      /home/mjibson/src/github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/insert.go:538 +0x325
  github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder.(*Builder).buildInsert()
      /home/mjibson/src/github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/insert.go:221 +0x446
  github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder.(*Builder).buildStmt()
      /home/mjibson/src/github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/builder.go:212 +0x4c0
  github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder.(*Builder).Build()
      /home/mjibson/src/github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/builder.go:159 +0x23e
  github.com/cockroachdb/cockroach/pkg/sql.(*optPlanningCtx).buildExecMemo()
      /home/mjibson/src/github.com/cockroachdb/cockroach/pkg/sql/plan_opt.go:425 +0x3b3
  github.com/cockroachdb/cockroach/pkg/sql.(*planner).makeOptimizerPlan()
      /home/mjibson/src/github.com/cockroachdb/cockroach/pkg/sql/plan_opt.go:154 +0xea
  github.com/cockroachdb/cockroach/pkg/sql.(*connExecutor).makeExecPlan()
      /home/mjibson/src/github.com/cockroachdb/cockroach/pkg/sql/conn_executor_exec.go:987 +0x1ee
  github.com/cockroachdb/cockroach/pkg/sql.(*connExecutor).dispatchToExecutionEngine()
      /home/mjibson/src/github.com/cockroachdb/cockroach/pkg/sql/conn_executor_exec.go:874 +0x1f5
  github.com/cockroachdb/cockroach/pkg/sql.(*connExecutor).execStmtInOpenState()
      /home/mjibson/src/github.com/cockroachdb/cockroach/pkg/sql/conn_executor_exec.go:459 +0xf86
  github.com/cockroachdb/cockroach/pkg/sql.(*connExecutor).execStmt()
      /home/mjibson/src/github.com/cockroachdb/cockroach/pkg/sql/conn_executor_exec.go:101 +0x7d9
  github.com/cockroachdb/cockroach/pkg/sql.(*connExecutor).run()
      /home/mjibson/src/github.com/cockroachdb/cockroach/pkg/sql/conn_executor.go:1183 +0x37d3
  github.com/cockroachdb/cockroach/pkg/sql.(*Server).ServeConn()
      /home/mjibson/src/github.com/cockroachdb/cockroach/pkg/sql/conn_executor.go:433 +0xef
  github.com/cockroachdb/cockroach/pkg/sql/pgwire.(*conn).serveImpl.func4()
      /home/mjibson/src/github.com/cockroachdb/cockroach/pkg/sql/pgwire/conn.go:338 +0xfc

Previous write at 0x000005ee2ca8 by goroutine 260:
  github.com/cockroachdb/cockroach/pkg/sql/opt/memo.(*logicalPropsBuilder).buildFiltersItemProps()
      /home/mjibson/src/github.com/cockroachdb/cockroach/pkg/sql/opt/memo/logical_props_builder.go:1101 +0x275
  github.com/cockroachdb/cockroach/pkg/sql/opt/memo.(*FiltersItem).ScalarProps()
      /home/mjibson/src/github.com/cockroachdb/cockroach/pkg/sql/opt/memo/expr.og.go:6311 +0x97
  github.com/cockroachdb/cockroach/pkg/sql/opt/norm.(*CustomFuncs).IsContradiction()
      /home/mjibson/src/github.com/cockroachdb/cockroach/pkg/sql/opt/norm/custom_funcs.go:429 +0x5e
  github.com/cockroachdb/cockroach/pkg/sql/opt/norm.(*Factory).ConstructSelect()
      /home/mjibson/src/github.com/cockroachdb/cockroach/pkg/sql/opt/norm/factory.og.go:273 +0x1291
  github.com/cockroachdb/cockroach/pkg/sql/opt/norm.(*Factory).ConstructSelect()
      /home/mjibson/src/github.com/cockroachdb/cockroach/pkg/sql/opt/norm/factory.og.go:159 +0x671
  github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder.(*Builder).buildWhere()
      /home/mjibson/src/github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/select.go:728 +0x42b
  github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder.(*mutationBuilder).buildInputForUpdateOrDelete()
      /home/mjibson/src/github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/mutation_builder.go:198 +0x1aa
  github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder.(*Builder).buildUpdate()
      /home/mjibson/src/github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/update.go:108 +0x414
  github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder.(*Builder).buildStmt()
      /home/mjibson/src/github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/builder.go:224 +0x23c
  github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder.(*Builder).Build()
      /home/mjibson/src/github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/builder.go:159 +0x23e
  github.com/cockroachdb/cockroach/pkg/sql.(*optPlanningCtx).buildExecMemo()
      /home/mjibson/src/github.com/cockroachdb/cockroach/pkg/sql/plan_opt.go:425 +0x3b3
  github.com/cockroachdb/cockroach/pkg/sql.(*planner).makeOptimizerPlan()
      /home/mjibson/src/github.com/cockroachdb/cockroach/pkg/sql/plan_opt.go:154 +0xea
  github.com/cockroachdb/cockroach/pkg/sql.(*connExecutor).makeExecPlan()
      /home/mjibson/src/github.com/cockroachdb/cockroach/pkg/sql/conn_executor_exec.go:987 +0x1ee
  github.com/cockroachdb/cockroach/pkg/sql.(*connExecutor).dispatchToExecutionEngine()
      /home/mjibson/src/github.com/cockroachdb/cockroach/pkg/sql/conn_executor_exec.go:874 +0x1f5
  github.com/cockroachdb/cockroach/pkg/sql.(*connExecutor).execStmtInOpenState()
      /home/mjibson/src/github.com/cockroachdb/cockroach/pkg/sql/conn_executor_exec.go:459 +0xf86
  github.com/cockroachdb/cockroach/pkg/sql.(*connExecutor).execStmt()
      /home/mjibson/src/github.com/cockroachdb/cockroach/pkg/sql/conn_executor_exec.go:101 +0x7d9
  github.com/cockroachdb/cockroach/pkg/sql.(*connExecutor).run()
      /home/mjibson/src/github.com/cockroachdb/cockroach/pkg/sql/conn_executor.go:1183 +0x37d3
  github.com/cockroachdb/cockroach/pkg/sql.(*Server).ServeConn()
      /home/mjibson/src/github.com/cockroachdb/cockroach/pkg/sql/conn_executor.go:433 +0xef
  github.com/cockroachdb/cockroach/pkg/sql/pgwire.(*conn).serveImpl.func4()
      /home/mjibson/src/github.com/cockroachdb/cockroach/pkg/sql/pgwire/conn.go:338 +0xfc

Goroutine 340 (running) created at:
  github.com/cockroachdb/cockroach/pkg/sql/pgwire.(*conn).serveImpl()
      /home/mjibson/src/github.com/cockroachdb/cockroach/pkg/sql/pgwire/conn.go:321 +0x1580
  github.com/cockroachdb/cockroach/pkg/sql/pgwire.serveConn()
      /home/mjibson/src/github.com/cockroachdb/cockroach/pkg/sql/pgwire/conn.go:170 +0x2e8
  github.com/cockroachdb/cockroach/pkg/sql/pgwire.(*Server).ServeConn()
      /home/mjibson/src/github.com/cockroachdb/cockroach/pkg/sql/pgwire/server.go:518 +0xc4e
  github.com/cockroachdb/cockroach/pkg/server.(*Server).Start.func20.1()
      /home/mjibson/src/github.com/cockroachdb/cockroach/pkg/server/server.go:1713 +0x1b7
  github.com/cockroachdb/cockroach/pkg/util/netutil.(*Server).ServeWith.func1()
      /home/mjibson/src/github.com/cockroachdb/cockroach/pkg/util/netutil/net.go:139 +0xdf

Goroutine 260 (running) created at:
  github.com/cockroachdb/cockroach/pkg/sql/pgwire.(*conn).serveImpl()
      /home/mjibson/src/github.com/cockroachdb/cockroach/pkg/sql/pgwire/conn.go:321 +0x1580
  github.com/cockroachdb/cockroach/pkg/sql/pgwire.serveConn()
      /home/mjibson/src/github.com/cockroachdb/cockroach/pkg/sql/pgwire/conn.go:170 +0x2e8
  github.com/cockroachdb/cockroach/pkg/sql/pgwire.(*Server).ServeConn()
      /home/mjibson/src/github.com/cockroachdb/cockroach/pkg/sql/pgwire/server.go:518 +0xc4e
  github.com/cockroachdb/cockroach/pkg/server.(*Server).Start.func20.1()
      /home/mjibson/src/github.com/cockroachdb/cockroach/pkg/server/server.go:1713 +0x1b7
  github.com/cockroachdb/cockroach/pkg/util/netutil.(*Server).ServeWith.func1()
      /home/mjibson/src/github.com/cockroachdb/cockroach/pkg/util/netutil/net.go:139 +0xdf

Found while running multiple sqlsmiths:

make testrace 'PKG=./pkg/sql/tests' 'TESTS=SQLSmith' 'TESTFLAGS=-rsg 10m -rsg-routines 5 -v'

Metadata

Metadata

Labels

C-bugCode not up to spec/doc, specs & docs deemed correct. Solution expected to change code/behavior.O-sqlsmith

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions