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 2021/12/20 12:40:08 UTC

[pulsar] 04/05: [Admin] Get schema validation enforce add applied. (#12349)

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

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

commit c90dff205cca23718cf4eb550994fc971c416868
Author: congbo <39...@users.noreply.github.com>
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 07c676a..f2327e2 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
@@ -2387,10 +2387,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 53eab24..cf84374 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 b7747de..75d77dc 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
@@ -67,6 +67,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 8307a5f..610423b 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 32befc8..60fb6ac 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
@@ -368,6 +368,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 435b5d8..c642288 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
@@ -1877,11 +1877,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));
         }
     }