ziyinweixiao opened a new pull request, #70567:
URL: https://github.com/apache/doris/pull/70567
### Background
Short-circuit point queries read projected values from row-store JSONB and
fetch missing columns from column storage. Normal visibility also needs a
delete-sign tuple slot even when SELECT does not project it.
### What problem does this PR solve?
Issue Number: None
Related PR: None
PR Type: Bugfix
Problem Summary:
With show_hidden_columns=true, a partial-row-store SELECT v can have no
delete-sign tuple slot. Adding the schema delete-sign UID unconditionally then
causes unordered_map::at to abort the BE during column-store fallback. Request
the delete-sign column only when its tuple slot exists, and retain fallback
reads when a cached row-store payload cannot supply all columns.
### Details
- **Frequency:** Reproduced on a partial row store with debug visibility and
a projected ordinary column.
- **Root cause:** The requested UID set included a delete-sign column absent
from the tuple UID map.
- **Why existing tests missed it:** Hidden-column tests select hidden
columns and bypass short circuit; they do not cover ordinary projections with
debug visibility on a partial row store.
- **Fix:** Derive the delete-sign index from the tuple and add its actual
slot to the requested set. Skip the payload-only cache fast path when
column-store reads are required.
- **Other paths and branches:** Both synchronous and read-ahead fallback use
the corrected UID set. Normal delete filtering is preserved. No wire, schema or
persisted-format changes.
### Testing
- Reproduced the original SIGABRT on unmodified adad294163.
- Official ASAN BE build passed.
- Official regression runner passed test_point_query_delete_sign_projection,
test_short_circuit_rowset_hidden_columns and
test_point_query_light_schema_change.
- The new regression passed with row cache disabled and enabled; the final
run also enabled query read-ahead and asynchronous file-cache writes.
- Four descriptor unit tests added; matching-toolchain syntax check passed.
The BE unit-test executable was not built or run.
- Official clang-format 16, build hygiene and changed-line clang-tidy passed.
### Release note
Fix BE crashes when short-circuit point queries read ordinary columns from
partial row-store tables with show_hidden_columns enabled. Mixed projections
continue to fetch columns that are not present in the cached row-store payload.
### Check List (For Author)
- Behavior changed: Yes (see Details).
- Does this need documentation: No.
- Pre-submission status: Partially verified: BE unit-test execution remains
for CI.
### AI Disclosure
- Tool: Codex, GPT-6.1 Sol.
- Generated: Code, tests and this description.
- Human review: Pending.
### Background
<!-- How the feature or module this PR touches works today, in two to four
plain sentences, for a reviewer who doesn't know it. Link the user doc if there
is one. Leave the problem and the fix to Problem Summary. -->
### What problem does this PR solve?
<!-- Issue Number: "close #N" if this PR resolves the issue, "#N" if it only
relates to it, "None" if there is none. A Feature needs an issue. -->
<!-- Related PR: "#N (relation)" for each PR a reviewer should know about,
such as "#123 (introduced the bug)", separated by commas. Write "None" if no
related PR is known. -->
<!-- PR Type: Bugfix, Performance, Feature, Enhancement, Refactor, Test,
Build/CI/Chore, Revert, Release/Dependency, or Other. -->
Issue Number:
Related PR:
PR Type:
Problem Summary:
<!-- Two to five sentences: the problem or need and who is affected; the
approach in one sentence; when the diff is larger than that suggests, what else
it had to handle, or that most of it is tests; and what existing users see
after an upgrade. -->
### Details
<!--
For a diff of more than about 300 changed lines, start with "- **Change
map:**": how many lines are production code, tests, generated files, and docs,
then the code in parts, each with the problem it handles and its size.
Then answer each field of your PR type on its own line, as "- **Field:**
answer", in this order:
Bugfix: Frequency, Root cause, Why existing tests missed it, Fix, Other
paths and branches
Performance: Why it was slow, Optimization, Results, Applicability and cost
Feature: Scope, Design, Usage, Default behavior, Compatibility
Enhancement: Before and after, Configs and defaults, Impact on existing
users
Refactor: Moves vs. logic changes, Behavior change, Compatibility,
Performance impact, Rollback
Test, adding tests: Scenarios, What existing tests miss, Fails when broken
Test, fixing a test: Failure, Cause, Stability evidence
Build/CI/Chore: Affected, Developer and release impact, License and
third-party, Rollback
Revert: Why not fix forward, Original author notified, Follow-up
Release/Dependency: Versions, Upstream changes, Compatibility, Rollback
Other: Why Other
"None" is a valid answer when it is true. Don't restate the diff.
-->
### Testing
<!-- The tests, suites, or commands that ran, what each shows, and where it
ran (locally or in CI). For a fix, the test that fails before it and passes
after. -->
### Notes for Reviewers
<!-- Optional; delete this section if there is nothing to say. Why each
non-obvious edit was made, what you are unsure about, and where to start
reading if Details has no Change map. -->
### Release note
<!-- One paragraph on what users will notice, or None. -->
### Check List (For Author)
<!-- Behavior changed: "No", or "Yes (see Details)" with a Behavior change
field in Details. -->
<!-- Does this need documentation: "No", or "Yes" with the
apache/doris-website PR or the plan. -->
<!-- Pre-submission status: "Ready"; "Partially verified: " and what is not
verified; or "Not ready: " and why, for a Draft PR. -->
- Behavior changed:
- Does this need documentation:
- Pre-submission status:
### AI Disclosure
<!-- Tool: the agent and model, or None. Generated: the parts it wrote
(code, tests, this description), or None. Human review: what you reviewed of
the generated parts, or "Not applicable" without AI tools. You may add "-
Prompts:" to summarize how you directed the agent. -->
- Tool:
- Generated:
- Human review:
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]