[
https://issues.apache.org/jira/browse/PHOENIX-7879?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Andrew Kyle Purtell updated PHOENIX-7879:
-----------------------------------------
Description:
Add a backward compatibility test harness that freezes Phoenix's EXPLAIN output
and makes any future change to the grammar an explicit, reviewable act.
{{ExplainPlanAttributes}} gains a {{@JsonPropertyOrder}} annotation, and
{{RegionLocationsListSerializer}} and {{ServerMergeColumnsSerializer}} handle
the two attributes that aren't cleanly serializable.
New test package {{org.apache.phoenix.query.explain package}} implements the
EXPLAIN compatibility checks. {{ExplainOracle}} compiles each query against a
connectionless Phoenix driver and compares both the textual and JSON
representations of the plan against an expected baseline, producing
line-by-line and JSON-pointer diffs on mismatch. Normalizers strip
environment-specific noise before comparison. {{ExplainTextNormalizer}}
collapses parallelism/chunk counts to <N>, removes row/byte stats and
region-location lines, and {{ExplainJsonNormalizer}} nulls out region
locations, lookup counts, split chunks, and row/size estimates and recurses
into nested join plans.
{{ExplainChangeRule}} supports future PRs that intentionally change the
grammar. New rules can be appended that transform the frozen baseline into its
new expected shape. Every change is intentional and reviewable. The diff in the
rule itself documents exactly what changed. The golden text in
{{ExplainOracleTest}} should be periodically regenerated with
ExplainChangeRules dropped.
was:
Add a backward compatibility test harness that freezes Phoenix's EXPLAIN output
and makes any future change to the grammar an explicit, reviewable act.
{{ExplainPlanAttributes}} gains a {{@JsonPropertyOrder}} annotation, and
{{RegionLocationsListSerializer}} and {{ServerMergeColumnsSerializer}} handle
the two attributes that aren't cleanly serializable.
New test package {{org.apache.phoenix.query.explain package}} implements the
EXPLAIN compatibility checks. {{ExplainOracle}} compiles each query against a
connectionless Phoenix driver and compares both the textual and JSON
representations of the plan against an expected baseline, producing
line-by-line and JSON-pointer diffs on mismatch. Normalizers strip
environment-specific noise before comparison. {{ExplainTextNormalizer}}
collapses parallelism/chunk counts to <N>, removes row/byte stats and
region-location lines, and {{ExplainJsonNormalizer}} nulls out region
locations, lookup counts, split chunks, and row/size estimates and recurses
into nested join plans.
{{ExplainChangeRule}}s support future PRs that intentionally change the
grammar. New rules can be appended that transform the frozen baseline into its
new expected shape. Every change is intentional and reviewable. The diff in the
rule itself documents exactly what changed. The golden text in
{{ExplainOracleTest}} should be periodically regenerated with
ExplainChangeRules dropped.
> Tests for EXPLAIN text and ExplainPlanAttributes serialization compatibility
> ----------------------------------------------------------------------------
>
> Key: PHOENIX-7879
> URL: https://issues.apache.org/jira/browse/PHOENIX-7879
> Project: Phoenix
> Issue Type: Sub-task
> Reporter: Andrew Kyle Purtell
> Assignee: Andrew Kyle Purtell
> Priority: Major
>
> Add a backward compatibility test harness that freezes Phoenix's EXPLAIN
> output and makes any future change to the grammar an explicit, reviewable act.
> {{ExplainPlanAttributes}} gains a {{@JsonPropertyOrder}} annotation, and
> {{RegionLocationsListSerializer}} and {{ServerMergeColumnsSerializer}} handle
> the two attributes that aren't cleanly serializable.
> New test package {{org.apache.phoenix.query.explain package}} implements the
> EXPLAIN compatibility checks. {{ExplainOracle}} compiles each query against a
> connectionless Phoenix driver and compares both the textual and JSON
> representations of the plan against an expected baseline, producing
> line-by-line and JSON-pointer diffs on mismatch. Normalizers strip
> environment-specific noise before comparison. {{ExplainTextNormalizer}}
> collapses parallelism/chunk counts to <N>, removes row/byte stats and
> region-location lines, and {{ExplainJsonNormalizer}} nulls out region
> locations, lookup counts, split chunks, and row/size estimates and recurses
> into nested join plans.
> {{ExplainChangeRule}} supports future PRs that intentionally change the
> grammar. New rules can be appended that transform the frozen baseline into
> its new expected shape. Every change is intentional and reviewable. The diff
> in the rule itself documents exactly what changed. The golden text in
> {{ExplainOracleTest}} should be periodically regenerated with
> ExplainChangeRules dropped.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)