This is an automated email from the ASF dual-hosted git repository.
sunfangbin 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 025e082 [Issue 13217][pulsar-package-management] Fix the filesystem
storage failure (#13218)
025e082 is described below
commit 025e0825769b6297ac1f6302580e078f723a2aeb
Author: Fangbin Sun <[email protected]>
AuthorDate: Mon Dec 13 13:51:02 2021 +0800
[Issue 13217][pulsar-package-management] Fix the filesystem storage failure
(#13218)
* Fix the filesystem storage failure
* Add a integration test to cover this change
---
.../core/impl/PackagesManagementImpl.java | 5 +-
.../integration/cli/FileSystemPackagesCliTest.java | 132 +++++++++++++++++++++
2 files changed, 135 insertions(+), 2 deletions(-)
diff --git
a/pulsar-package-management/core/src/main/java/org/apache/pulsar/packages/management/core/impl/PackagesManagementImpl.java
b/pulsar-package-management/core/src/main/java/org/apache/pulsar/packages/management/core/impl/PackagesManagementImpl.java
index be6d356..ca1adaa 100644
---
a/pulsar-package-management/core/src/main/java/org/apache/pulsar/packages/management/core/impl/PackagesManagementImpl.java
+++
b/pulsar-package-management/core/src/main/java/org/apache/pulsar/packages/management/core/impl/PackagesManagementImpl.java
@@ -143,7 +143,8 @@ public class PackagesManagementImpl implements
PackagesManagement {
public CompletableFuture<Void> delete(PackageName packageName) {
return CompletableFuture.allOf(
storage.deleteAsync(metadataPath(packageName)),
- storage.deleteAsync(packagePath(packageName)));
+ storage.deleteAsync(packagePath(packageName)),
+ storage.deleteAsync(packageName.toRestPath()));
}
@Override
@@ -248,7 +249,7 @@ public class PackagesManagementImpl implements
PackagesManagement {
}
private String packagePath(PackageName packageName) {
- return packageName.toRestPath();
+ return packageName.toRestPath() + "/data";
}
private String packageWithoutVersionPath(PackageName packageName) {
diff --git
a/tests/integration/src/test/java/org/apache/pulsar/tests/integration/cli/FileSystemPackagesCliTest.java
b/tests/integration/src/test/java/org/apache/pulsar/tests/integration/cli/FileSystemPackagesCliTest.java
new file mode 100644
index 0000000..a9aa38c
--- /dev/null
+++
b/tests/integration/src/test/java/org/apache/pulsar/tests/integration/cli/FileSystemPackagesCliTest.java
@@ -0,0 +1,132 @@
+/**
+ * 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.tests.integration.cli;
+
+import org.apache.pulsar.tests.TestRetrySupport;
+import org.apache.pulsar.tests.integration.containers.BrokerContainer;
+import org.apache.pulsar.tests.integration.docker.ContainerExecResult;
+import org.apache.pulsar.tests.integration.topologies.PulsarCluster;
+import org.apache.pulsar.tests.integration.topologies.PulsarClusterSpec;
+import org.testcontainers.shaded.org.apache.commons.lang.RandomStringUtils;
+import org.testng.annotations.AfterClass;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertFalse;
+import static org.testng.Assert.assertTrue;
+
+public class FileSystemPackagesCliTest extends TestRetrySupport {
+
+ private static final String clusterNamePrefix =
"file-system-packages-service";
+ private PulsarCluster pulsarCluster;
+
+ @BeforeClass(alwaysRun = true)
+ public final void setup() throws Exception {
+ incrementSetupNumber();
+ PulsarClusterSpec spec = PulsarClusterSpec.builder()
+ .clusterName(String.format("%s-%s", clusterNamePrefix,
RandomStringUtils.randomAlphabetic(6)))
+ .brokerEnvs(getPackagesManagementServiceEnvs())
+ .build();
+ pulsarCluster = PulsarCluster.forSpec(spec);
+ pulsarCluster.start();
+ }
+
+ @AfterClass(alwaysRun = true)
+ public final void cleanup() {
+ markCurrentSetupNumberCleaned();
+ if (pulsarCluster != null) {
+ pulsarCluster.stop();
+ pulsarCluster = null;
+ }
+ }
+
+ private Map<String, String> getPackagesManagementServiceEnvs() {
+ Map<String, String> envs = new HashMap<>();
+ envs.put("enablePackagesManagement", "true");
+ envs.put("packagesManagementStorageProvider",
+
"org.apache.pulsar.packages.management.storage.filesystem.FileSystemPackagesStorageProvider");
+ return envs;
+ }
+
+ @Test(timeOut = 60000 * 8)
+ public void
testPackagesOperationsWithUploadingPackagesUsingFileSystemStorageProvider()
throws Exception {
+ BrokerContainer container = pulsarCluster.getBroker(0);
+
+ String testPackageName = "function://public/default/test@v1";
+ String[] uploadCmd = new String[]{PulsarCluster.ADMIN_SCRIPT,
"packages", "upload", "--description",
+ "a test package", "--path", PulsarCluster.ADMIN_SCRIPT,
testPackageName};
+ ContainerExecResult result = container.execCmd(uploadCmd);
+ assertEquals(result.getExitCode(), 0);
+
+ String downloadFile = "tmp-file-" +
RandomStringUtils.randomAlphabetic(8);
+ String[] downloadCmd = new String[]{PulsarCluster.ADMIN_SCRIPT,
"packages", "download",
+ "--path", downloadFile, testPackageName};
+ result = container.execCmd(downloadCmd);
+ assertEquals(result.getExitCode(), 0);
+
+ String[] diffCmd = new String[]{"diff", PulsarCluster.ADMIN_SCRIPT,
downloadFile};
+ result = container.execCmd(diffCmd);
+ assertEquals(result.getExitCode(), 0);
+
+ String[] getMetadataCmd = new String[]{PulsarCluster.ADMIN_SCRIPT,
"packages", "get-metadata", testPackageName};
+ result = container.execCmd(getMetadataCmd);
+ assertEquals(result.getExitCode(), 0);
+ assertFalse(result.getStdout().isEmpty());
+ assertTrue(result.getStdout().contains("a test package"));
+
+ String[] listCmd = new String[]{PulsarCluster.ADMIN_SCRIPT,
"packages", "list", "--type", "function",
+ "public/default"};
+ result = container.execCmd(listCmd);
+ assertEquals(result.getExitCode(), 0);
+ assertFalse(result.getStdout().isEmpty());
+ assertTrue(result.getStdout().contains("test"));
+
+ String[] listVersionsCmd = new String[]{PulsarCluster.ADMIN_SCRIPT,
"packages", "list-versions",
+ "function://public/default/test"};
+ result = container.execCmd(listVersionsCmd);
+ assertEquals(result.getExitCode(), 0);
+ assertFalse(result.getStdout().isEmpty());
+ assertTrue(result.getStdout().contains("v1"));
+
+ String contact = "[email protected]";
+ String[] updateMetadataCmd = new String[]{PulsarCluster.ADMIN_SCRIPT,
"packages", "update-metadata",
+ "--description", "a test package", "--contact", contact,
"-PpropertyA=A", testPackageName};
+ result = container.execCmd(updateMetadataCmd);
+ assertEquals(result.getExitCode(), 0);
+
+ result = container.execCmd(getMetadataCmd);
+ assertEquals(result.getExitCode(), 0);
+ assertFalse(result.getStdout().isEmpty());
+ assertTrue(result.getStdout().contains("a test package"));
+ assertTrue(result.getStdout().contains(contact));
+ assertTrue(result.getStdout().contains("propertyA"));
+
+ String[] deleteCmd = new String[]{PulsarCluster.ADMIN_SCRIPT,
"packages", "delete", testPackageName};
+ result = container.execCmd(deleteCmd);
+ assertEquals(result.getExitCode(), 0);
+
+ result = container.execCmd(listVersionsCmd);
+ assertEquals(result.getExitCode(), 0);
+ result.assertNoStdout();
+ }
+}