-
Notifications
You must be signed in to change notification settings - Fork 3.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
sentry: datum.go:391: cannot convert × to type × -- *errutil.leafError: cannot convert × to type × (1) datum.go:391: *withstack.withStack (top exception) *assert.withAssertionFailure (check the extra data payloads) #57084
Labels
A-partial-indexes
Relating to partial indexes.
A-sql-optimizer
SQL logical planning and optimizations.
C-bug
Code not up to spec/doc, specs & docs deemed correct. Solution expected to change code/behavior.
O-sentry
Originated from an in-the-wild panic report.
Comments
cockroach-teamcity
added
C-bug
Code not up to spec/doc, specs & docs deemed correct. Solution expected to change code/behavior.
O-sentry
Originated from an in-the-wild panic report.
labels
Nov 24, 2020
jordanlewis
added
A-sql-optimizer
SQL logical planning and optimizations.
A-partial-indexes
Relating to partial indexes.
labels
Nov 24, 2020
See #57085 |
mgartner
added a commit
to mgartner/cockroach
that referenced
this issue
Nov 25, 2020
This commit fixes several bugs that are present when using foreign key cascading updates and partial indexes. Previously, the optimizer was not synthesizing partial index DEL columns for FK cascading updates. As a result, a partial index on a child table could become inconsistent with the rows in the primary index, ultimately resulting in incorrect query results. The optbuilder has been refactored to project these columns and to reduce the complexity of doing so. As a result, partial index PUT and DEL columns are now projected in the same expression, rather than the DEL columns being projected as far down in the expression tree as possible. Additionally, the execution engine was unable to handle extraneous columns that can be added as input to FK cascading updates. These extraneous columns would be incorrectly interpreted as synthesized partial index columns. This commit works around this issue by passing a set of partial indexes that columns have been synthesized for from the optimizer to the execution engine. The longer term fix is to not produce these columns (see issue cockroachdb#57097). Fixes cockroachdb#57085 Fixes cockroachdb#57084 Release justification: This is a critical bug fix to a new feature, partial indexes. Release note (bug fix): Previously, updating parent table of a foreign key relationship with cascading updates could cause errors or inconsistencies in partial indexes for child tables with partial indexes. The inconsistency of partial indexes could result in incorrect query results. This has been fixed.
mgartner
added a commit
to mgartner/cockroach
that referenced
this issue
Nov 26, 2020
Previously, the optimizer was not synthesizing partial index DEL columns for FK cascading updates and deletes. As a result, a cascading `UPDATE` could corrupt a child table's partial index, ultimately resulting in incorrect query results. A cascading `DELETE` would not corrupt partial indexes, but unnecessary `DEL` operations would be issued on the partial index. The optbuilder has been refactored so that these columns are correctly projected. Both PUT and DEL columns are now projected in the same function, `mutationBuilder.projectPartialIndexCols`. This function is called from principal functions in the optbuilder where CHECK constraint columns are also projected, like `mutationBuilder.buildUpdate`. In theory this should make it harder in the future to omit these necessary projections. Additionally, the execution engine was unable to handle extraneous columns that can be added as input to FK cascading updates. These extraneous columns would be incorrectly interpreted as synthesized partial index columns. This commit works around this issue by slicing the source values with an upper bound in `upateNode.processSourceRow`. The longer term fix is to not produce these columns (see issue cockroachdb#57097). Fixes cockroachdb#57085 Fixes cockroachdb#57084 Release justification: This is a critical bug fix to a new feature, partial indexes. Release note (bug fix): A bug has been fixed that caused errors or corrupted partial indexes of child tables in foreign key relationships with cascading `UPDATE`s and `DELETE`s. The corrupt partial indexes could result in incorrect query results. Any partial indexes on child tables of foreign key relationships with `ON DELETE CASCADE` or `ON UPDATE CASCADE` actions may be corrupt and should be dropped and re-created. This bug was introduce in version 20.2.
mgartner
added a commit
to mgartner/cockroach
that referenced
this issue
Dec 1, 2020
Previously, the optimizer was not synthesizing partial index DEL columns for FK cascading updates and deletes. As a result, a cascading `UPDATE` could corrupt a child table's partial index, ultimately resulting in incorrect query results. A cascading `DELETE` would not corrupt partial indexes, but unnecessary `DEL` operations would be issued on the partial index. The optbuilder has been refactored so that these columns are correctly projected. Both PUT and DEL columns are now projected in the same function, `mutationBuilder.projectPartialIndexCols`. This function is called from principal functions in the optbuilder where CHECK constraint columns are also projected, like `mutationBuilder.buildUpdate`. In theory this should make it harder in the future to omit these necessary projections. Additionally, the execution engine was unable to handle extraneous columns that can be added as input to FK cascading updates. These extraneous columns would be incorrectly interpreted as synthesized partial index columns. This commit works around this issue by slicing the source values with an upper bound in `upateNode.processSourceRow`. The longer term fix is to not produce these columns (see issue cockroachdb#57097). Fixes cockroachdb#57085 Fixes cockroachdb#57084 Release justification: This is a critical bug fix to a new feature, partial indexes. Release note (bug fix): A bug has been fixed that caused errors or corrupted partial indexes of child tables in foreign key relationships with cascading `UPDATE`s and `DELETE`s. The corrupt partial indexes could result in incorrect query results. Any partial indexes on child tables of foreign key relationships with `ON DELETE CASCADE` or `ON UPDATE CASCADE` actions may be corrupt and should be dropped and re-created. This bug was introduce in version 20.2.
mgartner
added a commit
to mgartner/cockroach
that referenced
this issue
Dec 1, 2020
Previously, the optimizer was not synthesizing partial index DEL columns for FK cascading updates and deletes. As a result, a cascading `UPDATE` could corrupt a child table's partial index, ultimately resulting in incorrect query results. A cascading `DELETE` would not corrupt partial indexes, but unnecessary `DEL` operations would be issued on the partial index. The optbuilder has been refactored so that these columns are correctly projected. There are now three functions for projecting PUT columns, DEL columns, and both PUT and DEL columns, each ensuring that the input scopes are non-nil. These three functions are called from principal functions in the optbuilder where CHECK constraint columns are also projected, like `mutationBuilder.buildUpdate`. In theory this should make it harder in the future to omit these necessary projections. Additionally, the execution engine was unable to handle extraneous columns that can be added as input to FK cascading updates. These extraneous columns would be incorrectly interpreted as synthesized partial index columns. This commit works around this issue by slicing the source values with an upper bound in `updateNode.processSourceRow`. The longer term fix is to not produce these columns (see issue cockroachdb#57097). Fixes cockroachdb#57085 Fixes cockroachdb#57084 Release justification: This is a critical bug fix to a new feature, partial indexes. Release note (bug fix): A bug has been fixed that caused errors or corrupted partial indexes of child tables in foreign key relationships with cascading `UPDATE`s and `DELETE`s. The corrupt partial indexes could result in incorrect query results. Any partial indexes on child tables of foreign key relationships with `ON DELETE CASCADE` or `ON UPDATE CASCADE` actions may be corrupt and should be dropped and re-created. This bug was introduce in version 20.2.
craig bot
pushed a commit
that referenced
this issue
Dec 1, 2020
57100: opt: fix FK cascades to child tables with partial indexes r=mgartner a=mgartner Previously, the optimizer was not synthesizing partial index DEL columns for FK cascading updates and deletes. As a result, a cascading `UPDATE` could corrupt a child table's partial index, ultimately resulting in incorrect query results. A cascading `DELETE` would not corrupt partial indexes, but unnecessary `DEL` operations would be issued on the partial index. The optbuilder has been refactored so that these columns are correctly projected. There are now three functions for projecting PUT columns, DEL columns, and both PUT and DEL columns, each ensuring that the input scopes are non-nil. These three functions are called from principal functions in the optbuilder where CHECK constraint columns are also projected, like `mutationBuilder.buildUpdate`. In theory this should make it harder in the future to omit these necessary projections. Additionally, the execution engine was unable to handle extraneous columns that can be added as input to FK cascading updates. These extraneous columns would be incorrectly interpreted as synthesized partial index columns. This commit works around this issue by slicing the source values with an upper bound in `updateNode.processSourceRow`. The longer term fix is to not produce these columns (see issue #57097). Fixes #57085 Fixes #57084 Release justification: This is a critical bug fix to a new feature, partial indexes. Release note (bug fix): A bug has been fixed that caused errors or corrupted partial indexes of child tables in foreign key relationships with cascading `UPDATE`s and `DELETE`s. The corrupt partial indexes could result in incorrect query results. Any partial indexes on child tables of foreign key relationships with `ON DELETE CASCADE` or `ON UPDATE CASCADE` actions may be corrupt and should be dropped and re-created. This bug was introduce in version 20.2. 57323: authors: add Paul Kernfeld to authors r=kernfeld-cockroach a=kernfeld-cockroach Release note: None 57324: authors: add ricky to authors r=rickystewart a=rickystewart Release note: None Co-authored-by: Marcus Gartner <[email protected]> Co-authored-by: Paul Kernfeld <[email protected]> Co-authored-by: Ricky Stewart <[email protected]>
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Labels
A-partial-indexes
Relating to partial indexes.
A-sql-optimizer
SQL logical planning and optimizations.
C-bug
Code not up to spec/doc, specs & docs deemed correct. Solution expected to change code/behavior.
O-sentry
Originated from an in-the-wild panic report.
This issue was autofiled by Sentry. It represents a crash or reported error on a live cluster with telemetry enabled.
Sentry link: https://sentry.io/organizations/cockroach-labs/issues/2053283846/?referrer=webhooks_plugin
Panic message:
Stacktrace (expand for inline code snippets):
cockroach/pkg/sql/sem/tree/datum.go
Lines 390 to 392 in fe9afec
cockroach/pkg/sql/row/partial_index.go
Lines 69 to 71 in fe9afec
cockroach/pkg/sql/update.go
Lines 304 to 306 in fe9afec
cockroach/pkg/sql/update.go
Lines 173 to 175 in fe9afec
cockroach/pkg/sql/plan_batch.go
Lines 158 to 160 in fe9afec
cockroach/pkg/sql/plan.go
Lines 513 to 515 in fe9afec
cockroach/pkg/sql/walk.go
Lines 118 to 120 in fe9afec
cockroach/pkg/sql/walk.go
Lines 297 to 299 in fe9afec
cockroach/pkg/sql/walk.go
Lines 85 to 87 in fe9afec
cockroach/pkg/sql/walk.go
Lines 49 to 51 in fe9afec
cockroach/pkg/sql/plan.go
Lines 516 to 518 in fe9afec
cockroach/pkg/sql/plan_node_to_row_source.go
Lines 124 to 126 in fe9afec
cockroach/pkg/sql/execinfra/processorsbase.go
Lines 773 to 775 in fe9afec
cockroach/pkg/sql/flowinfra/flow.go
Lines 391 to 393 in fe9afec
cockroach/pkg/sql/distsql_running.go
Lines 421 to 423 in fe9afec
cockroach/pkg/sql/distsql_running.go
Lines 1181 to 1183 in fe9afec
cockroach/pkg/sql/distsql_running.go
Lines 1086 to 1088 in fe9afec
cockroach/pkg/sql/conn_executor_exec.go
Lines 1010 to 1012 in fe9afec
cockroach/pkg/sql/conn_executor_exec.go
Lines 871 to 873 in fe9afec
cockroach/pkg/sql/conn_executor_exec.go
Lines 638 to 640 in fe9afec
cockroach/pkg/sql/conn_executor_exec.go
Lines 113 to 115 in fe9afec
cockroach/pkg/sql/conn_executor.go
Lines 1464 to 1466 in fe9afec
cockroach/pkg/sql/conn_executor.go
Lines 1466 to 1468 in fe9afec
cockroach/pkg/sql/conn_executor.go
Lines 1390 to 1392 in fe9afec
cockroach/pkg/sql/conn_executor.go
Lines 507 to 509 in fe9afec
cockroach/pkg/sql/pgwire/conn.go
Lines 625 to 627 in fe9afec
/usr/local/go/src/runtime/asm_amd64.s#L1356-L1358 in runtime.goexit
v20.2.1
The text was updated successfully, but these errors were encountered: