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

penghui pushed a commit to branch branch-2.8
in repository https://gitbox.apache.org/repos/asf/pulsar.git

commit fb5c7899951cb2639e8439ef8bbe053a84b59477
Author: congbo <[email protected]>
AuthorDate: Mon Oct 18 14:02:30 2021 +0800

    [Admin] Get schema validation enforce add applied. (#12349)
    
    now, namespace get schema validation enforce don't return broker config, if 
namespace policy the schema validation enforce is false and we use --applied, 
we should return this config in broker level.
    
    (cherry picked from commit 69fb80236d61e7594fdf8e84724f435d7820cc3f)
---
 .../pulsar/broker/admin/impl/NamespacesBase.java   |  9 +++++--
 .../apache/pulsar/broker/admin/v2/Namespaces.java  |  5 ++--
 .../admin/AdminApiSchemaValidationEnforced.java    |  9 +++++++
 .../org/apache/pulsar/client/admin/Namespaces.java | 28 ++++++++++++++++++++--
 .../client/admin/internal/NamespacesImpl.java      | 19 +++++++++++----
 .../pulsar/admin/cli/PulsarAdminToolTest.java      |  3 +++
 .../org/apache/pulsar/admin/cli/CmdNamespaces.java |  5 +++-
 7 files changed, 67 insertions(+), 11 deletions(-)

diff --git 
a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/impl/NamespacesBase.java
 
b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/impl/NamespacesBase.java
index 3fd6c37..04f13b8 100644
--- 
a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/impl/NamespacesBase.java
+++ 
b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/impl/NamespacesBase.java
@@ -2388,10 +2388,15 @@ public abstract class NamespacesBase extends 
AdminResource {
                 "schemaCompatibilityStrategy");
     }
 
