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/incubator-pulsar.git


The following commit(s) were added to refs/heads/master by this push:
     new 488942e  Added option to create namespace on CLI passing list of 
clusters (#1579)
488942e is described below

commit 488942e71f1bc4cde9f2b8c35e57d98c5b6efef4
Author: Matteo Merli <mme...@apache.org>
AuthorDate: Wed Apr 18 14:31:39 2018 -0700

    Added option to create namespace on CLI passing list of clusters (#1579)
    
    * Added option to create namespace on CLI passing list of clusters
    
    * Fixed NamespaceCreateBundlesTest.testCreateNamespaceWithDefaultBundles
    
    * Fixed expected value in test
    
    * Use List instead of Set otherwise jcommander would get all param in a 
single string
    
    * Added mocked test
---
 .../apache/pulsar/broker/admin/v2/Namespaces.java  |  13 +-
 .../apache/pulsar/broker/admin/AdminApiTest.java   |  21 +--
 .../pulsar/broker/admin/v1/V1_AdminApiTest.java    |   1 +
 .../org/apache/pulsar/client/admin/Namespaces.java |  23 ++++
 .../client/admin/internal/NamespacesImpl.java      |  17 +++
 .../pulsar/admin/cli/PulsarAdminToolTest.java      |  56 +++++++-
 .../org/apache/pulsar/admin/cli/CmdNamespaces.java | 144 ++++++++++++---------
 .../pulsar/common/policies/data/Policies.java      |   2 +-
 8 files changed, 200 insertions(+), 77 deletions(-)

diff --git 
a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v2/Namespaces.java 
b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v2/Namespaces.java
index 7f28e0f..15ac532 100644
--- 
a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v2/Namespaces.java
+++ 
b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v2/Namespaces.java
@@ -644,14 +644,17 @@ public class Namespaces extends NamespacesBase {
     }
 
     private Policies getDefaultPolicesIfNull(Policies policies) {
-        if (policies != null) {
-            return policies;
+        if (policies == null) {
+            policies = new Policies();
         }
 
-        Policies defaultPolicies = new Policies();
         int defaultNumberOfBundles = 
config().getDefaultNumberOfNamespaceBundles();
-        defaultPolicies.bundles = getBundles(defaultNumberOfBundles);
-        return defaultPolicies;
+
+        if (policies.bundles == null) {
+            policies.bundles = getBundles(defaultNumberOfBundles);
+        }
+
+        return policies;
     }
 
     private static final Logger log = 
LoggerFactory.getLogger(Namespaces.class);
diff --git 
a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiTest.java 
b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiTest.java
index 7c24692..0afe36d 100644
--- 
a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiTest.java
+++ 
b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiTest.java
@@ -29,6 +29,13 @@ import static org.testng.Assert.assertNotNull;
 import static org.testng.Assert.assertTrue;
 import static org.testng.Assert.fail;
 
+import com.google.common.collect.BoundType;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import com.google.common.collect.Range;
+import com.google.common.collect.Sets;
+import com.google.common.hash.Hashing;
+
 import java.lang.reflect.Field;
 import java.net.URL;
 import java.util.ArrayList;
@@ -47,6 +54,8 @@ import java.util.concurrent.TimeUnit;
 import javax.ws.rs.client.InvocationCallback;
 import javax.ws.rs.client.WebTarget;
 
+import lombok.extern.slf4j.Slf4j;
+
 import org.apache.pulsar.broker.PulsarServerException;
 import org.apache.pulsar.broker.PulsarService;
 import org.apache.pulsar.broker.ServiceConfiguration;
@@ -94,8 +103,8 @@ import 
org.apache.pulsar.common.policies.data.PersistencePolicies;
 import org.apache.pulsar.common.policies.data.PersistentTopicInternalStats;
 import org.apache.pulsar.common.policies.data.PersistentTopicStats;
 import org.apache.pulsar.common.policies.data.Policies;
-import org.apache.pulsar.common.policies.data.TenantInfo;
 import org.apache.pulsar.common.policies.data.RetentionPolicies;
+import org.apache.pulsar.common.policies.data.TenantInfo;
 import org.apache.pulsar.common.util.Codec;
 import org.apache.pulsar.common.util.ObjectMapperFactory;
 import org.apache.pulsar.compaction.Compactor;
@@ -107,15 +116,6 @@ import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.DataProvider;
 import org.testng.annotations.Test;
 
-import com.google.common.collect.BoundType;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
-import com.google.common.collect.Range;
-import com.google.common.collect.Sets;
-import com.google.common.hash.Hashing;
-
-import lombok.extern.slf4j.Slf4j;
-
 @Slf4j
 public class AdminApiTest extends MockedPulsarServiceBaseTest {
 
@@ -624,6 +624,7 @@ public class AdminApiTest extends 
MockedPulsarServiceBaseTest {
 
         Policies policies = new Policies();
         policies.replication_clusters = Sets.newHashSet("test");
+        policies.bundles = Policies.defaultBundle();
         policies.auth_policies.namespace_auth.put("my-role", 
EnumSet.allOf(AuthAction.class));
 
         assertEquals(admin.namespaces().getPolicies("prop-xyz/ns1"), policies);
diff --git 
a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/v1/V1_AdminApiTest.java
 
b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/v1/V1_AdminApiTest.java
index 6895036..c7a26ff 100644
--- 
a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/v1/V1_AdminApiTest.java
+++ 
b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/v1/V1_AdminApiTest.java
@@ -624,6 +624,7 @@ public class V1_AdminApiTest extends 
MockedPulsarServiceBaseTest {
         admin.namespaces().grantPermissionOnNamespace("prop-xyz/use/ns1", 
"my-role", EnumSet.allOf(AuthAction.class));
 
         Policies policies = new Policies();
+        policies.bundles = Policies.defaultBundle();
         policies.auth_policies.namespace_auth.put("my-role", 
EnumSet.allOf(AuthAction.class));
 
         assertEquals(admin.namespaces().getPolicies("prop-xyz/use/ns1"), 
policies);
diff --git 
a/pulsar-client-admin/src/main/java/org/apache/pulsar/client/admin/Namespaces.java
 
b/pulsar-client-admin/src/main/java/org/apache/pulsar/client/admin/Namespaces.java
index 0f20d69..373c535 100644
--- 
a/pulsar-client-admin/src/main/java/org/apache/pulsar/client/admin/Namespaces.java
+++ 
b/pulsar-client-admin/src/main/java/org/apache/pulsar/client/admin/Namespaces.java
@@ -237,6 +237,29 @@ public interface Namespaces {
     void createNamespace(String namespace, Set<String> clusters) throws 
PulsarAdminException;
 
     /**
+     * Create a new namespace.
+     * <p>
+     * Creates a new namespace with the specified policies.
+     *
+     * @param namespace
+     *            Namespace name
+     * @param policies
+     *            Policies for the namespace
+     *
+     * @throws NotAuthorizedException
+     *             You don't have admin permission
+     * @throws NotFoundException
+     *             Tenant or cluster does not exist
+     * @throws ConflictException
+     *             Namespace already exists
+     * @throws PulsarAdminException
+     *             Unexpected error
+     *
+     * @since 2.0
+     */
+    void createNamespace(String namespace, Policies policies) throws 
PulsarAdminException;
+
+    /**
      * Delete an existing namespace.
      * <p>
      * The namespace needs to be empty.
diff --git 
a/pulsar-client-admin/src/main/java/org/apache/pulsar/client/admin/internal/NamespacesImpl.java
 
b/pulsar-client-admin/src/main/java/org/apache/pulsar/client/admin/internal/NamespacesImpl.java
index 404b95d..7c4fd04 100644
--- 
a/pulsar-client-admin/src/main/java/org/apache/pulsar/client/admin/internal/NamespacesImpl.java
+++ 
b/pulsar-client-admin/src/main/java/org/apache/pulsar/client/admin/internal/NamespacesImpl.java
@@ -18,6 +18,8 @@
  */
 package org.apache.pulsar.client.admin.internal;
 
+import static com.google.common.base.Preconditions.checkArgument;
+
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -127,6 +129,21 @@ public class NamespacesImpl extends BaseResource 
implements Namespaces {
     }
 
     @Override
+    public void createNamespace(String namespace, Policies policies) throws 
PulsarAdminException {
+        NamespaceName ns = NamespaceName.get(namespace);
+        checkArgument(ns.isV2(), "Create namespace with policies is only 
supported on newer namespaces");
+
+        try {
+            WebTarget path = namespacePath(ns);
+
+            // For V2 API we pass full Policy class instance
+            request(path).put(Entity.entity(policies, 
MediaType.APPLICATION_JSON), ErrorData.class);
+        } catch (Exception e) {
+            throw getApiException(e);
+        }
+    }
+
+    @Override
     public void createNamespace(String namespace, BundlesData bundlesData) 
throws PulsarAdminException {
         try {
             NamespaceName ns = NamespaceName.get(namespace);
diff --git 
a/pulsar-client-tools-test/src/test/java/org/apache/pulsar/admin/cli/PulsarAdminToolTest.java
 
b/pulsar-client-tools-test/src/test/java/org/apache/pulsar/admin/cli/PulsarAdminToolTest.java
index 25640ed..3bebaae 100644
--- 
a/pulsar-client-tools-test/src/test/java/org/apache/pulsar/admin/cli/PulsarAdminToolTest.java
+++ 
b/pulsar-client-tools-test/src/test/java/org/apache/pulsar/admin/cli/PulsarAdminToolTest.java
@@ -39,9 +39,11 @@ import org.apache.pulsar.client.api.MessageId;
 import org.apache.pulsar.common.policies.data.AuthAction;
 import org.apache.pulsar.common.policies.data.BacklogQuota;
 import org.apache.pulsar.common.policies.data.BacklogQuota.RetentionPolicy;
+import org.apache.pulsar.common.policies.data.BundlesData;
 import org.apache.pulsar.common.policies.data.ClusterData;
 import org.apache.pulsar.common.policies.data.FailureDomain;
 import org.apache.pulsar.common.policies.data.PersistencePolicies;
+import org.apache.pulsar.common.policies.data.Policies;
 import org.apache.pulsar.common.policies.data.ResourceQuota;
 import org.apache.pulsar.common.policies.data.RetentionPolicies;
 import org.apache.pulsar.common.policies.data.TenantInfo;
@@ -389,6 +391,58 @@ public class PulsarAdminToolTest {
     }
 
     @Test
+    void namespacesCreateV1() throws Exception {
+        PulsarAdmin admin = Mockito.mock(PulsarAdmin.class);
+        Namespaces mockNamespaces = mock(Namespaces.class);
+        when(admin.namespaces()).thenReturn(mockNamespaces);
+        CmdNamespaces namespaces = new CmdNamespaces(admin);
+
+        namespaces.run(split("create my-prop/my-cluster/my-namespace"));
+        
verify(mockNamespaces).createNamespace("my-prop/my-cluster/my-namespace");
+    }
+
+    @Test
+    void namespacesCreateV1WithBundlesAndClusters() throws Exception {
+        PulsarAdmin admin = Mockito.mock(PulsarAdmin.class);
+        Namespaces mockNamespaces = mock(Namespaces.class);
+        when(admin.namespaces()).thenReturn(mockNamespaces);
+        CmdNamespaces namespaces = new CmdNamespaces(admin);
+
+        namespaces.run(split("create my-prop/my-cluster/my-namespace --bundles 
5 --clusters a,b,c"));
+        
verify(mockNamespaces).createNamespace("my-prop/my-cluster/my-namespace", 5);
+        
verify(mockNamespaces).setNamespaceReplicationClusters("my-prop/my-cluster/my-namespace",
 Sets.newHashSet("a", "b", "c"));
+    }
+
+    @Test
+    void namespacesCreate() throws Exception {
+        PulsarAdmin admin = Mockito.mock(PulsarAdmin.class);
+        Namespaces mockNamespaces = mock(Namespaces.class);
+        when(admin.namespaces()).thenReturn(mockNamespaces);
+        CmdNamespaces namespaces = new CmdNamespaces(admin);
+
+        namespaces.run(split("create my-prop/my-namespace"));
+
+        Policies policies = new Policies();
+        policies.bundles = null;
+        verify(mockNamespaces).createNamespace("my-prop/my-namespace", 
policies);
+    }
+
+    @Test
+    void namespacesCreateWithBundlesAndClusters() throws Exception {
+        PulsarAdmin admin = Mockito.mock(PulsarAdmin.class);
+        Namespaces mockNamespaces = mock(Namespaces.class);
+        when(admin.namespaces()).thenReturn(mockNamespaces);
+        CmdNamespaces namespaces = new CmdNamespaces(admin);
+
+        namespaces.run(split("create my-prop/my-namespace --bundles 5 
--clusters a,b,c"));
+
+        Policies policies = new Policies();
+        policies.bundles = new BundlesData(5);
+        policies.replication_clusters = Sets.newHashSet("a", "b", "c");
+        verify(mockNamespaces).createNamespace("my-prop/my-namespace", 
policies);
+    }
+
+    @Test
     void resourceQuotas() throws Exception {
         PulsarAdmin admin = Mockito.mock(PulsarAdmin.class);
         ResourceQuotas mockResourceQuotas = mock(ResourceQuotas.class);
@@ -440,7 +494,7 @@ public class PulsarAdminToolTest {
         nsIsolationPoliciesCmd.run(split("broker use --broker my-broker"));
         verify(mockClusters).getBrokerWithNamespaceIsolationPolicy("use", 
"my-broker");
     }
-    
+
     @Test
     void persistentTopics() throws Exception {
         PulsarAdmin admin = Mockito.mock(PulsarAdmin.class);
diff --git 
a/pulsar-client-tools/src/main/java/org/apache/pulsar/admin/cli/CmdNamespaces.java
 
b/pulsar-client-tools/src/main/java/org/apache/pulsar/admin/cli/CmdNamespaces.java
index 6a2c8f2..d40db50 100644
--- 
a/pulsar-client-tools/src/main/java/org/apache/pulsar/admin/cli/CmdNamespaces.java
+++ 
b/pulsar-client-tools/src/main/java/org/apache/pulsar/admin/cli/CmdNamespaces.java
@@ -18,43 +18,47 @@
  */
 package org.apache.pulsar.admin.cli;
 
+import com.beust.jcommander.Parameter;
+import com.beust.jcommander.ParameterException;
+import com.beust.jcommander.Parameters;
+import com.beust.jcommander.converters.CommaParameterSplitter;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Sets;
+
 import java.io.IOException;
 import java.util.Arrays;
+import java.util.HashSet;
 import java.util.List;
 
 import org.apache.pulsar.admin.cli.utils.IOUtils;
 import org.apache.pulsar.client.admin.PulsarAdmin;
 import org.apache.pulsar.client.admin.PulsarAdminException;
+import org.apache.pulsar.common.naming.NamespaceName;
 import org.apache.pulsar.common.policies.data.BacklogQuota;
+import org.apache.pulsar.common.policies.data.BundlesData;
 import org.apache.pulsar.common.policies.data.DispatchRate;
 import org.apache.pulsar.common.policies.data.PersistencePolicies;
+import org.apache.pulsar.common.policies.data.Policies;
 import org.apache.pulsar.common.policies.data.RetentionPolicies;
 import org.apache.pulsar.common.policies.data.SubscriptionAuthMode;
 
-import com.beust.jcommander.Parameter;
-import com.beust.jcommander.ParameterException;
-import com.beust.jcommander.Parameters;
-import com.beust.jcommander.converters.CommaParameterSplitter;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Sets;
-
 @Parameters(commandDescription = "Operations about namespaces")
 public class CmdNamespaces extends CmdBase {
-    @Parameters(commandDescription = "Get the namespaces for a property")
+    @Parameters(commandDescription = "Get the namespaces for a tenant")
     private class GetNamespacesPerProperty extends CliCommand {
-        @Parameter(description = "property-name\n", required = true)
+        @Parameter(description = "tenant-name\n", required = true)
         private java.util.List<String> params;
 
         @Override
         void run() throws PulsarAdminException {
-            String property = getOneArgument(params);
-            print(admin.namespaces().getNamespaces(property));
+            String tenant = getOneArgument(params);
+            print(admin.namespaces().getNamespaces(tenant));
         }
     }
 
-    @Parameters(commandDescription = "Get the namespaces for a property in a 
cluster")
+    @Parameters(commandDescription = "Get the namespaces for a tenant in a 
cluster")
     private class GetNamespacesPerCluster extends CliCommand {
-        @Parameter(description = "property/cluster\n", required = true)
+        @Parameter(description = "tenant/cluster\n", required = true)
         private java.util.List<String> params;
 
         @Override
@@ -64,9 +68,9 @@ public class CmdNamespaces extends CmdBase {
         }
     }
 
-    @Parameters(commandDescription = "Get the topics for a namespace")
+    @Parameters(commandDescription = "Get the list of topics for a namespace")
     private class GetTopics extends CliCommand {
-        @Parameter(description = "property/cluster/namespace\n", required = 
true)
+        @Parameter(description = "tenant/namespace\n", required = true)
         private java.util.List<String> params;
 
         @Override
@@ -76,9 +80,9 @@ public class CmdNamespaces extends CmdBase {
         }
     }
 
-    @Parameters(commandDescription = "Get the policies of a namspace")
+    @Parameters(commandDescription = "Get the configuration policies of a 
namspace")
     private class GetPolicies extends CliCommand {
-        @Parameter(description = "property/cluster/namespace\n", required = 
true)
+        @Parameter(description = "tenant/namespace\n", required = true)
         private java.util.List<String> params;
 
         @Override
@@ -90,9 +94,12 @@ public class CmdNamespaces extends CmdBase {
 
     @Parameters(commandDescription = "Creates a new namespace")
     private class Create extends CliCommand {
-        @Parameter(description = "property/cluster/namespace\n", required = 
true)
+        @Parameter(description = "tenant/namespace\n", required = true)
         private java.util.List<String> params;
 
+        @Parameter(names = { "--clusters", "-c" }, description = "List of 
clusters this namespace will be assigned", required = false)
+        private java.util.List<String> clusters;
+
         @Parameter(names = { "--bundles", "-b" }, description = "number of 
bundles to activate", required = false)
         private int numBundles = 0;
 
@@ -105,17 +112,34 @@ public class CmdNamespaces extends CmdBase {
                 throw new ParameterException(
                         "Invalid number of bundles. Number of numbles has to 
be in the range of (0, 2^32].");
             }
-            if (numBundles == 0) {
-                admin.namespaces().createNamespace(namespace);
+
+            NamespaceName namespaceName = NamespaceName.get(namespace);
+            if (namespaceName.isV2()) {
+                Policies policies = new Policies();
+                policies.bundles = numBundles > 0 ? new 
BundlesData(numBundles) : null;
+
+                if (clusters != null) {
+                    policies.replication_clusters = new HashSet<>(clusters);
+                }
+
+                admin.namespaces().createNamespace(namespace, policies);
             } else {
-                admin.namespaces().createNamespace(namespace, numBundles);
+                if (numBundles == 0) {
+                    admin.namespaces().createNamespace(namespace);
+                } else {
+                    admin.namespaces().createNamespace(namespace, numBundles);
+                }
+
+                if (clusters != null && !clusters.isEmpty()) {
+                    
admin.namespaces().setNamespaceReplicationClusters(namespace, new 
HashSet<>(clusters));
+                }
             }
         }
     }
 
     @Parameters(commandDescription = "Deletes a namespace. The namespace needs 
to be empty")
     private class Delete extends CliCommand {
-        @Parameter(description = "property/cluster/namespace\n", required = 
true)
+        @Parameter(description = "tenant/namespace\n", required = true)
         private java.util.List<String> params;
 
         @Override
@@ -127,7 +151,7 @@ public class CmdNamespaces extends CmdBase {
 
     @Parameters(commandDescription = "Grant permissions on a namspace")
     private class GrantPermissions extends CliCommand {
-        @Parameter(description = "property/cluster/namespace", required = true)
+        @Parameter(description = "tenant/namespace", required = true)
         private java.util.List<String> params;
 
         @Parameter(names = "--role", description = "Client role to which grant 
permissions", required = true)
@@ -145,7 +169,7 @@ public class CmdNamespaces extends CmdBase {
 
     @Parameters(commandDescription = "Revoke permissions on a namspace")
     private class RevokePermissions extends CliCommand {
-        @Parameter(description = "property/cluster/namespace", required = true)
+        @Parameter(description = "tenant/namespace", required = true)
         private java.util.List<String> params;
 
         @Parameter(names = "--role", description = "Client role to which 
revoke permissions", required = true)
@@ -160,7 +184,7 @@ public class CmdNamespaces extends CmdBase {
 
     @Parameters(commandDescription = "Get the permissions on a namspace")
     private class Permissions extends CliCommand {
-        @Parameter(description = "property/cluster/namespace\n", required = 
true)
+        @Parameter(description = "tenant/namespace\n", required = true)
         private java.util.List<String> params;
 
         @Override
@@ -172,7 +196,7 @@ public class CmdNamespaces extends CmdBase {
 
     @Parameters(commandDescription = "Set replication clusters for a namspace")
     private class SetReplicationClusters extends CliCommand {
-        @Parameter(description = "property/cluster/namespace", required = true)
+        @Parameter(description = "tenant/namespace", required = true)
         private java.util.List<String> params;
 
         @Parameter(names = { "--clusters",
@@ -189,7 +213,7 @@ public class CmdNamespaces extends CmdBase {
 
     @Parameters(commandDescription = "Get replication clusters for a namspace")
     private class GetReplicationClusters extends CliCommand {
-        @Parameter(description = "property/cluster/namespace\n", required = 
true)
+        @Parameter(description = "tenant/namespace\n", required = true)
         private java.util.List<String> params;
 
         @Override
@@ -201,7 +225,7 @@ public class CmdNamespaces extends CmdBase {
 
     @Parameters(commandDescription = "Set Message TTL for a namspace")
     private class SetMessageTTL extends CliCommand {
-        @Parameter(description = "property/cluster/namespace", required = true)
+        @Parameter(description = "tenant/namespace", required = true)
         private java.util.List<String> params;
 
         @Parameter(names = { "--messageTTL", "-ttl" }, description = "Message 
TTL in seconds", required = true)
@@ -216,7 +240,7 @@ public class CmdNamespaces extends CmdBase {
 
     @Parameters(commandDescription = "Set Anti-affinity group name for a 
namspace")
     private class SetAntiAffinityGroup extends CliCommand {
-        @Parameter(description = "property/cluster/namespace", required = true)
+        @Parameter(description = "tenant/namespace", required = true)
         private java.util.List<String> params;
 
         @Parameter(names = { "--group", "-g" }, description = "Anti-affinity 
group name", required = true)
@@ -231,7 +255,7 @@ public class CmdNamespaces extends CmdBase {
 
     @Parameters(commandDescription = "Get Anti-affinity group name for a 
namspace")
     private class GetAntiAffinityGroup extends CliCommand {
-        @Parameter(description = "property/cluster/namespace\n", required = 
true)
+        @Parameter(description = "tenant/namespace\n", required = true)
         private java.util.List<String> params;
 
         @Override
@@ -244,9 +268,9 @@ public class CmdNamespaces extends CmdBase {
     @Parameters(commandDescription = "Get Anti-affinity namespaces grouped 
with the given anti-affinity group name")
     private class GetAntiAffinityNamespaces extends CliCommand {
 
-        @Parameter(names = { "--property",
-                "-p" }, description = "property is only used for 
authorization. Client has to be admin of any of the property to access this 
api", required = false)
-        private String property;
+        @Parameter(names = { "--tenant",
+                "-p" }, description = "tenant is only used for authorization. 
Client has to be admin of any of the tenant to access this api", required = 
false)
+        private String tenant;
 
         @Parameter(names = { "--cluster", "-c" }, description = "Cluster 
name", required = true)
         private String cluster;
@@ -256,13 +280,13 @@ public class CmdNamespaces extends CmdBase {
 
         @Override
         void run() throws PulsarAdminException {
-            print(admin.namespaces().getAntiAffinityNamespaces(property, 
cluster, antiAffinityGroup));
+            print(admin.namespaces().getAntiAffinityNamespaces(tenant, 
cluster, antiAffinityGroup));
         }
     }
 
     @Parameters(commandDescription = "Remove Anti-affinity group name for a 
namspace")
     private class DeleteAntiAffinityGroup extends CliCommand {
-        @Parameter(description = "property/cluster/namespace\n", required = 
true)
+        @Parameter(description = "tenant/namespace\n", required = true)
         private java.util.List<String> params;
 
         @Override
@@ -275,7 +299,7 @@ public class CmdNamespaces extends CmdBase {
 
     @Parameters(commandDescription = "Enable or disable deduplication for a 
namespace")
     private class SetDeduplication extends CliCommand {
-        @Parameter(description = "property/cluster/namespace", required = true)
+        @Parameter(description = "tenant/namespace", required = true)
         private java.util.List<String> params;
 
         @Parameter(names = { "--enable", "-e" }, description = "Enable 
deduplication")
@@ -297,7 +321,7 @@ public class CmdNamespaces extends CmdBase {
 
     @Parameters(commandDescription = "Set the retention policy for a 
namespace")
     private class SetRetention extends CliCommand {
-        @Parameter(description = "property/cluster/namespace", required = true)
+        @Parameter(description = "tenant/namespace", required = true)
         private java.util.List<String> params;
 
         @Parameter(names = { "--time",
@@ -323,7 +347,7 @@ public class CmdNamespaces extends CmdBase {
 
     @Parameters(commandDescription = "Get the retention policy for a 
namespace")
     private class GetRetention extends CliCommand {
-        @Parameter(description = "property/cluster/namespace\n", required = 
true)
+        @Parameter(description = "tenant/namespace\n", required = true)
         private java.util.List<String> params;
 
         @Override
@@ -335,7 +359,7 @@ public class CmdNamespaces extends CmdBase {
 
     @Parameters(commandDescription = "Get message TTL for a namspace")
     private class GetMessageTTL extends CliCommand {
-        @Parameter(description = "property/cluster/namespace\n", required = 
true)
+        @Parameter(description = "tenant/namespace\n", required = true)
         private java.util.List<String> params;
 
         @Override
@@ -347,7 +371,7 @@ public class CmdNamespaces extends CmdBase {
 
     @Parameters(commandDescription = "Unload a namespace from the current 
serving broker")
     private class Unload extends CliCommand {
-        @Parameter(description = "property/cluster/namespace\n", required = 
true)
+        @Parameter(description = "tenant/namespace\n", required = true)
         private java.util.List<String> params;
 
         @Parameter(names = { "--bundle", "-b" }, description = 
"{start-boundary}_{end-boundary}\n")
@@ -366,7 +390,7 @@ public class CmdNamespaces extends CmdBase {
 
     @Parameters(commandDescription = "Split a namespace-bundle from the 
current serving broker")
     private class SplitBundle extends CliCommand {
-        @Parameter(description = "property/cluster/namespace/\n", required = 
true)
+        @Parameter(description = "tenant/namespace/\n", required = true)
         private java.util.List<String> params;
 
         @Parameter(names = { "--bundle", "-b" }, description = 
"{start-boundary}_{end-boundary}\n", required = true)
@@ -385,7 +409,7 @@ public class CmdNamespaces extends CmdBase {
 
     @Parameters(commandDescription = "Set message-dispatch-rate for all topics 
of the namespace")
     private class SetDispatchRate extends CliCommand {
-        @Parameter(description = "property/cluster/namespace/\n", required = 
true)
+        @Parameter(description = "tenant/namespace/\n", required = true)
         private java.util.List<String> params;
 
         @Parameter(names = { "--msg-dispatch-rate",
@@ -410,7 +434,7 @@ public class CmdNamespaces extends CmdBase {
 
     @Parameters(commandDescription = "Get configured message-dispatch-rate for 
all topics of the namespace (Disabled if value < 0)")
     private class GetDispatchRate extends CliCommand {
-        @Parameter(description = "property/cluster/namespace\n", required = 
true)
+        @Parameter(description = "tenant/namespace\n", required = true)
         private java.util.List<String> params;
 
         @Override
@@ -422,7 +446,7 @@ public class CmdNamespaces extends CmdBase {
 
     @Parameters(commandDescription = "Set subscription message-dispatch-rate 
for all subscription of the namespace")
     private class SetSuscriptionDispatchRate extends CliCommand {
-        @Parameter(description = "property/cluster/namespace/\n", required = 
true)
+        @Parameter(description = "tenant/namespace/\n", required = true)
         private java.util.List<String> params;
 
         @Parameter(names = { "--sub-msg-dispatch-rate",
@@ -447,7 +471,7 @@ public class CmdNamespaces extends CmdBase {
 
     @Parameters(commandDescription = "Get subscription configured 
message-dispatch-rate for all topics of the namespace (Disabled if value < 0)")
     private class GetSubscriptionDispatchRate extends CliCommand {
-        @Parameter(description = "property/cluster/namespace\n", required = 
true)
+        @Parameter(description = "tenant/namespace\n", required = true)
         private java.util.List<String> params;
 
         @Override
@@ -459,7 +483,7 @@ public class CmdNamespaces extends CmdBase {
 
     @Parameters(commandDescription = "Get the backlog quota policies for a 
namespace")
     private class GetBacklogQuotaMap extends CliCommand {
-        @Parameter(description = "property/cluster/namespace\n", required = 
true)
+        @Parameter(description = "tenant/namespace\n", required = true)
         private java.util.List<String> params;
 
         @Override
@@ -471,7 +495,7 @@ public class CmdNamespaces extends CmdBase {
 
     @Parameters(commandDescription = "Set a backlog quota policy for a 
namespace")
     private class SetBacklogQuota extends CliCommand {
-        @Parameter(description = "property/cluster/namespace", required = true)
+        @Parameter(description = "tenant/namespace", required = true)
         private java.util.List<String> params;
 
         @Parameter(names = { "-l", "--limit" }, description = "Size limit (eg: 
10M, 16G)", required = true)
@@ -502,7 +526,7 @@ public class CmdNamespaces extends CmdBase {
 
     @Parameters(commandDescription = "Remove a backlog quota policy from a 
namespace")
     private class RemoveBacklogQuota extends CliCommand {
-        @Parameter(description = "property/cluster/namespace", required = true)
+        @Parameter(description = "tenant/namespace", required = true)
         private java.util.List<String> params;
 
         @Override
@@ -514,7 +538,7 @@ public class CmdNamespaces extends CmdBase {
 
     @Parameters(commandDescription = "Get the persistence policies for a 
namespace")
     private class GetPersistence extends CliCommand {
-        @Parameter(description = "property/cluster/namespace\n", required = 
true)
+        @Parameter(description = "tenant/namespace\n", required = true)
         private java.util.List<String> params;
 
         @Override
@@ -526,7 +550,7 @@ public class CmdNamespaces extends CmdBase {
 
     @Parameters(commandDescription = "Set the persistence policies for a 
namespace")
     private class SetPersistence extends CliCommand {
-        @Parameter(description = "property/cluster/namespace", required = true)
+        @Parameter(description = "tenant/namespace", required = true)
         private java.util.List<String> params;
 
         @Parameter(names = { "-e",
@@ -555,7 +579,7 @@ public class CmdNamespaces extends CmdBase {
 
     @Parameters(commandDescription = "Clear backlog for a namespace")
     private class ClearBacklog extends CliCommand {
-        @Parameter(description = "property/cluster/namespace", required = true)
+        @Parameter(description = "tenant/namespace", required = true)
         private java.util.List<String> params;
 
         @Parameter(names = { "-s", "--sub" }, description = "subscription 
name")
@@ -591,7 +615,7 @@ public class CmdNamespaces extends CmdBase {
 
     @Parameters(commandDescription = "Unsubscribe the given subscription on 
all topics on a namespace")
     private class Unsubscribe extends CliCommand {
-        @Parameter(description = "property/cluster/namespace", required = true)
+        @Parameter(description = "tenant/namespace", required = true)
         private java.util.List<String> params;
 
         @Parameter(names = { "-s", "--sub" }, description = "subscription 
name", required = true)
@@ -614,7 +638,7 @@ public class CmdNamespaces extends CmdBase {
 
     @Parameters(commandDescription = "Enable or disable message encryption 
required for a namespace")
     private class SetEncryptionRequired extends CliCommand {
-        @Parameter(description = "property/cluster/namespace", required = true)
+        @Parameter(description = "tenant/namespace", required = true)
         private java.util.List<String> params;
 
         @Parameter(names = { "--enable", "-e" }, description = "Enable message 
encryption required")
@@ -636,7 +660,7 @@ public class CmdNamespaces extends CmdBase {
 
     @Parameters(commandDescription = "Set subscription auth mode on a 
namespace")
     private class SetSubscriptionAuthMode extends CliCommand {
-        @Parameter(description = "property/cluster/namespace", required = true)
+        @Parameter(description = "tenant/namespace", required = true)
         private java.util.List<String> params;
 
         @Parameter(names = { "-m", "--subscription-auth-mode" }, description = 
"subscription name", required = true)
@@ -651,7 +675,7 @@ public class CmdNamespaces extends CmdBase {
 
     @Parameters(commandDescription = "Get maxProducersPerTopic for a 
namespace")
     private class GetMaxProducersPerTopic extends CliCommand {
-        @Parameter(description = "property/cluster/namespace\n", required = 
true)
+        @Parameter(description = "tenant/namespace\n", required = true)
         private java.util.List<String> params;
 
         @Override
@@ -663,7 +687,7 @@ public class CmdNamespaces extends CmdBase {
 
     @Parameters(commandDescription = "Set maxProducersPerTopic for a 
namespace")
     private class SetMaxProducersPerTopic extends CliCommand {
-        @Parameter(description = "property/cluster/namespace", required = true)
+        @Parameter(description = "tenant/namespace", required = true)
         private java.util.List<String> params;
 
         @Parameter(names = { "--max-producers-per-topic", "-p" }, description 
= "maxProducersPerTopic for a namespace", required = true)
@@ -678,7 +702,7 @@ public class CmdNamespaces extends CmdBase {
 
     @Parameters(commandDescription = "Get maxConsumersPerTopic for a 
namespace")
     private class GetMaxConsumersPerTopic extends CliCommand {
-        @Parameter(description = "property/cluster/namespace\n", required = 
true)
+        @Parameter(description = "tenant/namespace\n", required = true)
         private java.util.List<String> params;
 
         @Override
@@ -690,7 +714,7 @@ public class CmdNamespaces extends CmdBase {
 
     @Parameters(commandDescription = "Set maxConsumersPerTopic for a 
namespace")
     private class SetMaxConsumersPerTopic extends CliCommand {
-        @Parameter(description = "property/cluster/namespace", required = true)
+        @Parameter(description = "tenant/namespace", required = true)
         private java.util.List<String> params;
 
         @Parameter(names = { "--max-consumers-per-topic", "-c" }, description 
= "maxConsumersPerTopic for a namespace", required = true)
@@ -705,7 +729,7 @@ public class CmdNamespaces extends CmdBase {
 
     @Parameters(commandDescription = "Get maxConsumersPerSubscription for a 
namespace")
     private class GetMaxConsumersPerSubscription extends CliCommand {
-        @Parameter(description = "property/cluster/namespace\n", required = 
true)
+        @Parameter(description = "tenant/namespace\n", required = true)
         private java.util.List<String> params;
 
         @Override
@@ -717,7 +741,7 @@ public class CmdNamespaces extends CmdBase {
 
     @Parameters(commandDescription = "Set maxConsumersPerSubscription for a 
namespace")
     private class SetMaxConsumersPerSubscription extends CliCommand {
-        @Parameter(description = "property/cluster/namespace", required = true)
+        @Parameter(description = "tenant/namespace", required = true)
         private java.util.List<String> params;
 
         @Parameter(names = { "--max-consumers-per-subscription", "-c" }, 
description = "maxConsumersPerSubscription for a namespace", required = true)
diff --git 
a/pulsar-common/src/main/java/org/apache/pulsar/common/policies/data/Policies.java
 
b/pulsar-common/src/main/java/org/apache/pulsar/common/policies/data/Policies.java
index c1d85bd..59c1b3a 100644
--- 
a/pulsar-common/src/main/java/org/apache/pulsar/common/policies/data/Policies.java
+++ 
b/pulsar-common/src/main/java/org/apache/pulsar/common/policies/data/Policies.java
@@ -32,7 +32,7 @@ public class Policies {
 
     public final AuthPolicies auth_policies = new AuthPolicies();
     public Set<String> replication_clusters = Sets.newHashSet();
-    public BundlesData bundles = defaultBundle();
+    public BundlesData bundles;
     public Map<BacklogQuota.BacklogQuotaType, BacklogQuota> backlog_quota_map 
= Maps.newHashMap();
     public Map<String, DispatchRate> clusterDispatchRate = Maps.newHashMap();
     public Map<String, DispatchRate> subscriptionDispatchRate = 
Maps.newHashMap();

-- 
To stop receiving notification emails like this one, please contact
mme...@apache.org.

Reply via email to