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 0ec3883ed14 [cleanup] PIP-462: Remove Etcd metadata store backend
(#25380)
0ec3883ed14 is described below
commit 0ec3883ed1425527ce28ac63e6969c99b6a97f17
Author: Matteo Merli <[email protected]>
AuthorDate: Tue Mar 24 13:57:38 2026 -0700
[cleanup] PIP-462: Remove Etcd metadata store backend (#25380)
---
conf/bookkeeper.conf | 1 -
distribution/server/pom.xml | 6 -
distribution/server/src/assemble/LICENSE.bin.txt | 2 -
jetcd-core-shaded/pom.xml | 181 --------
pom.xml | 55 +--
pulsar-broker/pom.xml | 17 -
pulsar-metadata/pom.xml | 16 -
.../pulsar/metadata/impl/EtcdMetadataStore.java | 512 ---------------------
.../pulsar/metadata/impl/EtcdSessionWatcher.java | 161 -------
.../metadata/impl/MetadataStoreFactoryImpl.java | 8 +-
.../pulsar/metadata/BaseMetadataStoreTest.java | 27 +-
.../metadata/impl/EtcdMetadataStoreTest.java | 130 ------
.../impl/MetadataStoreFactoryImplTest.java | 1 -
pulsar-metadata/src/test/resources/ssl/.gitignore | 1 -
pulsar-metadata/src/test/resources/ssl/README.md | 28 --
.../src/test/resources/ssl/cert/ca-config.json | 1 -
.../src/test/resources/ssl/cert/ca-key.pem | 27 --
pulsar-metadata/src/test/resources/ssl/cert/ca.csr | 15 -
pulsar-metadata/src/test/resources/ssl/cert/ca.pem | 18 -
.../src/test/resources/ssl/cert/client-key-pk8.pem | 28 --
.../src/test/resources/ssl/cert/client-key.pem | 27 --
.../src/test/resources/ssl/cert/client.csr | 16 -
.../src/test/resources/ssl/cert/client.pem | 20 -
.../src/test/resources/ssl/cert/etcd0-key.pem | 27 --
.../src/test/resources/ssl/cert/etcd0.csr | 16 -
.../src/test/resources/ssl/cert/etcd0.pem | 20 -
.../src/test/resources/ssl/cert/etcd1-key.pem | 27 --
.../src/test/resources/ssl/cert/etcd1.csr | 16 -
.../src/test/resources/ssl/cert/etcd1.pem | 20 -
.../src/test/resources/ssl/cert/etcd2-key.pem | 27 --
.../src/test/resources/ssl/cert/etcd2.csr | 16 -
.../src/test/resources/ssl/cert/etcd2.pem | 20 -
.../src/test/resources/ssl/cert/server-key.pem | 27 --
.../src/test/resources/ssl/cert/server.csr | 16 -
.../src/test/resources/ssl/cert/server.pem | 20 -
.../ssl/generate-self-signed-certificates.sh | 70 ---
src/owasp-dependency-check-suppressions.xml | 16 -
37 files changed, 9 insertions(+), 1627 deletions(-)
diff --git a/conf/bookkeeper.conf b/conf/bookkeeper.conf
index a482a28cc75..fa63fd389c1 100644
--- a/conf/bookkeeper.conf
+++ b/conf/bookkeeper.conf
@@ -663,7 +663,6 @@ diskCheckInterval=10000
# Metadata service uri that bookkeeper uses for loading the corresponding
metadata driver and resolving its metadata service location
# Examples:
# - metadataServiceUri=zk+hierarchical://my-zk-1:2181/ledgers
-# - metadataServiceUri=etcd+hierarchical:http://my-etcd:2379
# - metadataServiceUri=metadata-store:zk:my-zk-1:2281/ledgers
# - metadataServiceUri=metadata-store:oxia://oxia-server:6648/bookkeeper
# If you use metadata-store configuration, you need to configure following
items in JVM option:
diff --git a/distribution/server/pom.xml b/distribution/server/pom.xml
index db5c11c6c47..1f3be39ff6d 100644
--- a/distribution/server/pom.xml
+++ b/distribution/server/pom.xml
@@ -45,12 +45,6 @@
<version>${project.version}</version>
</dependency>
- <dependency>
- <groupId>${project.groupId}</groupId>
- <artifactId>jetcd-core-shaded</artifactId>
- <version>${project.version}</version>
- </dependency>
-
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>pulsar-docs-tools</artifactId>
diff --git a/distribution/server/src/assemble/LICENSE.bin.txt
b/distribution/server/src/assemble/LICENSE.bin.txt
index 34852aeaaaf..2b25d693275 100644
--- a/distribution/server/src/assemble/LICENSE.bin.txt
+++ b/distribution/server/src/assemble/LICENSE.bin.txt
@@ -473,7 +473,6 @@ The Apache Software License, Version 2.0
- io.opencensus-opencensus-contrib-http-util-0.28.0.jar
* Jodah
- net.jodah-typetools-0.5.0.jar
- - dev.failsafe-failsafe-3.3.2.jar
* Byte Buddy
- net.bytebuddy-byte-buddy-1.17.7.jar
* zt-zip
@@ -523,7 +522,6 @@ The Apache Software License, Version 2.0
- com.google.http-client-google-http-client-1.41.0.jar
- com.google.auto.value-auto-value-annotations-1.11.0.jar
- com.google.re2j-re2j-1.8.jar
- * Jetcd - shaded
* IPAddress
- com.github.seancfoley-ipaddress-5.5.0.jar
* RxJava
diff --git a/jetcd-core-shaded/pom.xml b/jetcd-core-shaded/pom.xml
deleted file mode 100644
index 358a6940c34..00000000000
--- a/jetcd-core-shaded/pom.xml
+++ /dev/null
@@ -1,181 +0,0 @@
-<?xml version="1.0"?>
-<!--
-
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
-
--->
-<project
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd"
- xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
- <modelVersion>4.0.0</modelVersion>
- <parent>
- <groupId>org.apache.pulsar</groupId>
- <artifactId>pulsar</artifactId>
- <version>4.3.0-SNAPSHOT</version>
- </parent>
-
- <artifactId>jetcd-core-shaded</artifactId>
- <name>Apache Pulsar :: jetcd-core shaded</name>
-
- <dependencies>
- <dependency>
- <groupId>io.etcd</groupId>
- <artifactId>jetcd-core</artifactId>
- <exclusions>
- <exclusion>
- <groupId>io.grpc</groupId>
- <artifactId>grpc-netty</artifactId>
- </exclusion>
- <exclusion>
- <groupId>io.netty</groupId>
- <artifactId>*</artifactId>
- </exclusion>
- <exclusion>
- <groupId>javax.annotation</groupId>
- <artifactId>javax.annotation-api</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
- <dependency>
- <groupId>io.grpc</groupId>
- <artifactId>grpc-netty-shaded</artifactId>
- </dependency>
- <!-- add transient dependencies for jetcd libraries, this is necessary for
IntelliJ support -->
- <dependency>
- <groupId>dev.failsafe</groupId>
- <artifactId>failsafe</artifactId>
- </dependency>
- <dependency>
- <groupId>io.grpc</groupId>
- <artifactId>grpc-protobuf</artifactId>
- </dependency>
- <dependency>
- <groupId>io.grpc</groupId>
- <artifactId>grpc-stub</artifactId>
- </dependency>
- <dependency>
- <groupId>io.grpc</groupId>
- <artifactId>grpc-grpclb</artifactId>
- </dependency>
- <dependency>
- <groupId>io.grpc</groupId>
- <artifactId>grpc-util</artifactId>
- </dependency>
- </dependencies>
- <build>
- <finalName>${project.artifactId}-${project.version}</finalName>
- <plugins>
- <plugin>
- <groupId>org.codehaus.mojo</groupId>
- <artifactId>build-helper-maven-plugin</artifactId>
- <executions>
- <execution>
- <id>attach-shade-jar</id>
- <phase>package</phase>
- <goals>
- <goal>attach-artifact</goal>
- </goals>
- <configuration>
- <artifacts>
- <artifact>
-
<file>${project.build.directory}/${project.build.finalName}.jar</file>
- <type>jar</type>
- <classifier>shaded</classifier>
- </artifact>
- </artifacts>
- </configuration>
- </execution>
- </executions>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-shade-plugin</artifactId>
- <executions>
- <execution>
- <phase>package</phase>
- <goals>
- <goal>shade</goal>
- </goals>
- <configuration>
- <createDependencyReducedPom>true</createDependencyReducedPom>
-
<promoteTransitiveDependencies>true</promoteTransitiveDependencies>
- <minimizeJar>false</minimizeJar>
- <artifactSet>
- <includes>
- <include>io.etcd:*</include>
- <include>io.vertx:*</include>
- </includes>
- <excludes>
- <!-- This is required for execute shade multiple times
without clean -->
- <exclude>org.apache.pulsar:jetcd-core-shaded</exclude>
- </excludes>
- </artifactSet>
- <relocations>
- <!-- relocate vertx packages since they will be transformed to
use grpc-netty-shaded packages -->
- <relocation>
- <pattern>io.vertx</pattern>
-
<shadedPattern>org.apache.pulsar.jetcd.shaded.io.vertx</shadedPattern>
- </relocation>
- <!-- relocate multi-release packages -->
- <relocation>
- <pattern>META-INF/versions/(\d+)/io/vertx/</pattern>
-
<shadedPattern>META-INF/versions/$1/org/apache/pulsar/jetcd/shaded/io/vertx/</shadedPattern>
- <rawString>true</rawString>
- </relocation>
- <!-- relocate to use grpc-netty-shaded packages -->
- <relocation>
- <pattern>io.grpc.netty</pattern>
-
<shadedPattern>io.grpc.netty.shaded.io.grpc.netty</shadedPattern>
- </relocation>
- <!-- relocate to use grpc-netty-shaded packages -->
- <relocation>
- <pattern>io.netty</pattern>
- <shadedPattern>io.grpc.netty.shaded.io.netty</shadedPattern>
- </relocation>
- </relocations>
- <filters>
- <filter>
- <artifact>*:*</artifact>
- <excludes>
- <exclude>META-INF/*.SF</exclude>
- <exclude>META-INF/*.DSA</exclude>
- <exclude>META-INF/*.RSA</exclude>
-
<exclude>META-INF/maven/${project.groupId}/${project.artifactId}/pom.xml</exclude>
- </excludes>
- </filter>
- </filters>
- <transformers>
- <transformer
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
- <manifestEntries>
- <Multi-Release>true</Multi-Release>
- </manifestEntries>
- </transformer>
- <transformer
implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
- <transformer
implementation="org.apache.maven.plugins.shade.resource.PluginXmlResourceTransformer"/>
- <transformer
implementation="org.apache.maven.plugins.shade.resource.IncludeResourceTransformer">
-
<resource>META-INF/maven/${project.groupId}/${project.artifactId}/pom.xml</resource>
- <file>${project.basedir}/dependency-reduced-pom.xml</file>
- </transformer>
- </transformers>
- </configuration>
- </execution>
- </executions>
- </plugin>
- </plugins>
- </build>
-</project>
diff --git a/pom.xml b/pom.xml
index 96d66700598..47af5b627b2 100644
--- a/pom.xml
+++ b/pom.xml
@@ -297,7 +297,6 @@ flexible messaging model and an intuitive client
API.</description>
<spring.version>6.2.12</spring.version>
<apache-http-client.version>4.5.13</apache-http-client.version>
<apache-httpcomponents.version>4.4.15</apache-httpcomponents.version>
- <jetcd.version>0.7.7</jetcd.version>
<oxia.version>0.7.4</oxia.version>
<snakeyaml.version>2.0</snakeyaml.version>
<ant.version>1.10.12</ant.version>
@@ -1083,56 +1082,6 @@ flexible messaging model and an intuitive client
API.</description>
<version>${hppc.version}</version>
</dependency>
- <dependency>
- <groupId>io.etcd</groupId>
- <artifactId>jetcd-core</artifactId>
- <version>${jetcd.version}</version>
- <exclusions>
- <exclusion>
- <groupId>io.grpc</groupId>
- <artifactId>grpc-netty</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
- <dependency>
- <groupId>io.etcd</groupId>
- <artifactId>jetcd-test</artifactId>
- <version>${jetcd.version}</version>
- <exclusions>
- <exclusion>
- <groupId>io.grpc</groupId>
- <artifactId>grpc-netty</artifactId>
- </exclusion>
- <exclusion>
- <groupId>io.etcd</groupId>
- <artifactId>jetcd-core</artifactId>
- </exclusion>
- <exclusion>
- <groupId>io.etcd</groupId>
- <artifactId>jetcd-api</artifactId>
- </exclusion>
- <exclusion>
- <groupId>io.vertx</groupId>
- <artifactId>*</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
- <dependency>
- <groupId>${project.groupId}</groupId>
- <artifactId>jetcd-core-shaded</artifactId>
- <version>${project.version}</version>
- <exclusions>
- <exclusion>
- <groupId>io.etcd</groupId>
- <artifactId>*</artifactId>
- </exclusion>
- <exclusion>
- <groupId>io.vertx</groupId>
- <artifactId>*</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
-
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-streaming_2.10</artifactId>
@@ -2645,7 +2594,7 @@ flexible messaging model and an intuitive client
API.</description>
<module>pulsar-client-messagecrypto-bc</module>
<module>pulsar-metadata</module>
- <module>jetcd-core-shaded</module>
+
<module>jclouds-shaded</module>
<module>pulsar-client-dependencies-minimized</module>
@@ -2713,7 +2662,7 @@ flexible messaging model and an intuitive client
API.</description>
<!-- all these modules should be put at the end in this exact sequence
-->
<module>distribution</module>
<module>pulsar-metadata</module>
- <module>jetcd-core-shaded</module>
+
<module>pulsar-client-dependencies-minimized</module>
<!-- package management releated modules (begin) -->
<module>pulsar-package-management</module>
diff --git a/pulsar-broker/pom.xml b/pulsar-broker/pom.xml
index 0b74d3078c7..f954bbcddfa 100644
--- a/pulsar-broker/pom.xml
+++ b/pulsar-broker/pom.xml
@@ -487,23 +487,6 @@
<version>${project.version}</version>
</dependency>
- <dependency>
- <groupId>${project.groupId}</groupId>
- <artifactId>jetcd-core-shaded</artifactId>
- <version>${project.version}</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>io.grpc</groupId>
- <artifactId>grpc-netty-shaded</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>io.etcd</groupId>
- <artifactId>jetcd-test</artifactId>
- <scope>test</scope>
- </dependency>
-
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>pulsar-package-filesystem-storage</artifactId>
diff --git a/pulsar-metadata/pom.xml b/pulsar-metadata/pom.xml
index 18a705dd9e5..8c2ea805965 100644
--- a/pulsar-metadata/pom.xml
+++ b/pulsar-metadata/pom.xml
@@ -122,22 +122,6 @@
<artifactId>bookkeeper-server</artifactId>
</dependency>
- <dependency>
- <groupId>${project.groupId}</groupId>
- <artifactId>jetcd-core-shaded</artifactId>
- <version>${project.version}</version>
- </dependency>
- <dependency>
- <groupId>io.grpc</groupId>
- <artifactId>grpc-netty-shaded</artifactId>
- </dependency>
-
- <dependency>
- <groupId>io.etcd</groupId>
- <artifactId>jetcd-test</artifactId>
- <scope>test</scope>
- </dependency>
-
<dependency>
<groupId>com.github.ben-manes.caffeine</groupId>
<artifactId>caffeine</artifactId>
diff --git
a/pulsar-metadata/src/main/java/org/apache/pulsar/metadata/impl/EtcdMetadataStore.java
b/pulsar-metadata/src/main/java/org/apache/pulsar/metadata/impl/EtcdMetadataStore.java
deleted file mode 100644
index e1311fccfe0..00000000000
---
a/pulsar-metadata/src/main/java/org/apache/pulsar/metadata/impl/EtcdMetadataStore.java
+++ /dev/null
@@ -1,512 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.pulsar.metadata.impl;
-
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
-import io.etcd.jetcd.ByteSequence;
-import io.etcd.jetcd.Client;
-import io.etcd.jetcd.ClientBuilder;
-import io.etcd.jetcd.KV;
-import io.etcd.jetcd.KeyValue;
-import io.etcd.jetcd.Txn;
-import io.etcd.jetcd.kv.DeleteResponse;
-import io.etcd.jetcd.kv.GetResponse;
-import io.etcd.jetcd.kv.PutResponse;
-import io.etcd.jetcd.kv.TxnResponse;
-import io.etcd.jetcd.lease.LeaseKeepAliveResponse;
-import io.etcd.jetcd.op.Cmp;
-import io.etcd.jetcd.op.CmpTarget;
-import io.etcd.jetcd.op.Op;
-import io.etcd.jetcd.options.DeleteOption;
-import io.etcd.jetcd.options.GetOption;
-import io.etcd.jetcd.options.PutOption;
-import io.etcd.jetcd.options.WatchOption;
-import io.etcd.jetcd.support.CloseableClient;
-import io.etcd.jetcd.watch.WatchEvent;
-import io.etcd.jetcd.watch.WatchResponse;
-import io.grpc.Status;
-import io.grpc.StatusRuntimeException;
-import io.grpc.netty.shaded.io.grpc.netty.GrpcSslContexts;
-import io.grpc.netty.shaded.io.netty.handler.ssl.SslContext;
-import io.grpc.netty.shaded.io.netty.handler.ssl.SslProvider;
-import io.grpc.stub.StreamObserver;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.nio.charset.StandardCharsets;
-import java.nio.file.Files;
-import java.nio.file.Paths;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.EnumSet;
-import java.util.List;
-import java.util.Optional;
-import java.util.Set;
-import java.util.TreeSet;
-import java.util.concurrent.CompletableFuture;
-import java.util.concurrent.CompletionException;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.TimeUnit;
-import java.util.stream.Collectors;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.lang3.StringUtils;
-import org.apache.pulsar.metadata.api.GetResult;
-import org.apache.pulsar.metadata.api.MetadataStore;
-import org.apache.pulsar.metadata.api.MetadataStoreConfig;
-import org.apache.pulsar.metadata.api.MetadataStoreException;
-import org.apache.pulsar.metadata.api.MetadataStoreProvider;
-import org.apache.pulsar.metadata.api.Notification;
-import org.apache.pulsar.metadata.api.NotificationType;
-import org.apache.pulsar.metadata.api.Stat;
-import org.apache.pulsar.metadata.api.extended.CreateOption;
-import org.apache.pulsar.metadata.api.extended.SessionEvent;
-import org.apache.pulsar.metadata.impl.batching.AbstractBatchedMetadataStore;
-import org.apache.pulsar.metadata.impl.batching.MetadataOp;
-import org.apache.pulsar.metadata.impl.batching.OpDelete;
-import org.apache.pulsar.metadata.impl.batching.OpGet;
-import org.apache.pulsar.metadata.impl.batching.OpGetChildren;
-import org.apache.pulsar.metadata.impl.batching.OpPut;
-
-@Slf4j
-public class EtcdMetadataStore extends AbstractBatchedMetadataStore {
-
- static final String ETCD_SCHEME = "etcd";
- static final String ETCD_SCHEME_IDENTIFIER = "etcd:";
-
- private final int leaseTTLSeconds;
- private final Client client;
- private final KV kv;
- private volatile long leaseId;
- private volatile CloseableClient leaseClient;
- private final EtcdSessionWatcher sessionWatcher;
-
- public EtcdMetadataStore(String metadataURL, MetadataStoreConfig conf,
boolean enableSessionWatcher)
- throws MetadataStoreException {
- super(conf);
-
- this.leaseTTLSeconds = conf.getSessionTimeoutMillis() / 1000;
- try {
- this.client = newEtcdClient(metadataURL, conf);
- this.kv = client.getKVClient();
- this.client.getWatchClient().watch(ByteSequence.from("/",
StandardCharsets.UTF_8),
- WatchOption.newBuilder()
- .isPrefix(true)
- .build(), this::handleWatchResponse);
- if (enableSessionWatcher) {
- this.sessionWatcher =
- new EtcdSessionWatcher(client,
conf.getSessionTimeoutMillis(), this::receivedSessionEvent);
-
- // Ensure the lease is created when we start
- this.createLease(false).join();
- } else {
- sessionWatcher = null;
- }
- } catch (Exception e) {
- throw new MetadataStoreException(e);
- }
- }
-
- private Client newEtcdClient(String metadataURL, MetadataStoreConfig conf)
throws IOException {
- String etcdUrl = metadataURL.replaceFirst(ETCD_SCHEME_IDENTIFIER, "");
- ClientBuilder clientBuilder = Client.builder()
- .endpoints(etcdUrl.split(","));
-
- if (StringUtils.isNotEmpty(conf.getConfigFilePath())) {
- try (InputStream inputStream =
Files.newInputStream(Paths.get(conf.getConfigFilePath()))) {
- EtcdConfig etcdConfig = new ObjectMapper(new
YAMLFactory()).readValue(inputStream, EtcdConfig.class);
- if (etcdConfig.isUseTls()) {
- File trustCertsFile =
readFile(etcdConfig.getTlsTrustCertsFilePath());
- File keyFile = readFile(etcdConfig.getTlsKeyFilePath());
- File certFile =
readFile(etcdConfig.getTlsCertificateFilePath());
- SslContext context = GrpcSslContexts.forClient()
- .trustManager(trustCertsFile)
- .sslProvider(etcdConfig.getTlsProvider())
- .keyManager(certFile, keyFile)
- .build();
- clientBuilder.sslContext(context);
- }
-
- if (StringUtils.isNotEmpty(etcdConfig.getAuthority())) {
- clientBuilder.authority(etcdConfig.getAuthority());
- }
- }
- }
-
- return clientBuilder.build();
- }
-
- private File readFile(String path) {
- return StringUtils.isEmpty(path) ? null : new File(path);
- }
-
- @Override
- public void close() throws Exception {
- if (isClosed.compareAndSet(false, true)) {
- super.close();
-
- if (sessionWatcher != null) {
- sessionWatcher.close();
- }
-
- if (leaseClient != null) {
- leaseClient.close();
- }
-
- if (leaseId != 0) {
- client.getLeaseClient().revoke(leaseId);
- }
-
- kv.close();
- client.close();
- }
- }
-
- private static final GetOption EXISTS_GET_OPTION =
GetOption.newBuilder().withCountOnly(true).build();
- private static final GetOption SINGLE_GET_OPTION =
GetOption.newBuilder().withLimit(1).build();
-
- @Override
- protected CompletableFuture<Boolean> existsFromStore(String path) {
- return kv.get(ByteSequence.from(path, StandardCharsets.UTF_8),
EXISTS_GET_OPTION)
- .thenApply(gr -> gr.getCount() == 1);
- }
-
- @Override
- protected CompletableFuture<Stat> storePut(String path, byte[] data,
Optional<Long> optExpectedVersion,
- EnumSet<CreateOption> options) {
- if (!options.contains(CreateOption.Sequential)) {
- return super.storePut(path, data, optExpectedVersion, options);
- } else {
- // First get the version from parent
- String parent = parent(path);
- if (parent == null) {
- parent = "/";
- }
- return super.storePut(parent, new byte[0], Optional.empty(),
EnumSet.noneOf(CreateOption.class))
- // Then create the unique key with the version added in
the path
- .thenCompose(
- stat -> super.storePut(path + stat.getVersion(),
data, optExpectedVersion, options));
- }
- }
-
- @Override
- protected void batchOperation(List<MetadataOp> ops) {
- try {
- Txn txn = kv.txn();
-
- // First, set all the conditions
- ops.forEach(op -> {
- switch (op.getType()) {
- case PUT: {
- OpPut put = op.asPut();
- ByteSequence key = ByteSequence.from(put.getPath(),
StandardCharsets.UTF_8);
- if (put.getOptExpectedVersion().isPresent()) {
- long expectedVersion =
put.getOptExpectedVersion().get();
- if (expectedVersion == -1L) {
- // Check that key does not exist
- txn.If(new Cmp(key, Cmp.Op.EQUAL,
CmpTarget.createRevision(0)));
- } else {
- txn.If(new Cmp(key, Cmp.Op.EQUAL,
CmpTarget.version(expectedVersion + 1)));
- }
- }
- break;
- }
- case DELETE: {
- OpDelete del = op.asDelete();
- ByteSequence key = ByteSequence.from(del.getPath(),
StandardCharsets.UTF_8);
- if (del.getOptExpectedVersion().isPresent()) {
- txn.If(new Cmp(key, Cmp.Op.EQUAL,
-
CmpTarget.version(del.getOptExpectedVersion().get() + 1)));
- }
- break;
- }
- }
- });
-
- // Then the requests
- ops.forEach(op -> {
- switch (op.getType()) {
- case GET: {
- txn.Then(
- Op.get(ByteSequence.from(op.asGet().getPath(),
StandardCharsets.UTF_8),
- SINGLE_GET_OPTION));
- break;
- }
- case PUT: {
- OpPut put = op.asPut();
- ByteSequence key = ByteSequence.from(put.getPath(),
StandardCharsets.UTF_8);
- if (!put.getFuture().isDone()) {
- PutOption.Builder b = PutOption.newBuilder()
- .withPrevKV();
-
- if (put.isEphemeral()) {
- b.withLeaseId(leaseId);
- }
-
- txn.Then(Op.put(key,
ByteSequence.from(put.getData()), b.build()));
- }
- break;
- }
- case DELETE: {
- OpDelete del = op.asDelete();
- ByteSequence key = ByteSequence.from(del.getPath(),
StandardCharsets.UTF_8);
- txn.Then(Op.delete(key, DeleteOption.DEFAULT));
- break;
- }
- case GET_CHILDREN: {
- OpGetChildren opGetChildren = op.asGetChildren();
- String path = opGetChildren.getPath();
-
- ByteSequence prefix =
- ByteSequence.from(path.equals("/") ? path :
path + "/", StandardCharsets.UTF_8);
-
- txn.Then(Op.get(prefix, GetOption.newBuilder()
- .withKeysOnly(true)
- .withSortField(GetOption.SortTarget.KEY)
- .withSortOrder(GetOption.SortOrder.ASCEND)
- .isPrefix(true)
- .build()));
- break;
- }
- }
- });
-
- txn.commit().thenAccept(txnResponse -> {
- handleBatchOperationResult(txnResponse, ops);
- }).exceptionally(ex -> {
- Throwable cause = ex.getCause();
- if (cause instanceof ExecutionException || cause instanceof
CompletionException) {
- cause = cause.getCause();
- }
- if (ops.size() > 1 && cause instanceof StatusRuntimeException)
{
- Status.Code code = ((StatusRuntimeException)
cause).getStatus().getCode();
- if (
- code == Status.Code.INVALID_ARGUMENT /* This could
be caused by having repeated keys
- in the batch, retry individually */
- ||
- code
- == Status.Code.RESOURCE_EXHAUSTED
/* We might have exceeded the max-frame
- size for the response */
- ) {
- ops.forEach(o ->
batchOperation(Collections.singletonList(o)));
- }
- } else {
- log.warn("Failed to commit: {}", cause.getMessage());
- ops.forEach(o -> o.getFuture().completeExceptionally(ex));
- }
- return null;
- });
- } catch (Throwable t) {
- log.warn("Error in committing batch: {}", t.getMessage());
- }
- }
-
- private void handleBatchOperationResult(TxnResponse txnResponse,
- List<MetadataOp> ops) {
- safeExecuteCallbacks(() -> {
- if (!txnResponse.isSucceeded()) {
- if (ops.size() > 1) {
- // Retry individually
- ops.forEach(o ->
batchOperation(Collections.singletonList(o)));
- } else {
- ops.get(0).getFuture()
- .completeExceptionally(new
MetadataStoreException.BadVersionException("Bad version"));
- }
- return;
- }
-
- int getIdx = 0;
- int deletedIdx = 0;
- int putIdx = 0;
- for (MetadataOp op : ops) {
- switch (op.getType()) {
- case GET: {
- OpGet get = op.asGet();
- GetResponse gr =
txnResponse.getGetResponses().get(getIdx++);
- if (gr.getCount() == 0) {
- get.getFuture().complete(Optional.empty());
- } else {
- KeyValue kv = gr.getKvs().get(0);
- boolean isEphemeral = kv.getLease() != 0;
- boolean createdBySelf = kv.getLease() == leaseId;
- get.getFuture().complete(Optional.of(
- new GetResult(
- kv.getValue().getBytes(),
- new Stat(get.getPath(),
kv.getVersion() - 1, 0, 0, isEphemeral,
- createdBySelf)
- )
- )
- );
- }
- break;
- }
- case PUT: {
- OpPut put = op.asPut();
- PutResponse pr =
txnResponse.getPutResponses().get(putIdx++);
- KeyValue prevKv = pr.getPrevKv();
- if (prevKv == null) {
- put.getFuture().complete(new Stat(put.getPath(),
- 0, 0, 0, put.isEphemeral(), true));
- } else {
- put.getFuture().complete(new Stat(put.getPath(),
- prevKv.getVersion(), 0, 0,
put.isEphemeral(), true));
- }
-
- break;
- }
- case DELETE: {
- OpDelete del = op.asDelete();
- DeleteResponse dr =
txnResponse.getDeleteResponses().get(deletedIdx++);
- if (dr.getDeleted() == 0) {
- del.getFuture().completeExceptionally(new
MetadataStoreException.NotFoundException());
- } else {
- del.getFuture().complete(null);
- }
- break;
- }
- case GET_CHILDREN: {
- OpGetChildren getChildren = op.asGetChildren();
- GetResponse gr =
txnResponse.getGetResponses().get(getIdx++);
- String basePath =
- getChildren.getPath().equals("/") ? "/" :
getChildren.getPath() + "/";
-
- Set<String> children = gr.getKvs().stream()
- .map(kv ->
kv.getKey().toString(StandardCharsets.UTF_8))
- .map(p -> p.replaceFirst(basePath, ""))
- // Only return first-level children
- .map(k -> k.split("/", 2)[0])
-
.collect(Collectors.toCollection(TreeSet::new));
-
- getChildren.getFuture().complete(new
ArrayList<>(children));
- }
- }
- }
- }, ops);
- }
-
- private synchronized CompletableFuture<Void> createLease(boolean
retryOnFailure) {
- CompletableFuture<Void> future =
client.getLeaseClient().grant(leaseTTLSeconds)
- .thenAccept(lease -> {
- synchronized (this) {
- this.leaseId = lease.getID();
-
- if (leaseClient != null) {
- leaseClient.close();
- }
- this.leaseClient =
- this.client.getLeaseClient()
- .keepAlive(leaseId, new
StreamObserver<LeaseKeepAliveResponse>() {
- @Override
- public void
onNext(LeaseKeepAliveResponse leaseKeepAliveResponse) {
- if (log.isDebugEnabled()) {
- log.debug("On next: {}",
leaseKeepAliveResponse);
- }
- }
-
- @Override
- public void onError(Throwable
throwable) {
- log.warn("Lease client error
:", throwable);
-
receivedSessionEvent(SessionEvent.SessionLost);
- }
-
- @Override
- public void onCompleted() {
- log.info("Etcd lease has
expired");
-
receivedSessionEvent(SessionEvent.SessionLost);
- }
- });
- }
- });
-
- if (retryOnFailure) {
- future.exceptionally(ex -> {
- log.warn("Failed to create Etcd lease. Retrying later", ex);
- scheduleDelayedTask(1, TimeUnit.SECONDS, () ->
createLease(true));
- return null;
- });
- }
-
- return future;
- }
-
- private void handleWatchResponse(WatchResponse watchResponse) {
- watchResponse.getEvents().forEach(we -> {
- String path =
we.getKeyValue().getKey().toString(StandardCharsets.UTF_8);
- if (we.getEventType() == WatchEvent.EventType.PUT) {
- if (we.getKeyValue().getVersion() == 1) {
- receivedNotification(new
Notification(NotificationType.Created, path));
-
- notifyParentChildrenChanged(path);
- } else {
- receivedNotification(new
Notification(NotificationType.Modified, path));
- }
- } else if (we.getEventType() == WatchEvent.EventType.DELETE) {
- receivedNotification(new
Notification(NotificationType.Deleted, path));
- notifyParentChildrenChanged(path);
- }
- });
- }
-
- @Override
- protected void receivedSessionEvent(SessionEvent event) {
- if (event == SessionEvent.SessionReestablished) {
- // Re-create the lease before notifying that we are reconnected
- createLease(true)
- .thenRun(() -> {
- super.receivedSessionEvent(event);
- });
-
- } else {
- super.receivedSessionEvent(event);
- }
- }
-}
-
-@AllArgsConstructor
-@NoArgsConstructor
-@Data
-@Builder
-class EtcdConfig {
- private boolean useTls;
-
- private SslProvider tlsProvider;
- private String tlsTrustCertsFilePath;
- private String tlsKeyFilePath;
- private String tlsCertificateFilePath;
-
- private String authority;
-}
-
-class EtcdMetadataStoreProvider implements MetadataStoreProvider {
-
- @Override
- public String urlScheme() {
- return EtcdMetadataStore.ETCD_SCHEME;
- }
-
- @Override
- public MetadataStore create(String metadataURL, MetadataStoreConfig
metadataStoreConfig,
- boolean enableSessionWatcher) throws
MetadataStoreException {
- return new EtcdMetadataStore(metadataURL, metadataStoreConfig,
enableSessionWatcher);
- }
-}
diff --git
a/pulsar-metadata/src/main/java/org/apache/pulsar/metadata/impl/EtcdSessionWatcher.java
b/pulsar-metadata/src/main/java/org/apache/pulsar/metadata/impl/EtcdSessionWatcher.java
deleted file mode 100644
index 26ece398b98..00000000000
---
a/pulsar-metadata/src/main/java/org/apache/pulsar/metadata/impl/EtcdSessionWatcher.java
+++ /dev/null
@@ -1,161 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.pulsar.metadata.impl;
-
-import static
org.apache.pulsar.common.util.Runnables.catchingAndLoggingThrowables;
-import io.etcd.jetcd.ByteSequence;
-import io.etcd.jetcd.Client;
-import io.netty.util.concurrent.DefaultThreadFactory;
-import java.nio.charset.StandardCharsets;
-import java.util.concurrent.CompletableFuture;
-import java.util.concurrent.Executors;
-import java.util.concurrent.RejectedExecutionException;
-import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.ScheduledFuture;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.TimeoutException;
-import java.util.function.Consumer;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.pulsar.metadata.api.extended.SessionEvent;
-
-/**
- * Monitor the ETCd session state every few seconds and send notifications.
- */
-@Slf4j
-public class EtcdSessionWatcher implements AutoCloseable {
- private final Client client;
-
- private SessionEvent currentStatus;
- private final Consumer<SessionEvent> sessionListener;
-
- // Maximum time to wait for Etcd lease to be re-connected to quorum (set
to 5/6 of SessionTimeout)
- private final long monitorTimeoutMillis;
-
- // Interval at which we check the state of the Etcd connection (set to
1/15 of SessionTimeout)
- private final long tickTimeMillis;
-
- private final ScheduledExecutorService scheduler;
- private final ScheduledFuture<?> task;
-
- private long disconnectedAt = 0;
-
- public EtcdSessionWatcher(Client client, long sessionTimeoutMillis,
- Consumer<SessionEvent> sessionListener) {
- this.client = client;
- this.monitorTimeoutMillis = sessionTimeoutMillis * 5 / 6;
- this.tickTimeMillis = sessionTimeoutMillis / 15;
- this.sessionListener = sessionListener;
-
- this.scheduler = Executors
- .newSingleThreadScheduledExecutor(new
DefaultThreadFactory("metadata-store-etcd-session-watcher"));
- this.task =
-
scheduler.scheduleAtFixedRate(catchingAndLoggingThrowables(this::checkConnectionStatus),
tickTimeMillis,
- tickTimeMillis,
- TimeUnit.MILLISECONDS);
- this.currentStatus = SessionEvent.SessionReestablished;
- }
-
- @Override
- public void close() throws Exception {
- task.cancel(true);
- scheduler.shutdownNow();
- scheduler.awaitTermination(10, TimeUnit.SECONDS);
- }
-
- // task that runs every TICK_TIME to check Etcd connection
- private synchronized void checkConnectionStatus() {
- try {
- CompletableFuture<SessionEvent> future = new CompletableFuture<>();
-
client.getKVClient().get(ByteSequence.from("/".getBytes(StandardCharsets.UTF_8)))
- .thenRun(() -> {
- future.complete(SessionEvent.Reconnected);
- }).exceptionally(ex -> {
- future.complete(SessionEvent.ConnectionLost);
- return null;
- });
-
- SessionEvent ectdClientState;
- try {
- ectdClientState = future.get(tickTimeMillis,
TimeUnit.MILLISECONDS);
- } catch (TimeoutException e) {
- // Consider etcd disconnection if etcd operation takes more
than TICK_TIME
- ectdClientState = SessionEvent.ConnectionLost;
- }
-
- checkState(ectdClientState);
- } catch (RejectedExecutionException | InterruptedException e) {
- task.cancel(true);
- } catch (Throwable t) {
- log.warn("Error while checking Etcd connection status", t);
- }
- }
-
- synchronized void setSessionInvalid() {
- currentStatus = SessionEvent.SessionLost;
- }
-
- private void checkState(SessionEvent etcdlientState) {
- switch (etcdlientState) {
- case SessionLost:
- if (currentStatus != SessionEvent.SessionLost) {
- log.error("Etcd lease has expired");
- currentStatus = SessionEvent.SessionLost;
- sessionListener.accept(currentStatus);
- }
- break;
-
- case ConnectionLost:
- if (disconnectedAt == 0) {
- // this is the first disconnect event, we should monitor
the time out from now, so we record the
- // time of disconnect
- disconnectedAt = System.nanoTime();
- }
-
- long timeRemainingMillis = monitorTimeoutMillis
- - TimeUnit.NANOSECONDS.toMillis(System.nanoTime() -
disconnectedAt);
- if (timeRemainingMillis <= 0 && currentStatus !=
SessionEvent.SessionLost) {
- log.error("Etcd lease keep-alive timeout. Notifying
session is lost.");
- currentStatus = SessionEvent.SessionLost;
- sessionListener.accept(currentStatus);
- } else if (currentStatus != SessionEvent.SessionLost) {
- log.warn("Etcd client is disconnected. Waiting to
reconnect, time remaining = {} seconds",
- timeRemainingMillis / 1000.0);
- if (currentStatus == SessionEvent.SessionReestablished) {
- currentStatus = SessionEvent.ConnectionLost;
- sessionListener.accept(currentStatus);
- }
- }
- break;
-
- default:
- if (currentStatus != SessionEvent.SessionReestablished) {
- // since it reconnected to Etcd, we reset the disconnected
time
- log.info("Etcd client reconnection with server quorum.
Current status: {}", currentStatus);
- disconnectedAt = 0;
-
- sessionListener.accept(SessionEvent.Reconnected);
- if (currentStatus == SessionEvent.SessionLost) {
-
sessionListener.accept(SessionEvent.SessionReestablished);
- }
- currentStatus = SessionEvent.SessionReestablished;
- }
- break;
- }
- }
-}
diff --git
a/pulsar-metadata/src/main/java/org/apache/pulsar/metadata/impl/MetadataStoreFactoryImpl.java
b/pulsar-metadata/src/main/java/org/apache/pulsar/metadata/impl/MetadataStoreFactoryImpl.java
index cb7bea718e4..33e6d861d3d 100644
---
a/pulsar-metadata/src/main/java/org/apache/pulsar/metadata/impl/MetadataStoreFactoryImpl.java
+++
b/pulsar-metadata/src/main/java/org/apache/pulsar/metadata/impl/MetadataStoreFactoryImpl.java
@@ -18,7 +18,6 @@
*/
package org.apache.pulsar.metadata.impl;
-import static
org.apache.pulsar.metadata.impl.EtcdMetadataStore.ETCD_SCHEME_IDENTIFIER;
import static
org.apache.pulsar.metadata.impl.LocalMemoryMetadataStore.MEMORY_SCHEME_IDENTIFIER;
import static
org.apache.pulsar.metadata.impl.RocksdbMetadataStore.ROCKSDB_SCHEME_IDENTIFIER;
import static
org.apache.pulsar.metadata.impl.ZKMetadataStore.ZK_SCHEME_IDENTIFIER;
@@ -67,7 +66,6 @@ public class MetadataStoreFactoryImpl {
Map<String, MetadataStoreProvider> providers = new HashMap<>();
providers.put(MEMORY_SCHEME_IDENTIFIER, new
MemoryMetadataStoreProvider());
providers.put(ROCKSDB_SCHEME_IDENTIFIER, new
RocksdbMetadataStoreProvider());
- providers.put(ETCD_SCHEME_IDENTIFIER, new EtcdMetadataStoreProvider());
providers.put(OXIA_SCHEME_IDENTIFIER, new OxiaMetadataStoreProvider());
providers.put(ZK_SCHEME_IDENTIFIER, new ZkMetadataStoreProvider());
@@ -88,6 +86,11 @@ public class MetadataStoreFactoryImpl {
}
private static MetadataStoreProvider findProvider(String metadataURL) {
+ if (metadataURL.startsWith("etcd:")) {
+ throw new IllegalArgumentException(
+ "Etcd metadata store backend has been removed in Pulsar
5.0 (PIP-462). "
+ + "Please use ZooKeeper (zk:) or Oxia (oxia:) as
your metadata store.");
+ }
Map<String, MetadataStoreProvider> providers = loadProviders();
for (Map.Entry<String, MetadataStoreProvider> entry :
providers.entrySet()) {
if (metadataURL.startsWith(entry.getKey())) {
@@ -101,7 +104,6 @@ public class MetadataStoreFactoryImpl {
* Removes the identifier from the full metadata url.
*
* zk:my-zk:3000 -> my-zk:3000
- * etcd:my-etcd:3000 -> my-etcd:3000
* my-default-zk:3000 -> my-default-zk:3000
* @param metadataURL
* @return
diff --git
a/pulsar-metadata/src/test/java/org/apache/pulsar/metadata/BaseMetadataStoreTest.java
b/pulsar-metadata/src/test/java/org/apache/pulsar/metadata/BaseMetadataStoreTest.java
index 84248814b1a..75efe5455c6 100644
---
a/pulsar-metadata/src/test/java/org/apache/pulsar/metadata/BaseMetadataStoreTest.java
+++
b/pulsar-metadata/src/test/java/org/apache/pulsar/metadata/BaseMetadataStoreTest.java
@@ -20,11 +20,8 @@ package org.apache.pulsar.metadata;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertTrue;
-import io.etcd.jetcd.launcher.EtcdCluster;
-import io.etcd.jetcd.test.EtcdClusterExtension;
import io.oxia.testcontainers.OxiaContainer;
import java.io.File;
-import java.net.URI;
import java.util.Arrays;
import java.util.Optional;
import java.util.Set;
@@ -32,7 +29,6 @@ import java.util.UUID;
import java.util.concurrent.CompletionException;
import java.util.function.Predicate;
import java.util.function.Supplier;
-import java.util.stream.Collectors;
import org.apache.commons.lang3.StringUtils;
import org.apache.pulsar.metadata.api.MetadataStore;
import org.apache.pulsar.metadata.api.MetadataStoreConfig;
@@ -47,11 +43,10 @@ import org.testng.annotations.DataProvider;
public abstract class BaseMetadataStoreTest extends TestRetrySupport {
// to debug specific implementations, set the TEST_METADATA_PROVIDERS
environment variable
// or temporarily hard code this value in the test class before running
tests in the IDE
- // supported values are ZooKeeper,Memory,RocksDB,Etcd,Oxia,MockZooKeeper
+ // supported values are ZooKeeper,Memory,RocksDB,Oxia,MockZooKeeper
private static final String TEST_METADATA_PROVIDERS =
System.getenv("TEST_METADATA_PROVIDERS");
private static String originalMetadatastoreProvidersPropertyValue;
protected TestZKServer zks;
- protected EtcdCluster etcdCluster;
protected OxiaContainer oxiaServer;
private String mockZkUrl;
// reference to keep the MockZooKeeper instance alive in
MockZookeeperMetadataStoreProvider
@@ -92,11 +87,6 @@ public abstract class BaseMetadataStoreTest extends
TestRetrySupport {
zks = null;
}
- if (etcdCluster != null) {
- etcdCluster.close();
- etcdCluster = null;
- }
-
if (oxiaServer != null) {
oxiaServer.close();
oxiaServer = null;
@@ -140,7 +130,6 @@ public abstract class BaseMetadataStoreTest extends
TestRetrySupport {
{"ZooKeeper", providerUrlSupplier(() -> zksConnectionString)},
{"Memory", providerUrlSupplier(() -> memoryConnectionString)},
{"RocksDB", providerUrlSupplier(() ->
rocksdbConnectionString)},
- {"Etcd", providerUrlSupplier(() -> "etcd:" +
getEtcdClusterConnectString(), "etcd:...")},
{"Oxia", providerUrlSupplier(() -> "oxia://" +
getOxiaServerConnectString(), "oxia://...")},
{"MockZooKeeper", providerUrlSupplier(() -> mockZkUrl)},
};
@@ -148,7 +137,7 @@ public abstract class BaseMetadataStoreTest extends
TestRetrySupport {
@DataProvider(name = "distributedImpl")
public Object[][] distributedImplementations() {
- return filterImplementations("ZooKeeper", "Etcd", "Oxia");
+ return filterImplementations("ZooKeeper", "Oxia");
}
@DataProvider(name = "zkImpls")
@@ -174,18 +163,6 @@ public abstract class BaseMetadataStoreTest extends
TestRetrySupport {
return oxiaServer.getServiceAddress();
}
- private synchronized String getEtcdClusterConnectString() {
- if (!running) {
- return null;
- }
- if (etcdCluster == null) {
- etcdCluster =
EtcdClusterExtension.builder().withClusterName("test").withNodes(1).withSsl(false).build()
- .cluster();
- etcdCluster.start();
- }
- return
etcdCluster.clientEndpoints().stream().map(URI::toString).collect(Collectors.joining(","));
- }
-
private static Supplier<String> providerUrlSupplier(Supplier<String>
supplier) {
return new ProviderUrlSupplier(supplier);
}
diff --git
a/pulsar-metadata/src/test/java/org/apache/pulsar/metadata/impl/EtcdMetadataStoreTest.java
b/pulsar-metadata/src/test/java/org/apache/pulsar/metadata/impl/EtcdMetadataStoreTest.java
deleted file mode 100644
index 5a6d3dd5e8c..00000000000
---
a/pulsar-metadata/src/test/java/org/apache/pulsar/metadata/impl/EtcdMetadataStoreTest.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.pulsar.metadata.impl;
-
-import static org.testng.Assert.assertTrue;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
-import com.google.common.io.Resources;
-import io.etcd.jetcd.launcher.EtcdCluster;
-import io.etcd.jetcd.test.EtcdClusterExtension;
-import java.net.URI;
-import java.nio.charset.StandardCharsets;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.util.Optional;
-import java.util.stream.Collectors;
-import lombok.Cleanup;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.pulsar.metadata.api.MetadataStore;
-import org.apache.pulsar.metadata.api.MetadataStoreConfig;
-import org.apache.pulsar.metadata.api.MetadataStoreFactory;
-import org.testng.annotations.Test;
-
-@Slf4j
-public class EtcdMetadataStoreTest {
-
- @Test
- public void testCluster() throws Exception {
- @Cleanup
- EtcdCluster etcdCluster =
EtcdClusterExtension.builder().withClusterName("test-cluster").withNodes(3)
- .withSsl(false).build().cluster();
- etcdCluster.start();
-
- EtcdConfig etcdConfig = EtcdConfig.builder().useTls(false)
- .tlsProvider(null)
- .authority("etcd0")
- .build();
-
- Path etcdConfigPath = Files.createTempFile("etcd_config_cluster",
".yml");
- new ObjectMapper(new
YAMLFactory()).writeValue(etcdConfigPath.toFile(), etcdConfig);
-
- String metadataURL =
- "etcd:" +
etcdCluster.clientEndpoints().stream().map(URI::toString).collect(Collectors.joining(","));
-
- @Cleanup
- MetadataStore store = MetadataStoreFactory.create(metadataURL,
-
MetadataStoreConfig.builder().configFilePath(etcdConfigPath.toString()).build());
-
- store.put("/test", "value".getBytes(StandardCharsets.UTF_8),
Optional.empty()).join();
-
- assertTrue(store.exists("/test").join());
-
- }
-
- @Test
- public void testClusterWithTls() throws Exception {
- @Cleanup
- EtcdCluster etcdCluster =
EtcdClusterExtension.builder().withClusterName("test-cluster").withNodes(3)
- .withSsl(true).build().cluster();
- etcdCluster.start();
-
- EtcdConfig etcdConfig = EtcdConfig.builder().useTls(true)
- .tlsProvider(null)
- .authority("etcd0")
-
.tlsTrustCertsFilePath(Resources.getResource("ssl/cert/ca.pem").getPath())
-
.tlsKeyFilePath(Resources.getResource("ssl/cert/client-key-pk8.pem").getPath())
-
.tlsCertificateFilePath(Resources.getResource("ssl/cert/client.pem").getPath())
- .build();
-
- Path etcdConfigPath = Files.createTempFile("etcd_config_cluster_ssl",
".yml");
- new ObjectMapper(new
YAMLFactory()).writeValue(etcdConfigPath.toFile(), etcdConfig);
-
- String metadataURL =
- "etcd:" +
etcdCluster.clientEndpoints().stream().map(URI::toString).collect(Collectors.joining(","));
-
- @Cleanup
- MetadataStore store = MetadataStoreFactory.create(metadataURL,
-
MetadataStoreConfig.builder().configFilePath(etcdConfigPath.toString()).build());
-
- store.put("/test", "value".getBytes(StandardCharsets.UTF_8),
Optional.empty()).join();
-
- assertTrue(store.exists("/test").join());
-
- }
-
- @Test
- public void testTlsInstance() throws Exception {
- @Cleanup
- EtcdCluster etcdCluster =
EtcdClusterExtension.builder().withClusterName("test-tls").withNodes(1)
- .withSsl(true).build().cluster();
- etcdCluster.start();
-
- EtcdConfig etcdConfig = EtcdConfig.builder().useTls(true)
- .tlsProvider(null)
- .authority("etcd0")
-
.tlsTrustCertsFilePath(Resources.getResource("ssl/cert/ca.pem").getPath())
-
.tlsKeyFilePath(Resources.getResource("ssl/cert/client-key-pk8.pem").getPath())
-
.tlsCertificateFilePath(Resources.getResource("ssl/cert/client.pem").getPath())
- .build();
- Path etcdConfigPath = Files.createTempFile("etcd_config", ".yml");
- new ObjectMapper(new
YAMLFactory()).writeValue(etcdConfigPath.toFile(), etcdConfig);
-
- String metadataURL =
- "etcd:" +
etcdCluster.clientEndpoints().stream().map(URI::toString).collect(Collectors.joining(","));
-
- @Cleanup
- MetadataStore store = MetadataStoreFactory.create(metadataURL,
-
MetadataStoreConfig.builder().configFilePath(etcdConfigPath.toString()).build());
-
- store.put("/test", "value".getBytes(StandardCharsets.UTF_8),
Optional.empty()).join();
-
- assertTrue(store.exists("/test").join());
- }
-}
\ No newline at end of file
diff --git
a/pulsar-metadata/src/test/java/org/apache/pulsar/metadata/impl/MetadataStoreFactoryImplTest.java
b/pulsar-metadata/src/test/java/org/apache/pulsar/metadata/impl/MetadataStoreFactoryImplTest.java
index 0ae0b022a35..2828b0de892 100644
---
a/pulsar-metadata/src/test/java/org/apache/pulsar/metadata/impl/MetadataStoreFactoryImplTest.java
+++
b/pulsar-metadata/src/test/java/org/apache/pulsar/metadata/impl/MetadataStoreFactoryImplTest.java
@@ -73,7 +73,6 @@ public class MetadataStoreFactoryImplTest {
public void testRemoveIdentifierFromMetadataURL() {
assertEquals(MetadataStoreFactoryImpl.removeIdentifierFromMetadataURL("zk:host:port"),
"host:port");
assertEquals(MetadataStoreFactoryImpl.removeIdentifierFromMetadataURL("rocksdb:/data/dir"),
"/data/dir");
-
assertEquals(MetadataStoreFactoryImpl.removeIdentifierFromMetadataURL("etcd:host:port"),
"host:port");
assertEquals(MetadataStoreFactoryImpl.removeIdentifierFromMetadataURL("memory:name"),
"name");
assertEquals(MetadataStoreFactoryImpl.removeIdentifierFromMetadataURL("http://unknown/url/scheme"),
"http://unknown/url/scheme");
diff --git a/pulsar-metadata/src/test/resources/ssl/.gitignore
b/pulsar-metadata/src/test/resources/ssl/.gitignore
deleted file mode 100644
index 0139cd0a6fa..00000000000
--- a/pulsar-metadata/src/test/resources/ssl/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-cfssl
diff --git a/pulsar-metadata/src/test/resources/ssl/README.md
b/pulsar-metadata/src/test/resources/ssl/README.md
deleted file mode 100644
index af9ad88dbae..00000000000
--- a/pulsar-metadata/src/test/resources/ssl/README.md
+++ /dev/null
@@ -1,28 +0,0 @@
-<!--
-
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
-
--->
-
-This directory is used for Etcd metadata testing.
-
-**Note: DO NOT EDIT THIS DIRECTORY STRUCTURE**
-
-The `cert` directory holds the Etcd TLS certificate.
-
-The `generate-self-signed-certificates.sh` is used to generate self-signed
certificates based on [cfssl](https://github.com/cloudflare/cfssl).
diff --git a/pulsar-metadata/src/test/resources/ssl/cert/ca-config.json
b/pulsar-metadata/src/test/resources/ssl/cert/ca-config.json
deleted file mode 100644
index dafdebe741d..00000000000
--- a/pulsar-metadata/src/test/resources/ssl/cert/ca-config.json
+++ /dev/null
@@ -1 +0,0 @@
-{"signing":{"default":{"expiry":"876000h","usages":["signing","key
encipherment","server auth","client auth"]}}}
diff --git a/pulsar-metadata/src/test/resources/ssl/cert/ca-key.pem
b/pulsar-metadata/src/test/resources/ssl/cert/ca-key.pem
deleted file mode 100644
index 9a3ceba7351..00000000000
--- a/pulsar-metadata/src/test/resources/ssl/cert/ca-key.pem
+++ /dev/null
@@ -1,27 +0,0 @@
------BEGIN RSA PRIVATE KEY-----
-MIIEowIBAAKCAQEAyUXfR1a3FAsYajnkYYASVgvOBY9jiFrWeNfi9HZsDF6xs5+3
-vempZ5FYw9smzJBxRwV7r6g8TJbXW4V03Drjuk3Y9VSZfk5uyaWT3tzr0uYV7hYR
-9kM3RybimN1cbtUELK7LKvdg3Y+gHrvFPTQ3I0grXI4geCGfDh07mPYFmH8SqtAY
-22qJb8sFBaIq76dstuKmX55abEJWXQG5B2CXxuYYaseydzAJNk8y+zEfJVZs4pWg
-NcC4CozjQcl2NsokX8PIE/OaCxIwabBw1ONFHHcClFwW7inXnip1fYE+Se6348U6
-sOVwCt2wTGYnBJOqLZw1vuZZYXUUwdgp0Y+6pQIDAQABAoIBAQDIQBBptcjo1DEy
-Xu7uYrHbklskBQmOPHJuQLy5ZKkTlZNPl3UEKlo1hNK/6mar2Hobo0Tv+34i5WDW
-2ezuwFian6FgVQ9yLy7iyS5Z6YtnhSwEeUjdrvpsfC+uz26LhrxkiHPzB7UEO0Wf
-zknrHuxM2hzqNS3w1+Kb9FG7WesvUFpxFzl2bdktdxI2THGr5mK2S4mSGFRkNazz
-tAwUpe+9WGra5OmlukYGHtm9g1WNcutyYAWOdfSlFOva9D9wRWiE2t1NpWjWwQv0
-P11RZQbPbAqmAhHwciSAWu+m8M/8EUDmlebF5pbPTDyGm5d35+byPWNiKxMn4/Rj
-zEebwR3xAoGBAO0WMeqLFLfGShCxu9Ke4Qb2c8MBfGa6LQJmDZ8BsUAPCvyG3NAt
-308KvNudj/+rrr9xCkmNSKD31DOUu6y05/Sa7Opq2qj/L7Hxk8GxT3/3Q/3jTmDn
-8KOQ94oUQylUSLz7gQnGiwORfBRDa1yYAljtuvXGkzuv9sJSjYp++4TXAoGBANlU
-SRVmXxYS6WgcsBX6ZlKK1yKyoaLMobDWBGNcGWTdn+7yUcs0viBLnwf2Sgd1uhx0
-N1XI2pOxTMbLKLoNUiw19jAfh9Jb7GieeyANQHjp4z8q1u8JpY+hd8SxJt/wAWyH
-yELVymT5xREyE/kBexGLHn3E6fwG3e4lejmmsJDjAoGANDHas2QDH6JL0/kM/IV1
-zO6c9aVyGbuLBSgqf4MD3rJxHL8kBcDTlLcsdLzvYr4NLqBYP3EXODjXQrPPzWnW
-Vwd0ePclRGdJvMcOXGoIsodhNJfCPZtSYvAbTw6+6m5fxRspgVlwaUyyIFPnYu8k
-NSfBLTKWX2GR1Z4PAxqJjOkCgYBrO9Rn08BdMu2qKmWUIp50Yf9vJnbszk2F5MP7
-hskc5OHyU+yZ+KdLZiTNF/BFKAix24ImONnpABXjDQFGdCY0nFeiPRyWZjcLFA+q
-q/9A6h7v3yJ4hekEKubezY5h9pmtRH5CxBx+oGNlbbE/L0TbTiq4Yf4WFglRZXqe
-kaoTgwKBgE6LoQYR7I2TFs2mVMJn4FG9Mlk66xBWxkA/+JsQP78QoQbfhrFBFbx8
-bPZPxjtJ47fYUga25fpxRzm1sVKm69G7tnI73xCJKenRCiZE6DktnKLyOJIzfuIX
-+iXKugrQaf0XQPjKXYPnczBBd572MoXoKVbWQbT+/vicv4AahGeh
------END RSA PRIVATE KEY-----
diff --git a/pulsar-metadata/src/test/resources/ssl/cert/ca.csr
b/pulsar-metadata/src/test/resources/ssl/cert/ca.csr
deleted file mode 100644
index a64072407a0..00000000000
--- a/pulsar-metadata/src/test/resources/ssl/cert/ca.csr
+++ /dev/null
@@ -1,15 +0,0 @@
------BEGIN CERTIFICATE REQUEST-----
-MIICUjCCAToCAQAwDTELMAkGA1UEAxMCQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IB
-DwAwggEKAoIBAQDJRd9HVrcUCxhqOeRhgBJWC84Fj2OIWtZ41+L0dmwMXrGzn7e9
-6alnkVjD2ybMkHFHBXuvqDxMltdbhXTcOuO6Tdj1VJl+Tm7JpZPe3OvS5hXuFhH2
-QzdHJuKY3Vxu1QQsrssq92Ddj6Aeu8U9NDcjSCtcjiB4IZ8OHTuY9gWYfxKq0Bjb
-aolvywUFoirvp2y24qZfnlpsQlZdAbkHYJfG5hhqx7J3MAk2TzL7MR8lVmzilaA1
-wLgKjONByXY2yiRfw8gT85oLEjBpsHDU40UcdwKUXBbuKdeeKnV9gT5J7rfjxTqw
-5XAK3bBMZicEk6otnDW+5llhdRTB2CnRj7qlAgMBAAGgADANBgkqhkiG9w0BAQsF
-AAOCAQEALczD308ElfQ2ovsec/FuqPr3zvtOKyJn6F6H2tYl4890astfZzHGBglu
-xICEWn8yAfwPW3jg6QsTjYupJpjVJMgAxsQhKOneUmTaIuDdRzIHX4ss5m7ndXpD
-B/hk1HXtu/+gAeKcSTNjEpKJh91ErsAp9y3tPjk/9BvOqI/OTRj1jeZV0e5yHaNk
-6nM0o7x9LVgREX6PDXXaFmTGYWmsiANU8l6/XLV0vvyreAKcONvruXrRQ+Cg2z4W
-yPbbFsfocwwwrIiC2zQ6+f+d5HQt5IINIKqAYibG0vNul8G0NMYC6JRFYIqEKOU5
-jQWZx7dY8ofkEpXmSx/IaMh1pQ3g4A==
------END CERTIFICATE REQUEST-----
diff --git a/pulsar-metadata/src/test/resources/ssl/cert/ca.pem
b/pulsar-metadata/src/test/resources/ssl/cert/ca.pem
deleted file mode 100644
index 34a8593879e..00000000000
--- a/pulsar-metadata/src/test/resources/ssl/cert/ca.pem
+++ /dev/null
@@ -1,18 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIC6jCCAdKgAwIBAgIUXHRN1WrCXk813Zz/mWdg3YAu9OIwDQYJKoZIhvcNAQEL
-BQAwDTELMAkGA1UEAxMCQ0EwHhcNMjIwNDI5MDQyMjAwWhcNMjcwNDI4MDQyMjAw
-WjANMQswCQYDVQQDEwJDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
-AMlF30dWtxQLGGo55GGAElYLzgWPY4ha1njX4vR2bAxesbOft73pqWeRWMPbJsyQ
-cUcFe6+oPEyW11uFdNw647pN2PVUmX5Obsmlk97c69LmFe4WEfZDN0cm4pjdXG7V
-BCyuyyr3YN2PoB67xT00NyNIK1yOIHghnw4dO5j2BZh/EqrQGNtqiW/LBQWiKu+n
-bLbipl+eWmxCVl0BuQdgl8bmGGrHsncwCTZPMvsxHyVWbOKVoDXAuAqM40HJdjbK
-JF/DyBPzmgsSMGmwcNTjRRx3ApRcFu4p154qdX2BPknut+PFOrDlcArdsExmJwST
-qi2cNb7mWWF1FMHYKdGPuqUCAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1Ud
-EwEB/wQFMAMBAf8wHQYDVR0OBBYEFB0oynraPRsiMaCbp4VFErPtqn79MA0GCSqG
-SIb3DQEBCwUAA4IBAQAsOdb6+QjABRa7LMIERRy45V1l3lVy04WzLUWEGOeakakE
-I58NDopYY2NDfGPi/gPkErAo8Jo8ruRKPccguHlTYGTwjUBjKGBSySMpalw5DhN0
-iygHdKh9qzqL1ChqcQsQPlmhKgsAYkZyQzD2Gh6c/GpNMe6/NUmjlg0KcnKY3+Vx
-kzy3qWXxiNfSywJlbk6UVWOy0cCxHV+fE0gzy+DgNrcWm6euSPAD4Qz8kXvQKevB
-syTpCxqsKNKG+aVZDoW2BTyrROnnk/lqZQ7k4sKZTcYgTrpNSgylbg7rxVqOIyBk
-G+jAW18vmOlsZpXE306Pqsng6csUJ3IXoHqaBbrm
------END CERTIFICATE-----
diff --git a/pulsar-metadata/src/test/resources/ssl/cert/client-key-pk8.pem
b/pulsar-metadata/src/test/resources/ssl/cert/client-key-pk8.pem
deleted file mode 100644
index a7fec9bc004..00000000000
--- a/pulsar-metadata/src/test/resources/ssl/cert/client-key-pk8.pem
+++ /dev/null
@@ -1,28 +0,0 @@
------BEGIN PRIVATE KEY-----
-MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC/RbW6dJqk2+BN
-SZKAs1M0RQt6PrhIHHhxBBPXFM3XOqKwacrQihuZQSGLgaxfzXbRejwQ9VBg5Ia/
-tOokwDY3tK9Kp4J0bsqgNXZKTRYtnJ4JYh9566jsD47Qpj6xuQZmo3b1QKLEh+Fh
-9buWTEvvdUY8AQTASwvOGAWyzrZgaKuagQQNkZ49TM8gtsy9uJPWS2PZQpW/qk56
-5jRck8Xb8COQ0QV2wPiqwmEtA7/jEeQViQ49HLdfBTi90Hh4Q8XBv8TPW+sQpN5R
-5fvZEz+iwrGm20kIrtVQ+hMCkbywTlA5rSGW7onnakDyqybt10dBzn609/wg5Dee
-LjMZ3dEvAgMBAAECggEAR1r5NcsEWhZQ8mRNDEhZ9PkBFCTL2NMON5M+15FCTVXp
-lYiSCgRL0XuTyRiiNsdO2U0RlX3+83atsl0KsJUoZNW6Q06Eg21FmEj5jTR+3ps7
-9eIuPeylgxM2wy4R23lcIvQ+j7YCQvEyKrpitepWtcl5Xy8+F4Knr8YUciVdsk8T
-a2DxkjXRXG6RW71Hqdd4bpXszM2E22trjKgouy/PV4LOhSCzyDdwAq4fKLBmS7l5
-2j57Ag0/hDZ7L4nW6jtRG1NBonBk7FhPrd4UCGqxaYwfTYvDWDKpQkJgbkWSYCwc
-pUVAqreYi5+udKhL0dXsKrZGE9I20tQlZkaoBBgreQKBgQDAmu73weinuMp9nC6M
-gSXQxuWL02ybEQFsZioP8oGSP+wZDCrSn1HD52iSSZqEoNLoYm0u8u3D9FbWoiw/
-n8BPqTLjLXUozhDdVuvg6YkKxHG2So7ve04UOXBQqCd/pOuNXRUUYUQ+FMq8vmjD
-dRqVo1gH/qUExa4SeTzoOWUXawKBgQD+Onb9+ExPweZjy+T0eAO1FMFP//KsNwSI
-vlf22jUbCqiu6Pem1m/31Rju04AGydWhdHgd+7PG8/arVyLcgNQtTotXtD7zTCVe
-jkr42R/zbG46c0/z8brUXpYOHOjdgFbY62vwWjykulFsruf36hit9/D+tKVNOgep
-tduFS8DSTQKBgC+oJmj3efHGL5RVCM+LRSgbjsDCV6Um2AtSXCYGAzmEx46LDC2B
-bmHi6GUKAUm/4W/OquVrBpnt427IQdqcVKFhZE4B+XNXSaT61PKZ1mbrpJdOa3+m
-KvOmIrxSXzOeQwp/da/NQW17B48cLh/u4d0Uxbt0rrA3mZLInOF5EiJxAoGBAPGS
-GHOntsuq0gNOQZbTW6J7wF0GNk/ST6qoQ+m62u+BJ1xc3sZXyTlT8kcuDd9ldmve
-wiyred64/1E8kVG50OPkWJ/UFGUXnALHbxIbLzMde3hrDjQdJIyb/DYY3mVriBrD
-SWOwOyPEL474fE+k0CKvEP7WJKTHWXS364ozu1uZAoGBAMBXRwDQZgs+Xn3lTohu
-1NLlHhNIuUzcb+4ROn2StoxZS3mEv2W0KWRTzNJGRr4+kbLMcY7K1jOk0qm6fwcG
-HAJnKkxu9E3hFQVUT14CIKPwi3TQCNjmZqj+LaEwe+75w4rXTajwl3WY58KngA5/
-XVn2W3KsXAKOAteL/07xtDEi
------END PRIVATE KEY-----
diff --git a/pulsar-metadata/src/test/resources/ssl/cert/client-key.pem
b/pulsar-metadata/src/test/resources/ssl/cert/client-key.pem
deleted file mode 100644
index 95b52fde4a1..00000000000
--- a/pulsar-metadata/src/test/resources/ssl/cert/client-key.pem
+++ /dev/null
@@ -1,27 +0,0 @@
------BEGIN RSA PRIVATE KEY-----
-MIIEpAIBAAKCAQEAv0W1unSapNvgTUmSgLNTNEULej64SBx4cQQT1xTN1zqisGnK
-0IobmUEhi4GsX8120Xo8EPVQYOSGv7TqJMA2N7SvSqeCdG7KoDV2Sk0WLZyeCWIf
-eeuo7A+O0KY+sbkGZqN29UCixIfhYfW7lkxL73VGPAEEwEsLzhgFss62YGirmoEE
-DZGePUzPILbMvbiT1ktj2UKVv6pOeuY0XJPF2/AjkNEFdsD4qsJhLQO/4xHkFYkO
-PRy3XwU4vdB4eEPFwb/Ez1vrEKTeUeX72RM/osKxpttJCK7VUPoTApG8sE5QOa0h
-lu6J52pA8qsm7ddHQc5+tPf8IOQ3ni4zGd3RLwIDAQABAoIBAEda+TXLBFoWUPJk
-TQxIWfT5ARQky9jTDjeTPteRQk1V6ZWIkgoES9F7k8kYojbHTtlNEZV9/vN2rbJd
-CrCVKGTVukNOhINtRZhI+Y00ft6bO/XiLj3spYMTNsMuEdt5XCL0Po+2AkLxMiq6
-YrXqVrXJeV8vPheCp6/GFHIlXbJPE2tg8ZI10VxukVu9R6nXeG6V7MzNhNtra4yo
-KLsvz1eCzoUgs8g3cAKuHyiwZku5edo+ewINP4Q2ey+J1uo7URtTQaJwZOxYT63e
-FAhqsWmMH02Lw1gyqUJCYG5FkmAsHKVFQKq3mIufrnSoS9HV7Cq2RhPSNtLUJWZG
-qAQYK3kCgYEAwJru98Hop7jKfZwujIEl0Mbli9NsmxEBbGYqD/KBkj/sGQwq0p9R
-w+dokkmahKDS6GJtLvLtw/RW1qIsP5/AT6ky4y11KM4Q3Vbr4OmJCsRxtkqO73tO
-FDlwUKgnf6TrjV0VFGFEPhTKvL5ow3UalaNYB/6lBMWuEnk86DllF2sCgYEA/jp2
-/fhMT8HmY8vk9HgDtRTBT//yrDcEiL5X9to1Gwqoruj3ptZv99UY7tOABsnVoXR4
-HfuzxvP2q1ci3IDULU6LV7Q+80wlXo5K+Nkf82xuOnNP8/G61F6WDhzo3YBW2Otr
-8Fo8pLpRbK7n9+oYrffw/rSlTToHqbXbhUvA0k0CgYAvqCZo93nxxi+UVQjPi0Uo
-G47AwlelJtgLUlwmBgM5hMeOiwwtgW5h4uhlCgFJv+FvzqrlawaZ7eNuyEHanFSh
-YWROAflzV0mk+tTymdZm66SXTmt/pirzpiK8Ul8znkMKf3WvzUFtewePHC4f7uHd
-FMW7dK6wN5mSyJzheRIicQKBgQDxkhhzp7bLqtIDTkGW01uie8BdBjZP0k+qqEPp
-utrvgSdcXN7GV8k5U/JHLg3fZXZr3sIsq3neuP9RPJFRudDj5Fif1BRlF5wCx28S
-Gy8zHXt4aw40HSSMm/w2GN5la4gaw0ljsDsjxC+O+HxPpNAirxD+1iSkx1l0t+uK
-M7tbmQKBgQDAV0cA0GYLPl595U6IbtTS5R4TSLlM3G/uETp9kraMWUt5hL9ltClk
-U8zSRka+PpGyzHGOytYzpNKpun8HBhwCZypMbvRN4RUFVE9eAiCj8It00AjY5mao
-/i2hMHvu+cOK102o8Jd1mOfCp4AOf11Z9ltyrFwCjgLXi/9O8bQxIg==
------END RSA PRIVATE KEY-----
diff --git a/pulsar-metadata/src/test/resources/ssl/cert/client.csr
b/pulsar-metadata/src/test/resources/ssl/cert/client.csr
deleted file mode 100644
index 4e9d091a710..00000000000
--- a/pulsar-metadata/src/test/resources/ssl/cert/client.csr
+++ /dev/null
@@ -1,16 +0,0 @@
------BEGIN CERTIFICATE REQUEST-----
-MIICdDCCAVwCAQAwETEPMA0GA1UEAxMGY2xpZW50MIIBIjANBgkqhkiG9w0BAQEF
-AAOCAQ8AMIIBCgKCAQEAv0W1unSapNvgTUmSgLNTNEULej64SBx4cQQT1xTN1zqi
-sGnK0IobmUEhi4GsX8120Xo8EPVQYOSGv7TqJMA2N7SvSqeCdG7KoDV2Sk0WLZye
-CWIfeeuo7A+O0KY+sbkGZqN29UCixIfhYfW7lkxL73VGPAEEwEsLzhgFss62YGir
-moEEDZGePUzPILbMvbiT1ktj2UKVv6pOeuY0XJPF2/AjkNEFdsD4qsJhLQO/4xHk
-FYkOPRy3XwU4vdB4eEPFwb/Ez1vrEKTeUeX72RM/osKxpttJCK7VUPoTApG8sE5Q
-Oa0hlu6J52pA8qsm7ddHQc5+tPf8IOQ3ni4zGd3RLwIDAQABoB4wHAYJKoZIhvcN
-AQkOMQ8wDTALBgNVHREEBDACggAwDQYJKoZIhvcNAQELBQADggEBABDSTkd0lwd1
-iU8ClUOlWFcJtkw3OXM4aRTXtbX5EGlwDr1HrQApBKqEn+Mp5rP74Du+cChTsS1S
-7flI9EO4OijwwsuMOe65fqtboUWhjy3pHrY7BEz8JzJBNH6TVPdyEyYCANyTg3z/
-0X+mGvQ7yz25BlaaqNiKI8BVs6ATPYi17fKsxdbV3ZAnhi0jv1ruR1dSBNI4/Y3F
-rdnSsJlJabHjqKbF5t1AxaZ3poR5pSY7i2gM464h8WzC9YUaRyNsDjFoUpV0CpuW
-x9kOyIBfkO1rQozSkDxCXjxDp6KyG5CTyxUsh7pITVbHd6KxaftCkCg95W8B2BzT
-GtfST4d92xU=
------END CERTIFICATE REQUEST-----
diff --git a/pulsar-metadata/src/test/resources/ssl/cert/client.pem
b/pulsar-metadata/src/test/resources/ssl/cert/client.pem
deleted file mode 100644
index 6e3d1492726..00000000000
--- a/pulsar-metadata/src/test/resources/ssl/cert/client.pem
+++ /dev/null
@@ -1,20 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDPDCCAiSgAwIBAgIUdYkf8VBmJYG6HvKxh84BHYaTIH8wDQYJKoZIhvcNAQEL
-BQAwDTELMAkGA1UEAxMCQ0EwIBcNMjIwNDI5MDQyMjAwWhgPMjEyMjA0MDUwNDIy
-MDBaMBExDzANBgNVBAMTBmNsaWVudDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
-AQoCggEBAL9Ftbp0mqTb4E1JkoCzUzRFC3o+uEgceHEEE9cUzdc6orBpytCKG5lB
-IYuBrF/NdtF6PBD1UGDkhr+06iTANje0r0qngnRuyqA1dkpNFi2cngliH3nrqOwP
-jtCmPrG5BmajdvVAosSH4WH1u5ZMS+91RjwBBMBLC84YBbLOtmBoq5qBBA2Rnj1M
-zyC2zL24k9ZLY9lClb+qTnrmNFyTxdvwI5DRBXbA+KrCYS0Dv+MR5BWJDj0ct18F
-OL3QeHhDxcG/xM9b6xCk3lHl+9kTP6LCsabbSQiu1VD6EwKRvLBOUDmtIZbuiedq
-QPKrJu3XR0HOfrT3/CDkN54uMxnd0S8CAwEAAaOBjTCBijAOBgNVHQ8BAf8EBAMC
-BaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQCMAAw
-HQYDVR0OBBYEFB/UlCHqPmkA3xcYzddO9kD1w8o1MB8GA1UdIwQYMBaAFB0oynra
-PRsiMaCbp4VFErPtqn79MAsGA1UdEQQEMAKCADANBgkqhkiG9w0BAQsFAAOCAQEA
-AneFIIHBZ21J24+lln995ofX+92Yeu528IVy1WJtTGIpHVN6Fc+jZbsAZqzdhDDd
-q9pKawKlDR2bW6mg7ItF2coYprMoLtHeFAwSUIg5WcMFUgGHxITFDQlscD2mR54Y
-I1otVWegrL2PDyKs2uk5B4Jwm+O/0fbyG+D3FIje9y++gh6Oqi/uwn8YUgnLl/4e
-Yf8POmMrUcOmJn4tXX4y6HtacNR3n0leby8T1dBShNAESuBdmEo8bmgAADh/brfP
-kzGHBdO+AyHEs87TRMZ4ofhspM6m1ZNyazy861xhoYjUcjIoD4vaVsEGIRT9/2HM
-4l8oq0OyarhZRLIpJ11SJQ==
------END CERTIFICATE-----
diff --git a/pulsar-metadata/src/test/resources/ssl/cert/etcd0-key.pem
b/pulsar-metadata/src/test/resources/ssl/cert/etcd0-key.pem
deleted file mode 100644
index 1082f8f95ca..00000000000
--- a/pulsar-metadata/src/test/resources/ssl/cert/etcd0-key.pem
+++ /dev/null
@@ -1,27 +0,0 @@
------BEGIN RSA PRIVATE KEY-----
-MIIEowIBAAKCAQEAwM7rFfUDX0Kwoidp7h9haJdC3rYpti9OJTtRZznEWUjIW4eN
-lhYUZlfFDX9kbRZTIPlZSHbY1KtaWTvPn6DRLiflr9t8ArUScDt8a6imShekeYwz
-Q/OPnkH7sCccPw3C5iX3VbOxDYxFoQx52hwhPPg84f6ItXX5pPZvYpT8B6tQ3DF4
-TsfZzZ0DTqI98yWWc6mZPMrBXXh+FjawzlobvAJY0MSLeokwOnZ55iInRMAVYkYB
-X0hs37ylcf4wFN2aqBshue2XfB58/tXzSwZwIu+C6aZd6T2o9hT/G3ly9m2FoXJx
-lvFOoRjxtSGGdo3MyiUbZAoVviAdM17kEyx9wQIDAQABAoIBAHYTggadWOZSyidT
-6dyJXTcXQz1u45aN29aTQCPuTZ+8Ie9j0UKz3ORcJfJBLPhdbqVH7vSgy+NZ2OfC
-6EDC1LfmeRQ8XvKtf1A6LdUkoEnJttE1GgQoObDaic9z9CltPQmDALh8ZhZ86/tX
-z5vSFEzpXSetoH04dZ0fylDeGoZ6w3WsxWzNFM4uFHn5ZeyS6WfQMlJaY1hrEMQn
-JaJmw9PXs4kqYS6VTT+40g8EJcGG5yy9WP7xN/BSYebeiFZbfNA+HEweFVfFHtaC
-qqfqpyuQAyA2PHarXm14Fh0gESrbhVbQy1cd91CT8LaiszTurYj+eIVDuhxmO/xE
-doOHJM0CgYEAyNOrzTrKI6BN16CCmDR+q3UluL+LXQ1no9yuVMp3Xd5xzPze8vgF
-8TL6DUMck57Rj2+vMjX5K+GEw5D2f4qZnipRsRDcz4qrbIrxeX/PXQgZ/BBA3gts
-JcfkdCmEnEFGl7cPplgJ+erMeIwjTkMODHjApRAeSir83D1t6Xg0MgsCgYEA9cdL
-Xk88ynV4OyXKe5OrJaIc3RyNRL82571EjsCfRmy54FSgsxu4czsCyc1D3S5oX4Ni
-K1w/J8aGmqE/uSHyX2XN5s0QL1UvywM7kP0UfxJk6rPoa3F2RIt7+Ino26oHrhJA
-Id9QWyhC4nPIzQNmUtvriS2KTEDVhfJzDnfNGuMCgYBgPpEnWfVl/X1QyWvM5duO
-8CWT1LhFcBcrQKeLmzx5kBGZ29Y9OwAeCAAuOuuHE6X6x9t+hL9VeE7YKrD3jsTw
-N/fOk/Y+wIZHDo+LWuVWAHvzgRaVU4QQ1yt1QDB9cgsSyniFj8u4Kf60BvUknJ4u
-++/XK1JY2SE1q3rxWNoq4QKBgQDIANTZOxvaGTuszjT22RUV+9UHLdvbzMrOTBvF
-GwTB12pvHg7jkbRIuQWs2IfYLpKq3wx9AoU2Rfx1SrDDY9eLQBoNLmR0UBsjVk8b
-zobmXT6YK6z/+gXnA6bverJuRvAW/C0KI2KNu7ap9tS52IFk/ieuqst2/++CH+j3
-JhBXRwKBgFZ2E0nbgrk8CgEyI1dPGLIaN2E9QZxZNUfg01C0SgjBT/PKQS+Hx4Fk
-j0ABMqcfSwMFomezfxUfTzqaawlCMcpuQtE/1KtEfRMCwuvKdYcARDClH2p78e1P
-tZ9xiswa6PMXjLXc+jFy/kzgDS2JBaaZMP3C1NGbcDNpTxMQGKSe
------END RSA PRIVATE KEY-----
diff --git a/pulsar-metadata/src/test/resources/ssl/cert/etcd0.csr
b/pulsar-metadata/src/test/resources/ssl/cert/etcd0.csr
deleted file mode 100644
index 75c12943408..00000000000
--- a/pulsar-metadata/src/test/resources/ssl/cert/etcd0.csr
+++ /dev/null
@@ -1,16 +0,0 @@
------BEGIN CERTIFICATE REQUEST-----
-MIICeDCCAWACAQAwEDEOMAwGA1UEAxMFZXRjZDAwggEiMA0GCSqGSIb3DQEBAQUA
-A4IBDwAwggEKAoIBAQDAzusV9QNfQrCiJ2nuH2Fol0Letim2L04lO1FnOcRZSMhb
-h42WFhRmV8UNf2RtFlMg+VlIdtjUq1pZO8+foNEuJ+Wv23wCtRJwO3xrqKZKF6R5
-jDND84+eQfuwJxw/DcLmJfdVs7ENjEWhDHnaHCE8+Dzh/oi1dfmk9m9ilPwHq1Dc
-MXhOx9nNnQNOoj3zJZZzqZk8ysFdeH4WNrDOWhu8AljQxIt6iTA6dnnmIidEwBVi
-RgFfSGzfvKVx/jAU3ZqoGyG57Zd8Hnz+1fNLBnAi74Lppl3pPaj2FP8beXL2bYWh
-cnGW8U6hGPG1IYZ2jczKJRtkChW+IB0zXuQTLH3BAgMBAAGgIzAhBgkqhkiG9w0B
-CQ4xFDASMBAGA1UdEQQJMAeCBWV0Y2QwMA0GCSqGSIb3DQEBCwUAA4IBAQAbgiK2
-UV27VhX5SxQP49IhEzfyzzOzaYPArkDrTvhiKUeQHDfiVa5C6KrhjqFdSxWim5sg
-345jb1fUjdkXQC2kSVW2MXIPUSqg+0XMorH21qfjr8w0+D3CjCEJaLFFaRX7jNAc
-hZlKaHF2268td6P11bK35z64ZcO6vuYfyXWig29gJNj7zADUX2UJAuIipyXWoWCp
-sEkX5c/ATClLxU2kJiU6QjMkrPivDxG3ihlcwuhxGjF+ABpgGTzcnyRO9KnGPPkD
-EBjfIUYl0J+Fp2dshDqQATJG+Fo11TobQ6swcSnIRwHHoiRxbNRV4SDKUwA4JvOB
-pAKINclelCs62UeW
------END CERTIFICATE REQUEST-----
diff --git a/pulsar-metadata/src/test/resources/ssl/cert/etcd0.pem
b/pulsar-metadata/src/test/resources/ssl/cert/etcd0.pem
deleted file mode 100644
index 0438501f59c..00000000000
--- a/pulsar-metadata/src/test/resources/ssl/cert/etcd0.pem
+++ /dev/null
@@ -1,20 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDQDCCAiigAwIBAgIUOtnvopLqgxSAOKGQHE0KC13nQOYwDQYJKoZIhvcNAQEL
-BQAwDTELMAkGA1UEAxMCQ0EwIBcNMjIwNDI5MDQyMjAwWhgPMjEyMjA0MDUwNDIy
-MDBaMBAxDjAMBgNVBAMTBWV0Y2QwMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
-CgKCAQEAwM7rFfUDX0Kwoidp7h9haJdC3rYpti9OJTtRZznEWUjIW4eNlhYUZlfF
-DX9kbRZTIPlZSHbY1KtaWTvPn6DRLiflr9t8ArUScDt8a6imShekeYwzQ/OPnkH7
-sCccPw3C5iX3VbOxDYxFoQx52hwhPPg84f6ItXX5pPZvYpT8B6tQ3DF4TsfZzZ0D
-TqI98yWWc6mZPMrBXXh+FjawzlobvAJY0MSLeokwOnZ55iInRMAVYkYBX0hs37yl
-cf4wFN2aqBshue2XfB58/tXzSwZwIu+C6aZd6T2o9hT/G3ly9m2FoXJxlvFOoRjx
-tSGGdo3MyiUbZAoVviAdM17kEyx9wQIDAQABo4GSMIGPMA4GA1UdDwEB/wQEAwIF
-oDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDAYDVR0TAQH/BAIwADAd
-BgNVHQ4EFgQUOcvtfMhXiC+ykG+GG+o6CqMLSKkwHwYDVR0jBBgwFoAUHSjKeto9
-GyIxoJunhUUSs+2qfv0wEAYDVR0RBAkwB4IFZXRjZDAwDQYJKoZIhvcNAQELBQAD
-ggEBAMHxcaHkHtz/COoNVrvZdNc4BkxV6nNTa+iK0q2lSkpDbyYMUcrIX/2okV53
-7iwhfMW+nt1VI0iTVyyxrZw8LVRwQr1iq2Jc11EVCmuvNCFLdOpXyG8KOiGEchtl
-jgI2iUDKlF/sYgPA/C4Pu9g7+Ulh1/OmFuvdnTeHNlezxv7QNgzR4tALXOkvfc7u
-jOoprMlYe7cFxdh6TZPn1Jsz2Yp3YqO7hUSPYDOgUk+1Zzk9umAa+J5uZ0oluPxV
-A+24DNKeDpQZ03Ca2qXWnilAZEql/j4zlDKKyT0dNxQ5P+LutM5weKvw+n7+hKnB
-KNw/2MngvEbsvqNIxgJV/l8JRv0=
------END CERTIFICATE-----
diff --git a/pulsar-metadata/src/test/resources/ssl/cert/etcd1-key.pem
b/pulsar-metadata/src/test/resources/ssl/cert/etcd1-key.pem
deleted file mode 100644
index d1e63e6d5f2..00000000000
--- a/pulsar-metadata/src/test/resources/ssl/cert/etcd1-key.pem
+++ /dev/null
@@ -1,27 +0,0 @@
------BEGIN RSA PRIVATE KEY-----
-MIIEpQIBAAKCAQEAofyM/cb4lXoWXHCkySXLqYFFt6MfTfHWVGn0gh0Yz7Yck0G8
-KuITwBbNV8dcTGNklU8CGIH9XKiG092ozA0NYLvORlBCmEdFxl6n/pnGArQqhK8a
-SwG3rvqz9/WaHqrRozUuSH01UR2WNZYK5V8+5z6EHIwqgGkh+qunaP9o+45hzD3z
-CNn/7Om9hRDYKXp94Gty5A9yiF+R9VzqpEgEfyLRelbaiWVxg5B/+fGUkGO0pXEk
-blnvFQMEHPkQUamL1Aow6uS7uucxR60ebLQeVthNYDsjRYrD5v9NmHdWTW0gEC7f
-41eMsPjsR9cm9jkgbct560b3+nm/DFeJyoce3wIDAQABAoIBABn0go7jQ8+HqW+U
-aQMF+FUnrokXLRvrJSGPfKsgiGo3zupVfRYN9YYw4SQwgHyI7IP0DezpXzRqmHf4
-K2TOrpcSYKHpmFIYEXkQj7B+6Thjr/BksjzUgJ8b8pxHkTNawY56Jfldfp6JtBjP
-+tz33vdkj/yXBPRgZB5rRL7RNfwgegwy3E+8a1FGPsiva3UJ2aGpYpZBxtmtDLDJ
-+QdNB9BtXxOI81E2pfiZ6VwKo9sjHHthuLKVT32FOrqSTUFO86CBopO1Qu/pdjYN
-nrXEXuzyX7x1oBK4W6xJbrQRRzY6CVzQ+9yi9TkGhHWUJywNTYTm+cIHAIWRneCj
-HLjwOCECgYEAyArbvDcC/T0krAZIGhbWmKFKZ1TFslPoKysNeJaV2YOzwaIiG94l
-AZeGh0lj5SQiEGyZ6CMxj4m9CdiJWPGnzLcRF7uhYZCR70LdQgMutVk+7Cmsl4cN
-CW7qiLQlimyl8iETFHE7gUG/HHGg9oKpQnIMXmvIx610Krapl7KepI8CgYEAz0x9
-h7fC5ZYDIomgr1ZCUN2jdvsOoUgkdNxVl+gmxKEnvfu/2lWu/WKYV/Zl81jgTpFh
-BYgg4x6f54ApzXi4wix4sbBgUpqQAeP0JGSR/zp3HHHvMbSVOEV+LrtQqw1WDFgG
-l9huWbC2keNo858p7RfXz64vEQ7UGrQZITdPKLECgYEAmTQ3tZ4sG+aH/3eQIOr8
-z0g3w4uZHUpFtUnztzcc7MmBEfsqRE2N6foyfconR4a0z/9cn/zUKCpFLRU5m3T4
-HkDWRmbc4evm2GdNLRFi5GDFX/lKxYIY6fCYjrnpRmqPbTEHe9B80jGYPCCKNkE7
-gDf4YRgLXWHqZgwfNp8GAOECgYEAp0XuqVwj/YSOJQlvSuzM+FnQdMrjJEuFd3Lv
-8nMXDWWJHymMx06KtNYhXiFqZPHbliqDYqZU+1AT8gceNDnsxGqEPcW4BA/Kkmvx
-7ofks1HnGWHqhG5WVqDk0CrATjalr7I8J70yVlddCt25K5TMjQ/HSkMgoaAYkS+w
-c3gg/RECgYEAleTU3cMFDdZN/DVLZtU2l052VcNOTWcYbzgVBIMwmcwe0F81LMdL
-TRs0z9x9hh7DxoMs2Iocc6xG/AiBsVFcDZxAdFiAUVbo8d+FLN7ON9YRlmLforwP
-OHucy3ixkvMD0bB8eR8FD+C0ddJrNObNnJEokzVnUirbXpAovKX7CAc=
------END RSA PRIVATE KEY-----
diff --git a/pulsar-metadata/src/test/resources/ssl/cert/etcd1.csr
b/pulsar-metadata/src/test/resources/ssl/cert/etcd1.csr
deleted file mode 100644
index 5db2530b897..00000000000
--- a/pulsar-metadata/src/test/resources/ssl/cert/etcd1.csr
+++ /dev/null
@@ -1,16 +0,0 @@
------BEGIN CERTIFICATE REQUEST-----
-MIICeDCCAWACAQAwEDEOMAwGA1UEAxMFZXRjZDEwggEiMA0GCSqGSIb3DQEBAQUA
-A4IBDwAwggEKAoIBAQCh/Iz9xviVehZccKTJJcupgUW3ox9N8dZUafSCHRjPthyT
-Qbwq4hPAFs1Xx1xMY2SVTwIYgf1cqIbT3ajMDQ1gu85GUEKYR0XGXqf+mcYCtCqE
-rxpLAbeu+rP39ZoeqtGjNS5IfTVRHZY1lgrlXz7nPoQcjCqAaSH6q6do/2j7jmHM
-PfMI2f/s6b2FENgpen3ga3LkD3KIX5H1XOqkSAR/ItF6VtqJZXGDkH/58ZSQY7Sl
-cSRuWe8VAwQc+RBRqYvUCjDq5Lu65zFHrR5stB5W2E1gOyNFisPm/02Yd1ZNbSAQ
-Lt/jV4yw+OxH1yb2OSBty3nrRvf6eb8MV4nKhx7fAgMBAAGgIzAhBgkqhkiG9w0B
-CQ4xFDASMBAGA1UdEQQJMAeCBWV0Y2QxMA0GCSqGSIb3DQEBCwUAA4IBAQAvNlV+
-KH3lD9B8vmfdbIUBcTxBJ7IISp+xK/SAEI9A69zjjvU/Yhcb6FY7tqeZ6QmmwgCl
-HNYFl5dK52nT/q1dXXf10Ea8xYdHIGy7fnye+LJiVUV1oC3sSUVKgX+YXibbqM0I
-DcnjXKJsNh04sbsOpYcIwNUwi1srfar1IXGi9fDjIqTbvJnig8rTEXCZ/JpNy2jO
-hGvKCF7zbBHM68uMSxfa1+Db0x1MB9MdjSN5R9o9IGbdpaich1wr8nA/sxmeI9Po
-isFZbOACgQ1fwLRRS/3s2IP+i/Ihcfj0aQTfKS1U/IY8g3y5HRHDlCTg3QstdNLS
-J9ZCCRYDUvfBFyUX
------END CERTIFICATE REQUEST-----
diff --git a/pulsar-metadata/src/test/resources/ssl/cert/etcd1.pem
b/pulsar-metadata/src/test/resources/ssl/cert/etcd1.pem
deleted file mode 100644
index a5628efc640..00000000000
--- a/pulsar-metadata/src/test/resources/ssl/cert/etcd1.pem
+++ /dev/null
@@ -1,20 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDQDCCAiigAwIBAgIUVC1zhJiWmsQoNAvoIxgtCuOvESAwDQYJKoZIhvcNAQEL
-BQAwDTELMAkGA1UEAxMCQ0EwIBcNMjIwNDI5MDQyMjAwWhgPMjEyMjA0MDUwNDIy
-MDBaMBAxDjAMBgNVBAMTBWV0Y2QxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
-CgKCAQEAofyM/cb4lXoWXHCkySXLqYFFt6MfTfHWVGn0gh0Yz7Yck0G8KuITwBbN
-V8dcTGNklU8CGIH9XKiG092ozA0NYLvORlBCmEdFxl6n/pnGArQqhK8aSwG3rvqz
-9/WaHqrRozUuSH01UR2WNZYK5V8+5z6EHIwqgGkh+qunaP9o+45hzD3zCNn/7Om9
-hRDYKXp94Gty5A9yiF+R9VzqpEgEfyLRelbaiWVxg5B/+fGUkGO0pXEkblnvFQME
-HPkQUamL1Aow6uS7uucxR60ebLQeVthNYDsjRYrD5v9NmHdWTW0gEC7f41eMsPjs
-R9cm9jkgbct560b3+nm/DFeJyoce3wIDAQABo4GSMIGPMA4GA1UdDwEB/wQEAwIF
-oDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDAYDVR0TAQH/BAIwADAd
-BgNVHQ4EFgQU8EEBqp4josNuFliczxhJqNMBFcIwHwYDVR0jBBgwFoAUHSjKeto9
-GyIxoJunhUUSs+2qfv0wEAYDVR0RBAkwB4IFZXRjZDEwDQYJKoZIhvcNAQELBQAD
-ggEBALOI1S/C3hq1wxU1izFkyZ0RmRaKMyk9tVqvtcCUMAMMDN0RrDceGqoigx/D
-AdlaqnnO+2CeMKBqZLcPajUsoVErl0T36MLliu9zQY2IrwzP7gaMi/VAYrNRM8JU
-JckqSa4galNUuOKWUWIaIOUDk3NkzrZ+t8F8l32Nu46IzfmfrQB08upibZtbvnZl
-0TtLtpeoMiPkCCI4iyCTSVynODpJ/XZjNge1Ha/5Z1rFfUA3go9W3TSn4DJZ9+Bt
-AottVPQhcLPoGChsir+kVrtc4lLfK97XUUytHnePF2bqw+MuS+q/WB8V9sjduEV8
-vkDcnwa8idv0FUtCUfjMNHqaAbM=
------END CERTIFICATE-----
diff --git a/pulsar-metadata/src/test/resources/ssl/cert/etcd2-key.pem
b/pulsar-metadata/src/test/resources/ssl/cert/etcd2-key.pem
deleted file mode 100644
index df46c27684b..00000000000
--- a/pulsar-metadata/src/test/resources/ssl/cert/etcd2-key.pem
+++ /dev/null
@@ -1,27 +0,0 @@
------BEGIN RSA PRIVATE KEY-----
-MIIEpAIBAAKCAQEAzib8SHTPm4snGgIX5MA6s/w4Cd86GssmFmAv+ur0T8a8ldxI
-aMJTEeeKHdrqsEdU/zBM3WZ7/WqPJ72xEy20rwNQa5OhT075NKrY/J/Lw0SGUAD8
-YH4ukZ6ZFBwCXJ072HpESTU1Mz7hZVOXt2uDul7RqoEyx6miSQ8uZH1XS7/Y+2Mv
-5Ig7D4gpUBJNRhj7INCASIf5T6GsnzLRj+xsw4bL5pYF6GzWLczVDpij24qJyfaq
-6aVeux3et2JHTuDuuVEapSXJ8HFTFmqADcLtpg3T2tn+IZkxqyxqcxFdPDc5C9Sb
-YfYL7RsvcETYZpSLpxDNqJ/X1aAicZ6V9FLfrQIDAQABAoIBAQCgvU0gwdPOmCWY
-5eDzf99Fz3dyWxfXJGdCMyW2I9TzDyakQupCpKJY54yN0tADOttPTr3gM7Sh16Bf
-gEy9g3nKrG7cMnQofo9ZPY2LDJ24V4nSf7JJGpn8+Qiq4VwGEqNDG7J60n30wybD
-9vXpEm/XtW8N30dU3zOme6vUttaGPFxbeS+Zu2J6tbY696iY+NiPMRFsmHXNnqce
-JxZbd7FdOd2gQH3yIzVgXJFaDZL4qCwuN87yLRqIP6DS54bDcp6r/x4bAhy7fGC4
-wJTzcsEJWfSM3djaK/RyQtWF4IyxmXfRIhCYxoewNcS5/qEVNwpAVmPhmW6Yq9wT
-UpjTShkRAoGBANA03zTxDxbqWeTHn6sER38bVrzN44Uf7yDim3By6qpfW57ts0x8
-JPgvkHS2bnjqbBueDEdBTduFO32GGvsPu2Y/d3OSrB9hyw4Y1i7JfPMUGRWPTLAH
-ttIJP/v2Pi7RSpgUWOI3c/3BvbFTYxo0rTk8XlFLCy4wMX6Y6Sk6RXwPAoGBAP15
-Za+MmOwV1G1zE5xDIjbn/Wrq88v8xpTPdQebEBVJ4ZPh80QAH6vMFpLuGloK7v5X
-VyfpNVJ9EpGDozqjLNEVr4UTPFPmZTONA1NkBE7f0CmSDsT0AZn5stcWnWxoct0m
-ueVl8tAx1J7gxIKt8fxFiptYmrvKiElQVDbP4VyDAoGAIyZJ6G4p1fyKYI0y73Qx
-fcvnwMgheQADJtIa28kKxOiEVzhZ5LewphWhlZKW4+LvjVoJSJ5FvqGngXF6bJgj
-Uwez6tcAJ+wik6atwghSB9eExJcEo1MqEhttqePQa6b5qOMGfmpOMrDajW0+ddYe
-yGLgqWi54npQYMb/1e34fRECgYBH60D53VeqbMs4PtWKmdXEZHCX/JAuCcvCf1aC
-UPHwSGUz04F1gt95nE+vYtWhRMbo7ZkyHs5dWFWDailPQus9a/zAMmQEnjOKu/D8
-oT1Dr+ddVC7SnTUzHhErTCRglQY6T3mhaBrMDcd5SOcY+QfW/1hDmZFVxTKEMsGi
-R7t2xwKBgQC9mvqJgJ1p+1HtI9mWMPQTV6l1h9+S7O0wxWHvDUR6MGiKq/BeWvWR
-wH7gMfiR7zQKPLLFpEkO3e347ctVRAEy8vAZsaSoZZplJBTmHQqZAWvZtEOLJ73I
-j1rT7LWXJZXlfNyhVyVy3sOzLuzGK8i6j3uCDG8cTqXLcIrmfKorbQ==
------END RSA PRIVATE KEY-----
diff --git a/pulsar-metadata/src/test/resources/ssl/cert/etcd2.csr
b/pulsar-metadata/src/test/resources/ssl/cert/etcd2.csr
deleted file mode 100644
index 05d0caed7c3..00000000000
--- a/pulsar-metadata/src/test/resources/ssl/cert/etcd2.csr
+++ /dev/null
@@ -1,16 +0,0 @@
------BEGIN CERTIFICATE REQUEST-----
-MIICeDCCAWACAQAwEDEOMAwGA1UEAxMFZXRjZDIwggEiMA0GCSqGSIb3DQEBAQUA
-A4IBDwAwggEKAoIBAQDOJvxIdM+biycaAhfkwDqz/DgJ3zoayyYWYC/66vRPxryV
-3EhowlMR54od2uqwR1T/MEzdZnv9ao8nvbETLbSvA1Brk6FPTvk0qtj8n8vDRIZQ
-APxgfi6RnpkUHAJcnTvYekRJNTUzPuFlU5e3a4O6XtGqgTLHqaJJDy5kfVdLv9j7
-Yy/kiDsPiClQEk1GGPsg0IBIh/lPoayfMtGP7GzDhsvmlgXobNYtzNUOmKPbionJ
-9qrppV67Hd63YkdO4O65URqlJcnwcVMWaoANwu2mDdPa2f4hmTGrLGpzEV08NzkL
-1Jth9gvtGy9wRNhmlIunEM2on9fVoCJxnpX0Ut+tAgMBAAGgIzAhBgkqhkiG9w0B
-CQ4xFDASMBAGA1UdEQQJMAeCBWV0Y2QyMA0GCSqGSIb3DQEBCwUAA4IBAQBhSO0B
-82APD+vZYTSRKVUmMrIDxi0ODS9wWOZ4aAgspOHaPcMiPfzdZ6A2PF3Jr0FHyVRy
-iQjBXTNqrn8LHy5PX2Ulv+SaSxag70hNTF5titIxx8dEYKGQdXRDL1EvIvaD+uQQ
-EsJPwMz32HYOCpqEb6K71L5TTzx1DT0gr4g6UQcYUPJvFQ63+Nq8oe+MxGg3/RBE
-XCUTKYPDb2lh3d6A9EFxqsP3A1RMRwn87jLLELucCAe12EmGaahiR/i1vPdyhcIB
-hg8IAy9o9fJ1yUaYQwhd370DTx2zMkHsHhMO48fNcCnn2LiNwD6equllf0/dAt0z
-Gj6OEmb+imvdHODf
------END CERTIFICATE REQUEST-----
diff --git a/pulsar-metadata/src/test/resources/ssl/cert/etcd2.pem
b/pulsar-metadata/src/test/resources/ssl/cert/etcd2.pem
deleted file mode 100644
index ba1178f59fc..00000000000
--- a/pulsar-metadata/src/test/resources/ssl/cert/etcd2.pem
+++ /dev/null
@@ -1,20 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDQDCCAiigAwIBAgIUPsu/hXrFHnwO+QepFNnnRyqrOhYwDQYJKoZIhvcNAQEL
-BQAwDTELMAkGA1UEAxMCQ0EwIBcNMjIwNDI5MDQyMjAwWhgPMjEyMjA0MDUwNDIy
-MDBaMBAxDjAMBgNVBAMTBWV0Y2QyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
-CgKCAQEAzib8SHTPm4snGgIX5MA6s/w4Cd86GssmFmAv+ur0T8a8ldxIaMJTEeeK
-HdrqsEdU/zBM3WZ7/WqPJ72xEy20rwNQa5OhT075NKrY/J/Lw0SGUAD8YH4ukZ6Z
-FBwCXJ072HpESTU1Mz7hZVOXt2uDul7RqoEyx6miSQ8uZH1XS7/Y+2Mv5Ig7D4gp
-UBJNRhj7INCASIf5T6GsnzLRj+xsw4bL5pYF6GzWLczVDpij24qJyfaq6aVeux3e
-t2JHTuDuuVEapSXJ8HFTFmqADcLtpg3T2tn+IZkxqyxqcxFdPDc5C9SbYfYL7Rsv
-cETYZpSLpxDNqJ/X1aAicZ6V9FLfrQIDAQABo4GSMIGPMA4GA1UdDwEB/wQEAwIF
-oDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDAYDVR0TAQH/BAIwADAd
-BgNVHQ4EFgQUyK4bh1Bldq10Vtc8h9k4WJFl9tEwHwYDVR0jBBgwFoAUHSjKeto9
-GyIxoJunhUUSs+2qfv0wEAYDVR0RBAkwB4IFZXRjZDIwDQYJKoZIhvcNAQELBQAD
-ggEBAJn8bt+9OZE2T87m6/fUcsp49XscYMM3TPn6mCaCHlsn2Ljh8yepMVtmB5PN
-cix7lQjFDld3uMG/YGj8pCJHm7sarI35ydKr/Stx2FaE+MdIL4FAtEgOn2mXbnEl
-7fsGRDnSVg4n83SuyXGpEAitwidHsIG8EGcbTz5gIYUrG/osxnkSQ4uf143+iIex
-TJyi9Eb0iIoXTtVDpXAXPtHZT7AJH2At0UQCrvBLgSsR+dkBHg0YYU+qCl6ylioZ
-i2TJ0VLVrCIYyYz7CqhmM0aIiPEmBr0wJM2SM976O4g6vaI147qMpOXSbxTFsmoF
-vvysiWAcRaAA7NaKl6/fPQOFeNM=
------END CERTIFICATE-----
diff --git a/pulsar-metadata/src/test/resources/ssl/cert/server-key.pem
b/pulsar-metadata/src/test/resources/ssl/cert/server-key.pem
deleted file mode 100644
index c10e1944c70..00000000000
--- a/pulsar-metadata/src/test/resources/ssl/cert/server-key.pem
+++ /dev/null
@@ -1,27 +0,0 @@
------BEGIN RSA PRIVATE KEY-----
-MIIEpQIBAAKCAQEArBH548+4tHYbuMxc09Ws+Ao+SZ/cTJlIBjn0H5q4Y9HoRIIf
-wI9Np2xuQ16R6gklijECdtQ/8HBvkoMSVycaQnu6ZiGN1kWVD+yp+dWP8jm+qdQQ
-AUrlwXL7Sd4t3zsy9wo1eC+0od1hzsqojzE175mVszej9WJQLs/Gn8iv068UKaUZ
-UqH7ZLe2hHuntkFOEFYSv13Ydf9QMbhRt0/FbcrWF5YV8aQQ6pk4F+390PUVoLZY
-592PJQzZy+qqoKtP0xNld4aLrW8uZ2dF82B72NmhnIs3+GmbqihJXpCbus1+F8px
-xUQXkDQnff3Y/e4fkkm27+xU/O38SiNp9zhgDQIDAQABAoIBAD4q6Hv0Sql4mp9z
-xn4Kj0m2ebaj+TX7k1gcjCT3A3OdHSvTT6GEpOu+c0AH5PQHhfadqmRAXzGBje4D
-SRcP2571kOzhZptp3Gc6fFb1X+KGFmrJYVb2NnhkEIIpsa0beFhk6diYc8yfbX0H
-H0tM3k3I0ZtEmQpJEOs4ymxkV5JE8S82kt2EjrdGBO7jAUeo9trus8pXjVwQFaFM
-7dKvCE1X5mZmnkFLgw6ZuZCERBqP2MYcQOELUXylCTrcXOmmDhRt+xhSa99N26We
-TW58oYrnvi5P6sA9seoCSXsoG4miFBAPBQgz91Y9rmbcF5t0+IYwtV0ibIoXQs+c
-COYQ+gkCgYEAxPzM6e3JO2o/8dD64YtoTYVE01CovTkuZVEhsrwe3+ZdtKHWWoC+
-IVYwDskjJV3DjuTC35q5PucocjJOTEKy6GTz22MVAwG2HnxJ0I/A9c1X2t8uYT1M
-Qj6/xqQaCEL8jbWSTGsDdE1F+4rTpa3w939ztymZNb0DLbZJ1k4JhlsCgYEA3549
-jhT/Xer6PfSnt1OVZtLA/s9vrT5FV2l6+V8VA2iWzUbQqAChu1CMRqt46FWR4zfX
-oj37T0TkfhbsUB354JpMm5dxjas09EoQbgzegyyOJ6I+7AzIFhvliv6aZgo7kUhC
-bUfRipvFJSHz4JYFX6eoI/7k2JQkiCP7kDi+D7cCgYEAsHF34jkZPFzpNeJoNco2
-/OjYQydGXWdwhVPsiToztX2UhY1IgPw8UYPvu+6xynB4D/AcFUlzkEJhWhhxRaGg
-usRiISpY0b6gsCHHxEZfIkxx2xx5YKQVQGkQQg8POkM2EICIsGZSS8RDYRJyjT6G
-TkodDfz2vMm2pSVYcdqocW0CgYEA11HmkaY0UrnNJdUrnYIVLQIopfMV5Ko+WLIP
-oIlmkXanJphWmD6rfNNNj0rTTFwA8to1f1rRXv3GSodGGssSbawFshg8Vh6SCdw7
-P8ySgZpoc09t6RtRmsBX4ePQxgp6WyVKGTH7Wc0uItgznYC3QekNJUPuFYFoP9Lu
-C2wnzrcCgYEAmTeYA2+ypIXy77r7KLnh1ikPVrHYACgMSWHe3mj+T5A1201goflv
-GW2C+nFrylQRWqJhm51VGmXvxXQH05AjAFctYcYGmJXWn5d+sAf2rwqSlRDuemOP
-cQKFpOCr8zchby9HNKfaeip0Nrz+WheFG1d/2GgX3CppayTE1vYEkxY=
------END RSA PRIVATE KEY-----
diff --git a/pulsar-metadata/src/test/resources/ssl/cert/server.csr
b/pulsar-metadata/src/test/resources/ssl/cert/server.csr
deleted file mode 100644
index da80648b35c..00000000000
--- a/pulsar-metadata/src/test/resources/ssl/cert/server.csr
+++ /dev/null
@@ -1,16 +0,0 @@
------BEGIN CERTIFICATE REQUEST-----
-MIICfDCCAWQCAQAwETEPMA0GA1UEAxMGc2VydmVyMIIBIjANBgkqhkiG9w0BAQEF
-AAOCAQ8AMIIBCgKCAQEArBH548+4tHYbuMxc09Ws+Ao+SZ/cTJlIBjn0H5q4Y9Ho
-RIIfwI9Np2xuQ16R6gklijECdtQ/8HBvkoMSVycaQnu6ZiGN1kWVD+yp+dWP8jm+
-qdQQAUrlwXL7Sd4t3zsy9wo1eC+0od1hzsqojzE175mVszej9WJQLs/Gn8iv068U
-KaUZUqH7ZLe2hHuntkFOEFYSv13Ydf9QMbhRt0/FbcrWF5YV8aQQ6pk4F+390PUV
-oLZY592PJQzZy+qqoKtP0xNld4aLrW8uZ2dF82B72NmhnIs3+GmbqihJXpCbus1+
-F8pxxUQXkDQnff3Y/e4fkkm27+xU/O38SiNp9zhgDQIDAQABoCYwJAYJKoZIhvcN
-AQkOMRcwFTATBgNVHREEDDAKgghldGNkLXNzbDANBgkqhkiG9w0BAQsFAAOCAQEA
-BdrViUC7OEOnhq7eVICszhRxaF7UGx4fMJqNMZL5z5r2dq3MJsfoOTvqyWFhy5rV
-4aiHShan6Ip+O//yibk/U1jcO8pQt2e+NA/5BYWf4hFC53Z+jF23sxW7zvieMqiC
-19aXn1YHJe6mmosBj0Y8sic+aXOfo0D1JTUk5tCKPCrHsc7RqOgcHWBCBvFL7uWE
-toksP76YyP9hfLIZSWtaeQE/nQxD9XtUcHOE+HrUmy0rsQ/Ojxt0zSKVYYHGVRWi
-hVtevu5uJJv/dSCmd1B3D+xjWkwwrNjl44CPHnv6/0R9ngc2Hl71qQJDWqQdrJXn
-kwTL0NSke2C/57zA9c2P5A==
------END CERTIFICATE REQUEST-----
diff --git a/pulsar-metadata/src/test/resources/ssl/cert/server.pem
b/pulsar-metadata/src/test/resources/ssl/cert/server.pem
deleted file mode 100644
index a7a088ab53b..00000000000
--- a/pulsar-metadata/src/test/resources/ssl/cert/server.pem
+++ /dev/null
@@ -1,20 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDRDCCAiygAwIBAgIUKj+0Z9SYp0apXYQMnIaGrABH2CkwDQYJKoZIhvcNAQEL
-BQAwDTELMAkGA1UEAxMCQ0EwIBcNMjIwNDI5MDQyMjAwWhgPMjEyMjA0MDUwNDIy
-MDBaMBExDzANBgNVBAMTBnNlcnZlcjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
-AQoCggEBAKwR+ePPuLR2G7jMXNPVrPgKPkmf3EyZSAY59B+auGPR6ESCH8CPTads
-bkNekeoJJYoxAnbUP/Bwb5KDElcnGkJ7umYhjdZFlQ/sqfnVj/I5vqnUEAFK5cFy
-+0neLd87MvcKNXgvtKHdYc7KqI8xNe+ZlbM3o/ViUC7Pxp/Ir9OvFCmlGVKh+2S3
-toR7p7ZBThBWEr9d2HX/UDG4UbdPxW3K1heWFfGkEOqZOBft/dD1FaC2WOfdjyUM
-2cvqqqCrT9MTZXeGi61vLmdnRfNge9jZoZyLN/hpm6ooSV6Qm7rNfhfKccVEF5A0
-J3392P3uH5JJtu/sVPzt/Eojafc4YA0CAwEAAaOBlTCBkjAOBgNVHQ8BAf8EBAMC
-BaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQCMAAw
-HQYDVR0OBBYEFLbqyodNVvHtcBa31enG3uOahaqsMB8GA1UdIwQYMBaAFB0oynra
-PRsiMaCbp4VFErPtqn79MBMGA1UdEQQMMAqCCGV0Y2Qtc3NsMA0GCSqGSIb3DQEB
-CwUAA4IBAQBooiAWyAQrplByLHpZlXkJ1Gz4KFCztXYEpAThuZtT/pXgfRZCIwpz
-2lcygCNWlqKbwqc5eomm0NdfYcDu0eiExWBfiVhzXJDWKbus3pzR6tpinKexmNU9
-3rQ3DNiaIOTUf6494mX2qKTATce0uWBRiVAzSi/Ng7EF/xTif4pRcKdY62bD0/1J
-Jwu0dUE4HctOAiqX8Iq9gO4m5EKtXs0Z6r7gX3+UPIOPMX7hMAm3G6gIrVsyveeR
-8UrDHx+rdtSY8y0I3jKbGDF9hLNflsbtmoGoK6jzbU2edqhHfx13QXsBbqZMEHLX
-qXPO4Sx3hcVQ6neOVzMFDIQJOOonFqBa
------END CERTIFICATE-----
diff --git
a/pulsar-metadata/src/test/resources/ssl/generate-self-signed-certificates.sh
b/pulsar-metadata/src/test/resources/ssl/generate-self-signed-certificates.sh
deleted file mode 100755
index ca90ac5ca42..00000000000
---
a/pulsar-metadata/src/test/resources/ssl/generate-self-signed-certificates.sh
+++ /dev/null
@@ -1,70 +0,0 @@
-#!/usr/bin/env bash
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-
-# Copied from
https://github.com/etcd-io/jetcd/blob/ff7d698b046367d243a8d9d5cfe528f9bb0e933f/jetcd-core/src/test/resources/ssl/generate-self-signed-certificates.sh
-
-ROOT="$(cd "$(dirname $0)" && pwd)"
-
-CFSSL_HOME=${ROOT}/cfssl
-CERT_HOME=${ROOT}/cert
-
-mkdir -p $CFSSL_HOME
-mkdir -p $CERT_HOME
-
-OS="$(uname -s)"
-case $OS in
- "Linux")
- PLATFORM="linux_amd64"
- ;;
- "Darwin")
- PLATFORM="darwin_amd64"
- ;;
-esac
-
-curl -L
https://github.com/cloudflare/cfssl/releases/download/v1.6.1/cfssl_1.6.1_${PLATFORM}>
cfssl/cfssl
-curl -L
https://github.com/cloudflare/cfssl/releases/download/v1.6.1/cfssljson_1.6.1_${PLATFORM}>
cfssl/cfssljson
-chmod +x cfssl/{cfssl,cfssljson}
-
-cd $CERT_HOME
-
-echo '{"CN":"CA","key":{"algo":"rsa","size":2048}}' | $CFSSL_HOME/cfssl
gencert -initca - | $CFSSL_HOME/cfssljson -bare ca -
-echo '{"signing":{"default":{"expiry":"876000h","usages":["signing","key
encipherment","server auth","client auth"]}}}' > ca-config.json
-
-export ADDRESS=etcd-ssl
-export NAME=server
-echo '{"CN":"'$NAME'","hosts":[""],"key":{"algo":"rsa","size":2048}}' |
$CFSSL_HOME/cfssl gencert -config=ca-config.json -ca=ca.pem -ca-key=ca-key.pem
-hostname="$ADDRESS" - | $CFSSL_HOME/cfssljson -bare $NAME
-
-export ADDRESS=etcd0
-export NAME=etcd0
-echo '{"CN":"'$NAME'","hosts":[""],"key":{"algo":"rsa","size":2048}}' |
$CFSSL_HOME/cfssl gencert -config=ca-config.json -ca=ca.pem -ca-key=ca-key.pem
-hostname="$ADDRESS" - | $CFSSL_HOME/cfssljson -bare $NAME
-
-export ADDRESS=etcd1
-export NAME=etcd1
-echo '{"CN":"'$NAME'","hosts":[""],"key":{"algo":"rsa","size":2048}}' |
$CFSSL_HOME/cfssl gencert -config=ca-config.json -ca=ca.pem -ca-key=ca-key.pem
-hostname="$ADDRESS" - | $CFSSL_HOME/cfssljson -bare $NAME
-
-export ADDRESS=etcd2
-export NAME=etcd2
-echo '{"CN":"'$NAME'","hosts":[""],"key":{"algo":"rsa","size":2048}}' |
$CFSSL_HOME/cfssl gencert -config=ca-config.json -ca=ca.pem -ca-key=ca-key.pem
-hostname="$ADDRESS" - | $CFSSL_HOME/cfssljson -bare $NAME
-
-export ADDRESS=
-export NAME=client
-echo '{"CN":"'$NAME'","hosts":[""],"key":{"algo":"rsa","size":2048}}' |
$CFSSL_HOME/cfssl gencert -config=ca-config.json -ca=ca.pem -ca-key=ca-key.pem
-hostname="$ADDRESS" - | $CFSSL_HOME/cfssljson -bare $NAME
-
-openssl pkcs8 -topk8 -inform PEM -outform PEM -in client-key.pem -out
client-key-pk8.pem -nocrypt
diff --git a/src/owasp-dependency-check-suppressions.xml
b/src/owasp-dependency-check-suppressions.xml
index f302c251f96..977e6514cfd 100644
--- a/src/owasp-dependency-check-suppressions.xml
+++ b/src/owasp-dependency-check-suppressions.xml
@@ -241,22 +241,6 @@
<cve>CVE-2021-42550</cve>
</suppress>
- <suppress>
- <notes>Ignore etdc CVEs in jetcd</notes>
- <filePath regex="true">.*jetcd.*</filePath>
- <cpe>cpe:/a:etcd:etcd</cpe>
- </suppress>
- <suppress>
- <notes>Ignore etdc CVEs in jetcd</notes>
- <filePath regex="true">.*jetcd.*</filePath>
- <cpe>cpe:/a:redhat:etcd</cpe>
- </suppress>
- <suppress>
- <notes>Ignore grpc CVEs in jetcd</notes>
- <filePath regex="true">.*jetcd-grpc.*</filePath>
- <cpe>cpe:/a:grpc:grpc</cpe>
- </suppress>
-
<!-- bouncycastle misdetections -->
<suppress>
<notes><![CDATA[