Skip to content

[ISSUE #7599] Externalize Apollo after the deprecation release - #7628

Draft
yangjj-iso wants to merge 13 commits into
apache:masterfrom
yangjj-iso:feat/7599-externalize-apollo
Draft

yangjj-iso wants to merge 13 commits into
apache:masterfrom
yangjj-iso:feat/7599-externalize-apollo

Conversation

@yangjj-iso

@yangjj-iso yangjj-iso commented Oct 14, 2026 •

Copy link
Copy Markdown
Contributor

Prepare the later Apollo main-repository removal for #7599, after the staged deprecation in #7627. Receiving extension: apache/shenyu-plugin-store#28. Remove the four Apollo runtime/starter modules, their aggregator entries and core-managed Apollo SDK dependencies. Update README/registry docs to point to the external extension, retire Apollo example configuration (preserved in the receiving repo), update the registry CI provider list, and transfer Apollo client licensing to the extension. No active main reactor module or POM dependency references Apollo's SDK after this change. Retain ApolloPathConstants unchanged in shenyu-common as a small compatibility shim. Preserve historical release notes, enum/type keys, keyspaces and configuration semantics. The existing registry SPI factory is unchanged; the receiving tests prove it resolves the external apollo provider. Documentation covers exact install/enable settings, the preceding-release deprecation requirement, one-owner publication, later cutover and rollback. Validation: - Affected 166-module reactor clean package -DskipTests -Dmaven.javadoc.skip=true -Djacoco.skip=true -DskipRemoteResources=true passed, including test compilation, Checkstyle and RAT. - 29 targeted tests passed across registry factory, compatibility starter, Admin discovery and HTTP/WebSocket/ZooKeeper/Nacos synchronization. Seven Python dependency-boundary tests passed. - Receiving Apollo reactor passed 30 tests with zero failures/errors/skips; all four final JARs passed implementation/SPI/auto-configuration/core-API packaging checks. git diff --check passed. Do not merge this draft in the deprecation release. It is based on the advance-notice commit from #7627, but neither that commit nor its PR constitutes a released deprecation cycle. Before removal: link the dev-list decision, ship the notice while retaining Apollo for one core release, merge and verify the receiving extension, announce/publish compatible artifacts without duplicate Maven coordinates, validate the staging deployment and announce a rollback window. No release, upstream merge or artifact publication has been performed. #7599 remains open until those release gates are satisfied. Current branch validation: synchronized with master; Admin and Bootstrap package successfully, all 8 registry factory/SPI tests pass, and all 7 Python dependency-boundary tests pass. The removal remains a draft until the announced deprecation release/cycle, external artifact publication and rollback-window gates are complete. The shared E2E WaitForHelperTest uses an ephemeral local HTTP server, including a latch-controlled delayed response, instead of the public Postman Echo service. Both success and timeout tests pass without external HTTP access; production wait/retry behavior is unchanged. ### Shared E2E CI regression repairs The full E2E matrix exposed failures in shared test infrastructure: - Storage and cluster routing scenarios use a healthchecked local HTTP upstream on the Compose network. The existing URI/method and empty-body assertions exercise the gateway without depending on public httpbin availability. - RocketMQ uses an explicitly assigned lite-pull consumer with a unique group and request identifier. Wait for topic publication, seek each queue to its beginning, then require the matching access log. Unrelated logs cannot pass the check; non-transient broker errors fail immediately. The proxied request must return HTTP 200. - Spring Cloud waits for the discovered route to return the order produced by the actual example controller, including its response-name prefix. This covers the delay between selector/rule sync and Eureka's first upstream refresh. Remove an obsolete update using a hardcoded namespace-plugin ID. Local validation: four HTTP fixture tests (including all six consuming Compose files), seven focused Java tests, Checkstyle and Apache RAT on the affected E2E reactor, and the storage Compose runner checks pass. Regression coverage includes delayed topic publication, rejection of unrelated access logs and broker permission errors, and a route that initially has no usable upstream. Docker daemon execution was unavailable locally; GitHub Actions provides container validation. The four-database storage matrix passed on every branch in the preceding CI run; the latest follow-up reruns the complete matrix.

Validation after the October 19 synchronization

Local Java validation used Temurin 21.0.10 through the repository Maven wrapper.

Validation after the October 21 synchronization

Merge current master 87c22dde7 and resolve the overlapping Unreleased notes by retaining both the gated Apollo cutover text and every new upstream behavior/migration note. The removal remains a draft; no deprecation-release, consensus or publication gate is waived.

All 18 selected registry factory/SPI/compatibility-starter tests pass on Microsoft OpenJDK 17.0.18, as do all seven dependency-boundary script tests. Affected-reactor Checkstyle, Apache RAT and git diff --check pass. No release or artifact publication was performed.

Shared CI fixture corrections: CryptorResponsePluginTest now checks the post-#7903 configuration error for both encrypt/decrypt when a field is absent, including absence of the original user data. SDK tests wait up to 60 seconds for usable registered routes before exercising assertions. ZooKeeper registration tests keep their declared backend ports reachable so the real health checker cannot race registry-removal assertions. Validation: 16 cryptor unit cases and 16 Admin discovery/health cases pass; the HTTP and SDK integration test reactors compile with Checkstyle. Full Docker integration execution is not claimed: the local Linux Docker engine is unavailable. Remote check results are tracked separately.

@Aias00 Aias00 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review: COMMENT (draft — not approving)

Solid, complete in-tree externalization of the four Apollo modules, consistent with #7599 and the master tracking issue #7306.

What looks correct:

  • All five apollo artifacts are removed: shenyu-admin-listener-apollo, shenyu-sync-data-apollo, shenyu-registry-apollo, shenyu-spring-boot-starter-sync-data-apollo — plus their parent <module> entries, imports, and application.yml references.
  • LICENSE/NOTICE (admin + bootstrap dist) drop the apollo-client / apollo-openapi / apollo-core entries, and ApolloPathConstants is correctly kept in core as a compatibility shim with no Apollo SDK dependency.
  • .github/scripts/check-registry-dependencies.py removes apollo from both PROVIDERS and COMPATIBILITY_PROVIDERS.
  • CI is green: Analyze (java), build, and all integrated-test jobs pass.

Blocking-for-merge concern (not for the draft itself):

  • Per the migration contract this PR ships in docs/plugin-store-apollo.md, Apollo must remain available for the deprecation release, and removal requires dev-list consensus, a released deprecation cycle, external artifact publication, and an announced rollback window — with no removal release scheduled. The PR is correctly marked draft and the doc explicitly says the removal PR "must not be merged in that deprecation release." Please keep that gate: do not merge until #7627 (the deprecation notice) has actually shipped in a core release and the deprecation cycle is complete. Merging this ahead of that would contradict the contract the project is publishing.

Minor (non-blocking):

  • The doc's "store 2.7.1-SNAPSHOT against core 2.7.2-SNAPSHOT" are development coordinates; make sure the final published version replaces them with a real compatibility matrix.

Leaving as a comment because it is a draft; the mechanics are sound.

@yangjj-iso

Copy link
Copy Markdown
Contributor Author

CI update for head d2e5f8daf: dependency downloads are still blocking checks after CI was re-triggered:

  • ci / registry_dependencies: Maven Central returned 502 Bad Gateway for org.codehaus.plexus:plexus-classworlds:2.5.2, a dependency of the os-maven-plugin build extension. Maven could not read the project, so this step did not reach its tests.
  • Combination integration build: the Docker Maven plugin could not resolve the artifact descriptor for com.google.guava:guava:30.1-android.

Could a maintainer with workflow rerun permissions please rerun the failed jobs once dependency downloads are healthy? GitHub rejects reruns from my contributor account with Must have admin rights to Repository. Thank you.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants