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));
}
}