From c952b6b59ebc5f3e156de916ee9f2f88aa86732c Mon Sep 17 00:00:00 2001 From: congbo <39078850+congbobo184@users.noreply.github.com> Date: Wed, 4 Dec 2019 01:39:02 +0800 Subject: [PATCH] Modify the logical for getting schema compatibility strategy (#5785) ### Motivation Modify the logical for getting schema compatibility strategy, if schemaCompatibilityStrategy = SchemaCompatibilityStrategy.UNDEFINED return the SchemaAutoUpdateCompatibilityStrategy. ### Verifying this change Add the tests for it --- .../apache/pulsar/broker/admin/impl/NamespacesBase.java | 8 +++++++- .../compatibility/SchemaCompatibilityCheckTest.java | 4 ++++ .../java/org/apache/pulsar/admin/cli/CmdNamespaces.java | 4 ++-- 3 files changed, 13 insertions(+), 3 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 85d043f0985..adc7bd4d502 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 @@ -2044,7 +2044,13 @@ public abstract class NamespacesBase extends AdminResource { protected SchemaCompatibilityStrategy internalGetSchemaCompatibilityStrategy() { validateAdminAccessForTenant(namespaceName.getTenant()); - return getNamespacePolicies(namespaceName).schema_compatibility_strategy; + Policies policies = getNamespacePolicies(namespaceName); + SchemaCompatibilityStrategy schemaCompatibilityStrategy = policies.schema_compatibility_strategy; + if (schemaCompatibilityStrategy == SchemaCompatibilityStrategy.UNDEFINED){ + schemaCompatibilityStrategy = SchemaCompatibilityStrategy + .fromAutoUpdatePolicy(policies.schema_auto_update_compatibility_strategy); + } + return schemaCompatibilityStrategy; } @Deprecated diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/schema/compatibility/SchemaCompatibilityCheckTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/schema/compatibility/SchemaCompatibilityCheckTest.java index f091d9a890f..65db37ecc14 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/schema/compatibility/SchemaCompatibilityCheckTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/schema/compatibility/SchemaCompatibilityCheckTest.java @@ -45,6 +45,7 @@ import java.util.concurrent.ThreadLocalRandom; import static org.apache.pulsar.common.naming.TopicName.PUBLIC_TENANT; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; @Slf4j @@ -233,6 +234,9 @@ public class SchemaCompatibilityCheckTest extends MockedPulsarServiceBaseTest { Sets.newHashSet(CLUSTER_NAME) ); + assertEquals(admin.namespaces().getSchemaCompatibilityStrategy(namespaceName.toString()), + SchemaCompatibilityStrategy.FULL); + admin.namespaces().setSchemaCompatibilityStrategy(namespaceName.toString(), schemaCompatibilityStrategy); admin.schemas().createSchema(fqtn, Schema.AVRO(Schemas.PersonOne.class).getSchemaInfo()); 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 eb72052dfd3..9dc86998a6f 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 @@ -1082,7 +1082,7 @@ public class CmdNamespaces extends CmdBase { } } - @Parameters(commandDescription = "Get the schema auto-update strategy for a namespace") + @Parameters(commandDescription = "Get the schema auto-update strategy for a namespace", hidden = true) private class GetSchemaAutoUpdateStrategy extends CliCommand { @Parameter(description = "tenant/namespace", required = true) private java.util.List params; @@ -1095,7 +1095,7 @@ public class CmdNamespaces extends CmdBase { } } - @Parameters(commandDescription = "Set the schema auto-update strategy for a namespace") + @Parameters(commandDescription = "Set the schema auto-update strategy for a namespace", hidden = true) private class SetSchemaAutoUpdateStrategy extends CliCommand { @Parameter(description = "tenant/namespace", required = true) private java.util.List params; -- GitLab