You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pulsar.apache.org by pe...@apache.org on 2020/12/14 11:44:18 UTC

[pulsar] branch master updated: [Issue #8874]Fix the package upload failed issue (#8907)

This is an automated email from the ASF dual-hosted git repository.

penghui 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 5c04a90  [Issue #8874]Fix the package upload failed issue (#8907)
5c04a90 is described below

commit 5c04a9041754a3b0a5a9fa6e4c22cd4bdd0fe62a
Author: Yong Zhang <zh...@gmail.com>
AuthorDate: Mon Dec 14 19:43:49 2020 +0800

    [Issue #8874]Fix the package upload failed issue (#8907)
    
    ---
    
    Fixes #8874
    
    *Motivation*
    
    Fix the issue when uploading a package, it will show update metadata failed.
    
    *Modifications*
    
    - Fix the issue
    - Enable the integration tests for this
---
 conf/broker.conf                                   |  2 +-
 conf/standalone.conf                               |  2 +-
 .../core/impl/PackagesManagementImpl.java          |  6 ++---
 .../tests/integration/cli/PackagesCliTest.java     | 29 +++++++++++++++-------
 4 files changed, 24 insertions(+), 15 deletions(-)

diff --git a/conf/broker.conf b/conf/broker.conf
index bf0a49e..c3a6452 100644
--- a/conf/broker.conf
+++ b/conf/broker.conf
@@ -1190,6 +1190,6 @@ packagesManagementStorageProvider=org.apache.pulsar.packages.management.storage.
 packagesReplicas=1
 
 # The bookkeeper ledger root path
-packagesManagementLedgerRootPath=/ledger
+packagesManagementLedgerRootPath=/ledgers
 
 ### --- Packages management service configuration variables (end) --- ###
diff --git a/conf/standalone.conf b/conf/standalone.conf
index 7df5ada..30e5688 100644
--- a/conf/standalone.conf
+++ b/conf/standalone.conf
@@ -910,6 +910,6 @@ packagesManagementStorageProvider=org.apache.pulsar.packages.management.storage.
 packagesReplicas=1
 
 # The bookkeeper ledger root path
-packagesManagementLedgerRootPath=/ledger
+packagesManagementLedgerRootPath=/ledgers
 
 ### --- Packages management service configuration variables (end) --- ###
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 9bbeccb..cbc6f27 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
@@ -134,10 +134,8 @@ public class PackagesManagementImpl implements PackagesManagement {
         return CompletableFuture.allOf(
             checkMetadataExistsAndThrowException(packageName),
             checkPackageExistsAndThrowException(packageName)
-        ).thenCompose(ignore -> CompletableFuture.allOf(
-            writeMeta(packageName, metadata),
-            storage.writeAsync(packagePath(packageName), inputStream))
-        );
+        ).thenCompose(ignore -> writeMeta(packageName, metadata))
+            .thenCompose(ignore -> storage.writeAsync(packagePath(packageName), inputStream));
     }
 
     @Override
diff --git a/tests/integration/src/test/java/org/apache/pulsar/tests/integration/cli/PackagesCliTest.java b/tests/integration/src/test/java/org/apache/pulsar/tests/integration/cli/PackagesCliTest.java
index 3792a12..89d8d98 100644
--- a/tests/integration/src/test/java/org/apache/pulsar/tests/integration/cli/PackagesCliTest.java
+++ b/tests/integration/src/test/java/org/apache/pulsar/tests/integration/cli/PackagesCliTest.java
@@ -18,6 +18,7 @@
  */
 package org.apache.pulsar.tests.integration.cli;
 
+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;
@@ -60,18 +61,17 @@ public class PackagesCliTest {
     private Map<String, String> getPackagesManagementServiceEnvs() {
         Map<String, String> envs = new HashMap<>();
         envs.put("enablePackagesManagement", "true");
+        envs.put("packagesManagementLedgerRootPath", "/ledgers");
         return envs;
     }
 
-    @Test(timeOut = 60000 * 10)
+    @Test(timeOut = 60000 * 5)
     public void testPackagesOperationsWithoutUploadingPackages() throws Exception {
         ContainerExecResult result = runPackagesCommand("list", "--type", "function", "public/default");
         assertEquals(result.getExitCode(), 0);
-        assertTrue(result.getStdout().isEmpty());
 
         result = runPackagesCommand("list-versions", "function://public/default/test");
         assertEquals(result.getExitCode(), 0);
-        assertTrue(result.getStdout().isEmpty());
 
         try {
             result = runPackagesCommand("download", "function://public/default/test@v1", "--path", "test-admin");
@@ -81,14 +81,24 @@ public class PackagesCliTest {
         }
     }
 
-    // TODO: the upload command has some problem when uploading packages, enable this tests when issue
-    // https://github.com/apache/pulsar/issues/8874 is fixed.
+    @Test(timeOut = 60000 * 8)
     public void testPackagesOperationsWithUploadingPackages() throws Exception {
         String testPackageName = "function://public/default/test@v1";
         ContainerExecResult result = runPackagesCommand("upload", "--description", "a test package",
             "--path", PulsarCluster.ADMIN_SCRIPT, testPackageName);
         assertEquals(result.getExitCode(), 0);
 
+        BrokerContainer container = pulsarCluster.getBroker(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);
+
         result = runPackagesCommand("get-metadata", testPackageName);
         assertEquals(result.getExitCode(), 0);
         assertFalse(result.getStdout().isEmpty());
@@ -97,15 +107,16 @@ public class PackagesCliTest {
         result = runPackagesCommand("list", "--type", "function", "public/default");
         assertEquals(result.getExitCode(), 0);
         assertFalse(result.getStdout().isEmpty());
-        assertTrue(result.getStdout().contains(testPackageName));
+        assertTrue(result.getStdout().contains("test"));
 
-        result = runPackagesCommand("list-versions", "--type", "function://public/default/test");
+        result = runPackagesCommand("list-versions", "function://public/default/test");
         assertEquals(result.getExitCode(), 0);
         assertFalse(result.getStdout().isEmpty());
         assertTrue(result.getStdout().contains("v1"));
 
         String contact = "test@apache.org";
-        result = runPackagesCommand("update-metadata", "--contact", contact, "-PpropertyA=A", testPackageName);
+        result = runPackagesCommand("update-metadata", "--description", "a test package",
+            "--contact", contact, "-PpropertyA=A", testPackageName);
         assertEquals(result.getExitCode(), 0);
 
         result = runPackagesCommand("get-metadata", testPackageName);
@@ -118,7 +129,7 @@ public class PackagesCliTest {
         result = runPackagesCommand("delete", testPackageName);
         assertEquals(result.getExitCode(), 0);
 
-        result = runPackagesCommand("list", "--type", "functions", "public/default");
+        result = runPackagesCommand("list-versions", "function://public/default/test");
         assertEquals(result.getExitCode(), 0);
         assertTrue(result.getStdout().isEmpty());
     }