Skip to content

[Task] Migrate the etcd registry and data-sync integration to shenyu-plugin-store #7597

Open

Description

@Aias00

Background

etcd support is an optional vertical integration spanning both data-sync and registry:

  • shenyu-admin-listener-etcd;
  • shenyu-sync-data-etcd;
  • shenyu-registry-etcd;
  • their Spring Boot starters (e.g. shenyu-spring-boot-starter-sync-data-etcd);
  • shenyu-infra-etcd (shared etcd client infrastructure);
  • shenyu-examples-* references and shenyu-e2e-case.

Currently etcd is a first-class provider in the compatibility registry starter, the admin distribution, and the README sync/registry tables. This issue proposes externalizing it per #7306 (vendor/middleware-specific adapter; loadable via external starter; dependency/release lifecycle should not enlarge the default distribution), while preserving current behavior through a documented compatibility contract and a rollback window. Because etcd touches both sync and registry, moving only one module would leave a split owner and an untestable configuration path; the entire etcd stack must move as one migration unit (same pattern as Consul #7308).

Note: since etcd is currently a first-class in-tree provider, this externalization requires community consensus before the main-repository removal step.

Tracked by #7306. Depends on #7294. Precedent: #7308 (Consul).

Scope

plugin-store

  • Add a supported top-level layout for admin listeners, data-sync adapters, registry/instance adapters, and starters.
  • Migrate all etcd modules with their current unit tests; preserve fixes present at cutover.
  • Add missing starter auto-configuration tests.
  • Add a Testcontainers-based integration/E2E environment using a real disposable etcd server, ShenYu admin, and ShenYu gateway.
  • Cover: initial plugin/selector/rule synchronization; create/update/delete propagation; watch interruption and reconnect/recovery; service instance register/update/deregister/discovery; multiple endpoints; orderly shutdown without leaked watcher/lease threads.
  • Document etcd version compatibility, key layout, supported client versions, licensing, and ShenYu compatibility.
  • Decide shenyu-infra-etcd ownership: move with the stack if etcd-specific, or retain in main if shared by other modules.

apache/shenyu

  • Remove the etcd admin-listener, sync-data, registry modules, starters, aggregator entries, default-bootstrap/admin distribution dependencies, and examples only after external parity.
  • Update dependency management, configuration metadata, examples, docs, CI matrices, LICENSE/NOTICE, and distribution packaging.
  • Reuse the [ISSUE #7311] Decouple registry core from implementations. #7578 SPI factory (ShenyuInstanceRegisterRepositoryFactory.loadRepository) so the etcd type key resolves to an external SPI implementation without hard-coded core coupling.
  • Preserve historical release notes and upgrade/configuration documentation, and the etcd sync/registry type names as compatibility contracts.
  • Provide migration and rollback guidance for existing etcd keyspaces and gateway/admin configuration.

Acceptance Criteria

  • Admin listener, data sync, registry/instance support, and starters are owned and built together in plugin-store.
  • Unit tests cover create/update/delete, watcher concurrency, reconnect, instance updates, and shutdown.
  • Starter auto-configuration has direct test coverage.
  • E2E proves admin-to-gateway synchronization and instance registration through a real etcd server.
  • Other sync and registry implementations remain green after main-repository removal.
  • Existing etcd key layout/configuration has documented compatibility and rollback steps.
  • A minimal admin/gateway deployment can enable etcd solely through external artifacts and configuration.
  • Artifact publication and main-repository removal are coordinated without duplicate coordinates.

Activity

  1. github-actions commented on Oct 13, 2026

    @github-actions
    Contributor

    👋 Hello @yuluo-yx

    A new issue has been opened by @Aias00:

    Please review when you have time. Thank you! 🙏

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions