SIGN IN SIGN UP

Allowlist the expected 04510 mutation error in the upgrade check

`04510_mutation_query_plan_only_virtual_columns` asserts that
`ALTER TABLE ... DELETE WHERE _table != ''` fails: `_table` comes from the local
storage id, which a mutation cannot materialize, so the per-part read reaches
`getFieldForConstVirtualColumn` and throws `NO_SUCH_COLUMN_IN_TABLE`. The throw
happens in a background `MutatePlainMergeTreeTask`, so the client receives only
the asserted `UNFINISHED` and the functional test passes, while `Code: 16` is
written to the server log at `<Error>` level.

The upgrade job replays it. `upgrade_runner.sh` runs the previous release's test
tree, and `--upgrade-check` implies `--fake-drop`, so the table and its failed
mutation survive the test's own `DROP`. The new server loads the pending
mutation and retries it, 84 times inside the 60 second observation window, three
`<Error>` lines each. All 252 lines reach `upgrade_error_messages.txt` and fail
the job on a by-design test error. This is the `FIXME #39174` class the
surrounding comment block already documents.

The entry names the column and the `MergeTreeSequentialSource` read path rather
than the emitting component, for two reasons. The error leaks in three shapes
(`MutatePlainMergeTreeTask:`, the `executeStep()` line, and the wrapping
`MergeTreeBackgroundExecutor:` line, 84 each), which only the shared message
substring covers in one entry; and both qualifiers carry signal. Dropping the
column name would also mask `Unexpected const virtual column: _sample_factor`,
which from a mutation is #78465, the bug 04510 exists to guard. Dropping the
read-path phrase would mask a regression on the query read path, which fills
`_table` today. `_database` is left unmasked deliberately: no test mutates on
it, so a first occurrence should be reviewed rather than pre-suppressed.

Validated by replaying the failing run's 140435-line pre-filter log through the
scan pipeline. The unmodified filter reproduces the job's own
`upgrade_error_messages.txt` byte for byte (252 lines); with the entry no line
survives and the job reports `No Error messages after server upgrade`. Exactly
those 252 lines are removed. Twelve control lines, built from the real ones by
substituting a single field, all still surface: `_sample_factor`, `_database`, a
`LOGICAL_ERROR` from the same task, and the query-path variant.
G
Groene AI committed
16058d92c542de9ae7214ea00268898a859813c4
Parent: bb113c3