[#10193] test(optimizer): add optimizer integration tests#10191
[#10193] test(optimizer): add optimizer integration tests#10191FANNG1 wants to merge 4 commits intoapache:mainfrom
Conversation
Copy optimizer integration tests from recommender and adapt to add-it APIs/configuration changes. Handle branch difference by creating test tables through lakehouse-iceberg catalog instead of registering format=iceberg on generic catalog. Add required test dependencies and service registrations for dummy statistics calculators.
Remove reflection-based field/method access from optimizer tests by adding package-private test hooks. Stabilize RecommenderIT with session-isolated recording submitter and unbounded limit for recommendation capture.
Code Coverage Report
Files
|
There was a problem hiding this comment.
Pull request overview
This PR ports and adapts optimizer integration tests into the maintenance/optimizer module, replaces reflection-based test injection with package-private test hooks, and wires up additional test-only SPI providers/calculators via META-INF/services.
Changes:
- Added multiple optimizer integration tests (recommender/monitor/updater/providers) with a shared
GravitinoOptimizerEnvITenvironment. - Removed reflection-based field injection from updater unit tests by adding package-private test hooks in
GravitinoMetricsUpdaterandGravitinoStatisticsUpdater. - Registered additional test implementations via
META-INF/servicesand updated optimizer test dependencies.
Reviewed changes
Copilot reviewed 18 out of 18 changed files in this pull request and generated 10 comments.
Show a summary per file
| File | Description |
|---|---|
| maintenance/optimizer/src/test/resources/META-INF/services/org.apache.gravitino.maintenance.optimizer.api.updater.StatisticsCalculator | Registers dummy statistics/metrics calculators for integration tests. |
| maintenance/optimizer/src/test/resources/META-INF/services/org.apache.gravitino.maintenance.optimizer.api.common.Provider | Registers the recording JobSubmitter test provider. |
| maintenance/optimizer/src/test/java/org/apache/gravitino/maintenance/optimizer/updater/statistics/TestGravitinoStatisticsUpdater.java | Switches from reflection to test hook for injecting GravitinoClient. |
| maintenance/optimizer/src/test/java/org/apache/gravitino/maintenance/optimizer/updater/metrics/TestGravitinoMetricsUpdater.java | Switches from reflection to test hooks for injecting/accessing MetricsRepository. |
| maintenance/optimizer/src/test/java/org/apache/gravitino/maintenance/optimizer/integration/test/GravitinoOptimizerEnvIT.java | New shared IT base that boots Gravitino server + Iceberg catalog + optimizer env. |
| maintenance/optimizer/src/test/java/org/apache/gravitino/maintenance/optimizer/integration/test/RecommenderIT.java | New recommender IT using public APIs and a recording JobSubmitter. |
| maintenance/optimizer/src/test/java/org/apache/gravitino/maintenance/optimizer/integration/test/UpdaterIT.java | New updater IT validating table stats/metrics and job metrics flows end-to-end. |
| maintenance/optimizer/src/test/java/org/apache/gravitino/maintenance/optimizer/integration/test/MonitorIT.java | New monitor IT validating evaluator outputs and callbacks. |
| maintenance/optimizer/src/test/java/org/apache/gravitino/maintenance/optimizer/integration/test/GravitinoStatisticsIT.java | New IT verifying stats updater/provider behavior. |
| maintenance/optimizer/src/test/java/org/apache/gravitino/maintenance/optimizer/integration/test/GravitinoMetricsIT.java | New IT verifying metrics updater/provider behavior. |
| maintenance/optimizer/src/test/java/org/apache/gravitino/maintenance/optimizer/integration/test/GravitinoStrategyIT.java | New IT verifying strategy provider reads policies correctly. |
| maintenance/optimizer/src/test/java/org/apache/gravitino/maintenance/optimizer/integration/test/GravitinoTableMetaIT.java | New IT verifying table metadata provider behavior. |
| maintenance/optimizer/src/test/java/org/apache/gravitino/maintenance/optimizer/integration/test/RecordingJobSubmitterForIT.java | New session-isolated recording submitter used by recommender ITs. |
| maintenance/optimizer/src/test/java/org/apache/gravitino/maintenance/optimizer/integration/test/DummyTableStatisticsComputer.java | New dummy calculator for table stats + metrics. |
| maintenance/optimizer/src/test/java/org/apache/gravitino/maintenance/optimizer/integration/test/DummyJobMetricsComputer.java | New dummy calculator for job metrics. |
| maintenance/optimizer/src/main/java/org/apache/gravitino/maintenance/optimizer/updater/statistics/GravitinoStatisticsUpdater.java | Adds package-private test hook to inject GravitinoClient. |
| maintenance/optimizer/src/main/java/org/apache/gravitino/maintenance/optimizer/updater/metrics/GravitinoMetricsUpdater.java | Adds package-private test hooks to inject/access MetricsRepository. |
| maintenance/optimizer/build.gradle.kts | Adds test dependencies needed for new integration tests (BaseIT/server). |
.../java/org/apache/gravitino/maintenance/optimizer/integration/test/GravitinoStatisticsIT.java
Show resolved
Hide resolved
...t/java/org/apache/gravitino/maintenance/optimizer/integration/test/GravitinoTableMetaIT.java
Show resolved
Hide resolved
...ava/org/apache/gravitino/maintenance/optimizer/integration/test/GravitinoOptimizerEnvIT.java
Outdated
Show resolved
Hide resolved
...zer/src/test/java/org/apache/gravitino/maintenance/optimizer/integration/test/MonitorIT.java
Outdated
Show resolved
Hide resolved
...est/java/org/apache/gravitino/maintenance/optimizer/integration/test/GravitinoMetricsIT.java
Show resolved
Hide resolved
...zer/src/test/java/org/apache/gravitino/maintenance/optimizer/integration/test/UpdaterIT.java
Show resolved
Hide resolved
...src/test/java/org/apache/gravitino/maintenance/optimizer/integration/test/RecommenderIT.java
Show resolved
Hide resolved
...st/java/org/apache/gravitino/maintenance/optimizer/integration/test/GravitinoStrategyIT.java
Show resolved
Hide resolved
...zer/src/test/java/org/apache/gravitino/maintenance/optimizer/integration/test/MonitorIT.java
Show resolved
Hide resolved
...apache/gravitino/maintenance/optimizer/integration/test/AbstractGravitinoOptimizerEnvIT.java
Show resolved
Hide resolved
Add missing @afterall cleanup hooks in optimizer integration tests to close updater/provider resources initialized in @BeforeAll. Replace hard-coded /tmp H2 file URLs with isolated in-memory H2 JDBC URLs to avoid filesystem residue and cross-run interference.
...t/java/org/apache/gravitino/maintenance/optimizer/integration/test/GravitinoTableMetaIT.java
Outdated
Show resolved
Hide resolved
...java/org/apache/gravitino/maintenance/optimizer/updater/metrics/GravitinoMetricsUpdater.java
Show resolved
Hide resolved
...rg/apache/gravitino/maintenance/optimizer/updater/statistics/GravitinoStatisticsUpdater.java
Show resolved
Hide resolved
...rg/apache/gravitino/maintenance/optimizer/integration/test/DummyTableStatisticsComputer.java
Show resolved
Hide resolved
...ava/org/apache/gravitino/maintenance/optimizer/integration/test/DummyJobMetricsComputer.java
Outdated
Show resolved
Hide resolved
| IcebergConstants.WAREHOUSE, | ||
| "file:///tmp/gravitino-optimizer/")); | ||
| } | ||
| } |
There was a problem hiding this comment.
You called this class xxxIT, but I don't find any test in this class, is it on purpose?
There was a problem hiding this comment.
this class is used to setup enviroment , rename to AbstractGravitinoOptimizerEnvIT and make it abstract
|
|
||
| @Override | ||
| public void close() throws Exception {} | ||
| } |
There was a problem hiding this comment.
Also here, what do you test here?
There was a problem hiding this comment.
This class is used for testing, to record job submission context
| Assertions.assertTrue(diff >= 0 && diff <= 10000); | ||
| Assertions.assertEquals(1L, ((Number) jobMetric.value().value()).longValue()); | ||
| } | ||
| } |
There was a problem hiding this comment.
Can we have a IT that can try to simulate the completed workflow of table maintenance and verify each step?
There was a problem hiding this comment.
RecommenderIT covers the workflow from updating stats, attaching policy, recommend for table and submit job to RecordingJobSubmitterForTest
Annotate test hook methods in metrics/statistics updaters with @VisibleForTesting to clarify non-production usage. Rename the shared IT base to AbstractGravitinoOptimizerEnvIT and update inheriting integration tests. Rename dummy job metrics computer to calculator, adjust partition helper naming, and update related IT/service references.
What changes were proposed in this pull request?
them to the current APIs/configs.
(memory backend) instead of relying on legacy reflective/internal paths.
JobSubmitter (session-isolated) instead of reflection.
adding package-private test hooks in:
Why are the changes needed?
ITs is not compatible.
maintenance and stability issues.
makes tests safer for parallel runs.
Fix: #10193
Does this PR introduce any user-facing change?
How was this patch tested?
reflection removal.
'org.apache.gravitino.maintenance.optimizer.integration.test.Recommender
IT' -PskipIT=false -PskipDockerTests=false
'org.apache.gravitino.maintenance.optimizer.integration.test.*' (targete
d migrated IT classes)
'org.apache.gravitino.maintenance.optimizer.updater.statistics.TestGravi
tinoStatisticsUpdater' --tests
'org.apache.gravitino.maintenance.optimizer.updater.metrics.TestGravitin
oMetricsUpdater' -PskipIT=true -PskipDockerTests=false