chihyu0917 opened a new pull request, #16721:
URL: https://github.com/apache/iotdb/pull/16721
## Description
Updates `DistributionPlannerCycleTest#timeJoinNodeTest` so the assertions
adapt to legitimate execution plans where the query planner decides no remote
fragments are required. The test now inspects the node tree structurally,
rather than by hard-coding child-list lengths, to stay valid on both
single-node and multi-node layouts.
### Motivation
When all relevant data-regions for root.sg.d1 and root.sg.d2 happen to be
located on the same DataNode, the planner quite correctly omits any
cross-region ExchangeNodes for the second fragment.
The previous test expected a fixed fan-out (three children with one
ExchangeNode) and therefore failed on clusters with that “all-local” layout or
under NonDex permutation. The failure was in the test logic, not in the planner.
### Design & Implementation
- Helper:
`private static long countDirectChildrenOfType(PlanNode node, Class<?>
clazz)`
counts only the immediate children of a given type, making the checks
clearer.
- First fragment (d1 region):
Must still contain exactly one ExchangeNode (remote merge for d2).
Must contain at least two SeriesScanNodes.
- Second fragment (d2 region):
Must contain zero ExchangeNodes – the all-local case is now valid.
The number of direct SeriesScanNodes is verified to be between 2 and 3
(inclusive).
- The previous positional child-array assertions are removed; the remaining
expectations about SeriesScanNode counts and fragment instance count
(assertEquals(2, plan.getInstances().size())) are unchanged.
No production code is affected; only the unit test is updated.
### Reproduce the error
- Error:
`org.apache.iotdb.db.queryengine.plan.planner.distribution.DistributionPlannerCycleTest.timeJoinNodeTest
-- Time elapsed: 1.485 s <<< FAILURE!
java.lang.AssertionError: expected:<3> but was:<4>`
- Verifying: `mvn -pl iotdb-core/datanode
edu.illinois:nondex-maven-plugin:2.1.7:nondex
-Dtest=org.apache.iotdb.db.queryengine.plan.planner.distribution.DistributionPlannerCycleTest#timeJoinNodeTest
-DnondexRuns=10`
<!--
In each section, please describe design decisions made, including:
- Choice of algorithms
- Behavioral aspects. What configuration values are acceptable? How are
corner cases and error
conditions handled, such as when there are insufficient resources?
- Class organization and design (how the logic is split between classes,
inheritance, composition,
design patterns)
- Method organization and design (how the logic is split between methods,
parameters and return types)
- Naming (class, method, API, configuration, HTTP endpoint, names of
emitted metrics)
-->
<!-- It's good to describe an alternative design (or mention an alternative
name) for every design
(or naming) decision point and compare the alternatives with the designs
that you've implemented
(or the names you've chosen) to highlight the advantages of the chosen
designs and names. -->
<!-- If there was a discussion of the design of the feature implemented in
this PR elsewhere
(e. g. a "Proposal" issue, any other issue, or a thread in the development
mailing list),
link to that discussion from this PR description and explain what have
changed in your final design
compared to your original proposal or the consensus version in the end of
the discussion.
If something hasn't changed since the original discussion, you can omit a
detailed discussion of
those aspects of the design here, perhaps apart from brief mentioning for
the sake of readability
of this PR description. -->
<!-- Some of the aspects mentioned above may be omitted for simple and small
changes. -->
<hr>
This PR has:
- [ ] been self-reviewed.
- [ ] concurrent read
- [ ] concurrent write
- [ ] concurrent read and write
- [ ] added documentation for new or modified features or behaviors.
- [ ] added Javadocs for most classes and all non-trivial methods.
- [ ] added or updated version, __license__, or notice information
- [ ] added comments explaining the "why" and the intent of the code
wherever would not be obvious
for an unfamiliar reader.
- [ ] added unit tests or modified existing tests to cover new code paths,
ensuring the threshold
for code coverage.
- [ ] added integration tests.
- [ ] been tested in a test IoTDB cluster.
<!-- Check the items by putting "x" in the brackets for the done things. Not
all of these items
apply to every PR. Remove the items which are not done or not relevant to
the PR. None of the items
from the checklist above are strictly necessary, but it would be very
helpful if you at least
self-review the PR. -->
<hr>
##### Key changed/added classes (or packages if there are too many classes)
in this PR
--
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]