-    protected boolean internalGetSchemaValidationEnforced() {
+    protected boolean internalGetSchemaValidationEnforced(boolean applied) {
         validateNamespacePolicyOperation(namespaceName, 
PolicyName.SCHEMA_COMPATIBILITY_STRATEGY,
                 PolicyOperation.READ);
-        return getNamespacePolicies(namespaceName).schema_validation_enforced;
+        boolean schemaValidationEnforced = 
getNamespacePolicies(namespaceName).schema_validation_enforced;
+        if (!schemaValidationEnforced && applied) {
+            return pulsar().getConfiguration().isSchemaValidationEnforced();
+        } else {
+            return schemaValidationEnforced;
+        }
     }
 
     protected void internalSetSchemaValidationEnforced(boolean 
schemaValidationEnforced) {
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 9a1f684c..f9515e3 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
@@ -1626,9 +1626,10 @@ public class Namespaces extends NamespacesBase {
     @ApiResponses(value = { @ApiResponse(code = 403, message = "Don't have 
admin permission"),
                             @ApiResponse(code = 404, message = "Tenants or 
Namespace doesn't exist") })
     public boolean getSchemaValidtionEnforced(@PathParam("tenant") String 
tenant,
-                                           @PathParam("namespace") String 
namespace) {
+                                              @PathParam("namespace") String 
namespace,
+                                              @QueryParam("applied") 
@DefaultValue("false") boolean applied) {
         validateNamespaceName(tenant, namespace);
-        return internalGetSchemaValidationEnforced();
+        return internalGetSchemaValidationEnforced(applied);
     }
 
     @POST
diff --git 
a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiSchemaValidationEnforced.java
 
b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiSchemaValidationEnforced.java
index 3daf920..2fb808e 100644
--- 
a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiSchemaValidationEnforced.java
+++ 
b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiSchemaValidationEnforced.java
@@ -69,6 +69,15 @@ public class AdminApiSchemaValidationEnforced extends 
MockedPulsarServiceBaseTes
     }
 
     @Test
+    public void testGetSchemaValidationEnforcedApplied() throws Exception {
+        String namespace = "schema-validation-enforced/testApplied";
+        admin.namespaces().createNamespace(namespace);
+        this.conf.setSchemaValidationEnforced(true);
+        assertTrue(admin.namespaces().getSchemaValidationEnforced(namespace, 
true));
+        assertFalse(admin.namespaces().getSchemaValidationEnforced(namespace, 
false));
+    }
+
+    @Test
     public void testDisableSchemaValidationEnforcedNoSchema() throws Exception 
{
         
admin.namespaces().createNamespace("schema-validation-enforced/default-no-schema");
         String namespace = "schema-validation-enforced/default-no-schema";
diff --git 
a/pulsar-client-admin-api/src/main/java/org/apache/pulsar/client/admin/Namespaces.java
 
b/pulsar-client-admin-api/src/main/java/org/apache/pulsar/client/admin/Namespaces.java
index f6f8654..6ea4bab 100644
--- 
a/pulsar-client-admin-api/src/main/java/org/apache/pulsar/client/admin/Namespaces.java
+++ 
b/pulsar-client-admin-api/src/main/java/org/apache/pulsar/client/admin/Namespaces.java
@@ -3539,6 +3539,7 @@ public interface Namespaces {
 
     /**
      * Get schema validation enforced for namespace.
+     * @param namespace namespace for this command.
      * @return the schema validation enforced flag
      * @throws NotAuthorizedException
      *             Don't have admin permission
@@ -3547,17 +3548,40 @@ public interface Namespaces {
      * @throws PulsarAdminException
      *             Unexpected error
      */
-    boolean getSchemaValidationEnforced(String namespace)
-            throws PulsarAdminException;
+    boolean getSchemaValidationEnforced(String namespace) throws 
PulsarAdminException;
 
     /**
      * Get schema validation enforced for namespace asynchronously.
+     * @param namespace namespace for this command.
      *
      * @return the schema validation enforced flag
      */
     CompletableFuture<Boolean> getSchemaValidationEnforcedAsync(String 
namespace);
 
     /**
+     * Get schema validation enforced for namespace.
+     * @param namespace namespace for this command.
+     * @param applied applied for this command.
+     * @return the schema validation enforced flag
+     * @throws NotAuthorizedException
+     *             Don't have admin permission
+     * @throws NotFoundException
+     *             Tenant or Namespace does not exist
+     * @throws PulsarAdminException
+     *             Unexpected error
+     */
+    boolean getSchemaValidationEnforced(String namespace, boolean applied) 
throws PulsarAdminException;
+
+    /**
+     * Get schema validation enforced for namespace asynchronously.
+     * @param namespace namespace for this command.
+     * @param applied applied for this command.
+     *
+     * @return the schema validation enforced flag
+     */
+    CompletableFuture<Boolean> getSchemaValidationEnforcedAsync(String 
namespace, boolean applied);
+
+    /**
      * Set schema validation enforced for namespace.
      * if a producer without a schema attempts to produce to a topic with 
schema in this the namespace, the
      * producer will be failed to connect. PLEASE be carefully on using this, 
since non-java clients don't
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 af30e93..6a489f9 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
@@ -3060,11 +3060,21 @@ public class NamespacesImpl extends BaseResource 
implements Namespaces {
     }
 
     @Override
-    public boolean getSchemaValidationEnforced(String namespace)
+    public boolean getSchemaValidationEnforced(String namespace) throws 
PulsarAdminException {
+        return getSchemaValidationEnforced(namespace, false);
+    }
+
+    @Override
+    public CompletableFuture<Boolean> getSchemaValidationEnforcedAsync(String 
namespace) {
+        return getSchemaValidationEnforcedAsync(namespace, false);
+    }
+
+    @Override
+    public boolean getSchemaValidationEnforced(String namespace, boolean 
applied)
             throws PulsarAdminException {
         try {
-            return getSchemaValidationEnforcedAsync(namespace).
-                    get(this.readTimeoutMs, TimeUnit.MILLISECONDS);
+            return getSchemaValidationEnforcedAsync(namespace, applied)
+                    .get(this.readTimeoutMs, TimeUnit.MILLISECONDS);
         } catch (ExecutionException e) {
             throw (PulsarAdminException) e.getCause();
         } catch (InterruptedException e) {
@@ -3076,9 +3086,10 @@ public class NamespacesImpl extends BaseResource 
implements Namespaces {
     }
 
     @Override
-    public CompletableFuture<Boolean> getSchemaValidationEnforcedAsync(String 
namespace) {
+    public CompletableFuture<Boolean> getSchemaValidationEnforcedAsync(String 
namespace, boolean applied) {
         NamespaceName ns = NamespaceName.get(namespace);
         WebTarget path = namespacePath(ns, "schemaValidationEnforced");
+        path = path.queryParam("applied", applied);
         final CompletableFuture<Boolean> future = new CompletableFuture<>();
         asyncGetRequest(path,
                 new InvocationCallback<Boolean>() {
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 f83749c..4cbefb9 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
@@ -370,6 +370,9 @@ public class PulsarAdminToolTest {
         namespaces.run(split("get-subscription-types-enabled 
myprop/clust/ns1"));
         verify(mockNamespaces).getSubscriptionTypesEnabled("myprop/clust/ns1");
 
+        namespaces.run(split("get-schema-validation-enforce myprop/clust/ns1 
-ap"));
+        verify(mockNamespaces).getSchemaValidationEnforced("myprop/clust/ns1", 
true);
+
         namespaces
                 .run(split("set-bookie-affinity-group myprop/clust/ns1 
--primary-group test1 --secondary-group test2"));
         verify(mockNamespaces).setBookieAffinityGroup("myprop/clust/ns1",
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 bac6a39..44557bd 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
@@ -1874,11 +1874,14 @@ public class CmdNamespaces extends CmdBase {
         @Parameter(description = "tenant/namespace", required = true)
         private java.util.List<String> params;
 
+        @Parameter(names = { "-ap", "--applied" }, description = "Get the 
applied policy of the namespace")
+        private boolean applied = false;
+
         @Override
         void run() throws PulsarAdminException {
             String namespace = validateNamespace(params);
 
-            
System.out.println(getAdmin().namespaces().getSchemaValidationEnforced(namespace));
+            
System.out.println(getAdmin().namespaces().getSchemaValidationEnforced(namespace,
 applied));
         }
     }
 

Reply via email to