morningman opened a new pull request, #70163:
URL: https://github.com/apache/doris/pull/70163

   ### What problem does this PR solve?
   
   Issue Number: None
   
   Related PR: #68206, #68636, #68368
   
   Problem Summary:
   
   **In short.** Three branch-4.2 backports of master fixes each added a test: 
#68206 (of #61342), #68636 (of #57006) and #68368 (of #66354). Master has the 
three fixes but none of the tests. This PR ports them. Two guard a fix that has 
no test on master; the third keeps the ClickBench `query1` shape case from 
failing whenever the exact row count of `hits` is cached. The PR changes tests 
only.
   
   **Background, and what each test covers.**
   
   - *Old primary key metadata (#61342, #68206).* A `PrimaryKeyConstraint` 
written before its foreign table collections existed has no `ft`, `ftn` or 
`ftni` in its JSON. Gson builds the object without its field initializers, so 
these stay null unless `gsonPostProcess` fills them in, and an FE that replays 
the journal from the start (without an image, or with 
`metadata_failure_recovery`) failed with a NullPointerException. #61342 added 
the null checks without a test; #68206 added one on branch-4.2 for `ft`, the 
only collection there. The new `PrimaryKeyConstraintTest` removes all three 
from a serialized constraint, loads it, and adds, renames and removes a foreign 
table on it.
   - *Shadow index columns (#57006, #68636).* During a schema change the new 
schema names a changed column `__doris_shadow_<name>`. 
`Index.getColumnUniqueIds` compares the index's column names with the schema's 
after `Column.removeNamePrefix`, so the new tablet metadata keeps the index 
column's unique id. #57006 has no test; #68636 added one to `IndexTest`, ported 
here to JUnit 5.
   - *ClickBench query1 shape (#66354, #68368).* 
`shape_check/clickbench/query1` checks the plan of `SELECT COUNT(*) FROM hits`. 
Once `SimpleAggCacheMgr` has cached the exact row count of `hits`, 
`REWRITE_SIMPLE_AGG_TO_CONSTANT` turns the count into a constant and the shape 
into `PhysicalOneRowRelation`, so the case fails whenever that cache is warm 
when it runs. It did on P0 for #69830 (build 1087320: expected 
`--hashAgg[GLOBAL]`, real `--PhysicalOneRowRelation`), a PR that does not touch 
the planner. On branch-4.2, #68368 disables the rule in this case together with 
the cost model change it backports, which master has from #66354. This PR 
disables it the same way; the expected output does not change.
   
   **Results.**
   
   | Change | Test | Result |
   |---|---|---|
   | none | `PrimaryKeyConstraintTest` (new), `IndexTest` (one new case), 
`ConstraintManagerTest`, `ConstraintPersistTest` | pass |
   | `gsonPostProcess` without its null checks | `PrimaryKeyConstraintTest` | 
fails: NullPointerException while loading |
   | `getColumnUniqueIds` without `removeNamePrefix` | 
`IndexTest#testGetColumnUniqueIdsForShadowColumn` | fails: `expected [107] but 
was []` |
   | `query1` as on master, row count of `hits` cached (local cluster) | 
`shape_check/clickbench/query1` | fails: `PhysicalOneRowRelation` |
   | `query1` with this PR, same cache | `shape_check/clickbench/query1` | 
passes |
   
   On the local cluster, `explain shape plan SELECT COUNT(*) FROM hits` gives 
`hashAgg[GLOBAL]` the first time and `PhysicalOneRowRelation` three seconds 
later, once the asynchronous row count load has finished; with the rule 
disabled it stays `hashAgg[GLOBAL]`.
   
   Original authors: @englefly (#68206), @airborne12 (#68636), @feiniaofeiafei 
(#68368)
   
   ### Release note
   
   None
   
   ### Check List (For Author)
   
   - Test <!-- At least one of them must be included. -->
       - [x] Regression test
       - [x] Unit Test
       - [ ] Manual test (add detailed scripts or steps below)
       - [ ] No need to test or manual test. Explain why:
           - [ ] This is a refactor/code format and no logic has been changed.
           - [ ] Previous test can cover this change.
           - [ ] No code files have been changed.
           - [ ] Other reason <!-- Add your reason?  -->
   
       `PrimaryKeyConstraintTest` (new), `IndexTest` (3 cases, 1 new), 
`ConstraintManagerTest` and `ConstraintPersistTest` pass, and fe-core 
Checkstyle reports nothing. The mutations in the table above were run against 
them. `shape_check/clickbench/query1` was run on a local cluster before and 
after this change, as in the table. This PR changes no production code.
   
   - Behavior changed:
       - [x] No.
       - [ ] Yes. <!-- Explain the behavior change -->
   
   - Does this need documentation?
       - [x] No.
       - [ ] Yes. <!-- Add document PR link here. eg: 
https://github.com/apache/doris-website/pull/1214 -->
   
   ### Check List (For Reviewer who merge this PR)
   
   - [ ] Confirm the release note
   - [ ] Confirm test cases
   - [ ] Confirm document
   - [ ] Add branch pick label <!-- Add branch pick label that this PR should 
merge into -->
   


-- 
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]

Reply via email to