This is an automated email from the ASF dual-hosted git repository.
mmerli pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/pulsar.git
The following commit(s) were added to refs/heads/master by this push:
new 86e9e64c31c [cleanup] PIP-462: Remove Etcd metadata store backend
(#25329)
86e9e64c31c is described below
commit 86e9e64c31cbc159cf08de8e4f94bb153962bcdc
Author: Matteo Merli <[email protected]>
AuthorDate: Sat Mar 21 09:16:04 2026 -0700
[cleanup] PIP-462: Remove Etcd metadata store backend (#25329)
---
pip/pip-462.md | 117 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 117 insertions(+)
diff --git a/pip/pip-462.md b/pip/pip-462.md
new file mode 100644
index 00000000000..439ff8adb4d
--- /dev/null
+++ b/pip/pip-462.md
@@ -0,0 +1,117 @@
+# PIP-462: Remove Etcd metadata store backend
+
+## Motivation
+
+Apache Pulsar supports multiple metadata store backends through the pluggable
`MetadataStore` interface introduced in PIP-45. One of these backends is Etcd,
implemented via the `jetcd` client library. While the Etcd backend has been
available since the metadata store abstraction was introduced, it has seen very
limited adoption in production environments.
+
+Maintaining Etcd support imposes several costs on the project:
+
+1. **Dependency burden**: The `jetcd-core` library pulls in a large transitive
dependency tree (gRPC, Netty, Vert.x, and others) that conflicts with
dependencies used elsewhere in Pulsar. This required creating a dedicated
shading module (`jetcd-core-shaded`) with relocations for `io.vertx` and
`io.netty` packages.
+
+2. **Distribution size**: The shaded jetcd JAR and its transitive dependencies
increase both the Pulsar tarball and Docker image size significantly, even for
users who never use Etcd.
+
+3. **Library maintenance concerns**: The `jetcd` library is not actively
maintained, making it increasingly risky to depend on for a production metadata
backend. Security patches and compatibility updates may lag behind.
+
+4. **Maintenance overhead**: The `EtcdMetadataStore` implementation,
`EtcdSessionWatcher`, and associated test infrastructure must be maintained,
tested, and considered in every metadata store interface change.
+
+5. **Strategic direction**: Both ZooKeeper and Oxia are fully supported and
battle-tested metadata store backends. Oxia is a purpose-built metadata store
designed for Pulsar with superior operational characteristics, and the
community's future efforts are focused there. Maintaining a third, unused
backend dilutes this focus.
+
+Given that Etcd is not used in production deployments, adds significant
distribution size, relies on a poorly maintained client library, and competes
for attention with the strategically preferred Oxia backend, removing it
simplifies the project and reduces the maintenance surface area.
+
+## Goals
+
+### In Scope
+
+- Remove the `EtcdMetadataStore` and `EtcdSessionWatcher` implementation
classes from `pulsar-metadata`
+- Remove the `EtcdMetadataStoreProvider` registration from
`MetadataStoreFactoryImpl`
+- Remove the `jetcd-core-shaded` shading module entirely
+- Remove `jetcd-core` and `jetcd-test` dependency declarations from the root
`pom.xml`
+- Remove Etcd-specific tests (`EtcdMetadataStoreTest`)
+- Remove or update any documentation references to Etcd as a supported backend
+- Provide a clear error message if a user configures an `etcd:` metadata store
URL, guiding them to use ZooKeeper or Oxia instead
+
+### Out of Scope
+
+- Changes to ZooKeeper or Oxia metadata store implementations
+- Changes to the `MetadataStore` interface or plugin system
+
+## High Level Design
+
+The removal is a straightforward deletion of code and dependencies:
+
+1. **Implementation removal**: Delete `EtcdMetadataStore.java` and
`EtcdSessionWatcher.java` from `pulsar-metadata`.
+
+2. **Provider deregistration**: Remove the Etcd provider from
`MetadataStoreFactoryImpl`. Add a check that produces a clear error message
when an `etcd:` URL is configured, informing operators that Etcd is no longer
supported and recommending ZooKeeper or Oxia.
+
+3. **Module removal**: Delete the `jetcd-core-shaded` module and remove it
from the root `pom.xml` modules list.
+
+4. **Dependency cleanup**: Remove `jetcd-core`, `jetcd-test`, and
`jetcd-core-shaded` dependency declarations from the root `pom.xml` dependency
management section. Remove these dependencies from `pulsar-metadata/pom.xml`.
+
+5. **Test removal**: Delete `EtcdMetadataStoreTest.java`.
+
+## Detailed Design
+
+### Implementation Classes
+
+The following source files will be deleted:
+-
`pulsar-metadata/src/main/java/org/apache/pulsar/metadata/impl/EtcdMetadataStore.java`
(includes inner `EtcdMetadataStoreProvider` class)
+-
`pulsar-metadata/src/main/java/org/apache/pulsar/metadata/impl/EtcdSessionWatcher.java`
+
+### Factory Update
+
+In `MetadataStoreFactoryImpl`, the Etcd provider registration will be removed
from `loadProviders()`. A runtime check will be added so that if a user
configures `metadataStoreUrl=etcd:...`, the broker fails fast with a clear
error:
+
+```
+Etcd metadata store backend has been removed in Pulsar 5.0.
+Please use ZooKeeper (zk:) or Oxia (oxia:) as your metadata store.
+See PIP-462 for details.
+```
+
+### Module Removal
+
+The `jetcd-core-shaded/` directory will be deleted entirely, and the
`<module>jetcd-core-shaded</module>` entry will be removed from the root
`pom.xml`.
+
+### Dependency Removal
+
+The following entries will be removed from the root `pom.xml`:
+
+From `<dependencyManagement>`:
+- `io.etcd:jetcd-core`
+- `io.etcd:jetcd-test`
+- `org.apache.pulsar:jetcd-core-shaded`
+
+From `pulsar-metadata/pom.xml`:
+- `org.apache.pulsar:jetcd-core-shaded` (compile dependency)
+- `io.etcd:jetcd-test` (test dependency)
+
+### Test Removal
+
+The following test file will be deleted:
+-
`pulsar-metadata/src/test/java/org/apache/pulsar/metadata/impl/EtcdMetadataStoreTest.java`
+
+## Public-facing Changes
+
+### Configuration
+
+The `metadataStoreUrl` and `configurationMetadataStoreUrl` configuration keys
will no longer accept `etcd:` URLs. Attempting to start a broker, proxy, or
other Pulsar component with an Etcd metadata URL will result in a clear error
message at startup.
+
+### Binary Protocol
+
+No changes.
+
+### CLI
+
+No changes. CLI tools that accept metadata store URLs (e.g., `pulsar
initialize-cluster-metadata`) will reject `etcd:` URLs with a descriptive error.
+
+### Metrics
+
+No changes.
+
+## General Notes
+
+The `MetadataStore` plugin system (PIP-45) remains fully intact. If there is
community interest in continuing Etcd support, it can be maintained as an
external plugin outside the core Pulsar repository, without any changes to the
Pulsar codebase.
+
+### Related PIPs
+
+- PIP-45: Pluggable metadata interface (introduced the MetadataStore
abstraction and Etcd backend)
+- PIP-454: Metadata Store Migration Framework (provides migration path for
users needing to switch backends)