This is an automated email from the ASF dual-hosted git repository.
penghui pushed a commit to branch branch-2.6
in repository https://gitbox.apache.org/repos/asf/pulsar.git
The following commit(s) were added to refs/heads/branch-2.6 by this push:
new e2973f6 [ISSUE 8159]Add a new state for namespace-level TTL (#8178)
e2973f6 is described below
commit e2973f6d67123daf999e47f7c8aac4605ad2cad0
Author: feynmanlin <[email protected]>
AuthorDate: Sat Oct 3 05:36:24 2020 +0800
[ISSUE 8159]Add a new state for namespace-level TTL (#8178)
Fixes #8159
When the namespace-level TTL is set to 0, it means 2 states:
1) TTL check is disabled
2) The namespace-level setting does not exist, return to the broker-level
setting
These two states are in conflict. We don't know if it is disabled or using
broker-level configuration.
We should set a state separately for the case where the namespace-level
configuration does not exist.
The TTL of the namespace-level can be set to null, which means it does not
exist. It is consistent with topic-level TTL.
(cherry picked from commit aa7383ebc3dd332412bc55f5bc320ff2b57402cc)
---
.../apache/pulsar/broker/admin/AdminResource.java | 2 +-
.../pulsar/broker/admin/impl/NamespacesBase.java | 6 +-
.../apache/pulsar/broker/admin/v2/Namespaces.java | 11 +++
.../broker/service/persistent/PersistentTopic.java | 33 +++++--
.../apache/pulsar/broker/admin/AdminApiTest.java | 1 +
.../pulsar/broker/admin/TopicMessageTTLTest.java | 100 +++++++++++++++++++++
.../pulsar/broker/admin/v1/V1_AdminApiTest.java | 1 +
.../org/apache/pulsar/client/admin/Namespaces.java | 14 +++
.../client/admin/internal/NamespacesImpl.java | 22 +++++
pulsar-client-messagecrypto-bc/pom.xml | 12 +++
.../pulsar/admin/cli/PulsarAdminToolTest.java | 3 +
.../org/apache/pulsar/admin/cli/CmdNamespaces.java | 13 +++
.../pulsar/common/policies/data/Policies.java | 2 +-
.../common/policies/data/PoliciesDataTest.java | 4 +-
.../apache/pulsar/zookeeper/DeserializersTest.java | 2 +-
15 files changed, 209 insertions(+), 17 deletions(-)
diff --git
a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/AdminResource.java
b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/AdminResource.java
index ecf926c..fdf51a9 100644
---
a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/AdminResource.java
+++
b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/AdminResource.java
@@ -500,7 +500,7 @@ public abstract class AdminResource extends
PulsarWebResource {
policies.clusterSubscribeRate.put(cluster, subscribeRate());
}
- if (policies.message_ttl_in_seconds <= 0) {
+ if (policies.message_ttl_in_seconds == null) {
policies.message_ttl_in_seconds =
config.getTtlDurationDefaultInSeconds();
}
}
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 2607673..f926be7 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
@@ -557,11 +557,11 @@ public abstract class NamespacesBase extends
AdminResource {
}
}
- protected void internalSetNamespaceMessageTTL(int messageTTL) {
+ protected void internalSetNamespaceMessageTTL(Integer messageTTL) {
validateNamespacePolicyOperation(namespaceName, PolicyName.TTL,
PolicyOperation.WRITE);
validatePoliciesReadOnlyAccess();
- if (messageTTL < 0) {
+ if (messageTTL != null && messageTTL < 0) {
throw new RestException(Status.PRECONDITION_FAILED, "Invalid value
for message TTL");
}
@@ -2174,7 +2174,7 @@ public abstract class NamespacesBase extends
AdminResource {
// Validate cluster names and permissions
policies.replication_clusters.forEach(cluster ->
validateClusterForTenant(ns.getTenant(), cluster));
- if (policies.message_ttl_in_seconds < 0) {
+ if (policies.message_ttl_in_seconds != null &&
policies.message_ttl_in_seconds < 0) {
throw new RestException(Status.PRECONDITION_FAILED, "Invalid value
for message TTL");
}
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 4c1b879..d16b58a 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
@@ -293,6 +293,17 @@ public class Namespaces extends NamespacesBase {
internalSetNamespaceMessageTTL(messageTTL);
}
+ @DELETE
+ @Path("/{tenant}/{namespace}/messageTTL")
+ @ApiOperation(value = "Set message TTL in seconds for namespace")
+ @ApiResponses(value = { @ApiResponse(code = 403, message = "Don't have
admin permission"),
+ @ApiResponse(code = 404, message = "Tenant or cluster or namespace
doesn't exist"),
+ @ApiResponse(code = 412, message = "Invalid TTL") })
+ public void removeNamespaceMessageTTL(@PathParam("tenant") String tenant,
@PathParam("namespace") String namespace) {
+ validateNamespaceName(tenant, namespace);
+ internalSetNamespaceMessageTTL(null);
+ }
+
@GET
@Path("/{tenant}/{namespace}/subscriptionExpirationTime")
@ApiOperation(value = "Get the subscription expiration time for the
namespace")
diff --git
a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/PersistentTopic.java
b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/PersistentTopic.java
index 16c2ac9..353799f 100644
---
a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/PersistentTopic.java
+++
b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/PersistentTopic.java
@@ -1071,7 +1071,13 @@ public class PersistentTopic extends AbstractTopic
implements Topic, AddEntryCal
return future;
}
- final int newMessageTTLinSeconds = policies.message_ttl_in_seconds;
+ //Ignore current broker's config for messageTTL for replication.
+ final int newMessageTTLinSeconds;
+ try {
+ newMessageTTLinSeconds = getMessageTTL();
+ } catch (Exception e) {
+ return FutureUtil.failedFuture(new ServerMetadataException(e));
+ }
Set<String> configuredClusters;
if (policies.replication_clusters != null) {
@@ -1121,15 +1127,9 @@ public class PersistentTopic extends AbstractTopic
implements Topic, AddEntryCal
@Override
public void checkMessageExpiry() {
- TopicName name = TopicName.get(topic);
- Policies policies;
try {
- policies =
brokerService.pulsar().getConfigurationCache().policiesCache()
- .get(AdminResource.path(POLICIES, name.getNamespace()))
- .orElseThrow(() -> new KeeperException.NoNodeException());
- int defaultTTL =
brokerService.pulsar().getConfiguration().getTtlDurationDefaultInSeconds();
- int message_ttl_in_seconds = (policies.message_ttl_in_seconds <= 0
&& defaultTTL > 0) ? defaultTTL
- : policies.message_ttl_in_seconds;
+ //If topic level policy or message ttl is not set, fall back to
namespace level config.
+ int message_ttl_in_seconds = getMessageTTL();
if (message_ttl_in_seconds != 0) {
subscriptions.forEach((subName, sub) ->
sub.expireMessages(message_ttl_in_seconds));
replicators.forEach((region, replicator) ->
((PersistentReplicator)replicator).expireMessages(message_ttl_in_seconds));
@@ -2118,6 +2118,21 @@ public class PersistentTopic extends AbstractTopic
implements Topic, AddEntryCal
}
}
+ /**
+ * Get message TTL for this topic.
+ * @return Message TTL in second.
+ */
+ private int getMessageTTL() throws Exception {
+ TopicName name = TopicName.get(topic);
+ Policies policies =
brokerService.pulsar().getConfigurationCache().policiesCache()
+ .get(AdminResource.path(POLICIES, name.getNamespace()))
+ .orElseThrow(KeeperException.NoNodeException::new);
+ if (policies.message_ttl_in_seconds != null) {
+ return policies.message_ttl_in_seconds;
+ }
+ return
brokerService.getPulsar().getConfiguration().getTtlDurationDefaultInSeconds();
+ }
+
private static final Logger log =
LoggerFactory.getLogger(PersistentTopic.class);
@Override
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 a2cb303..ba82145 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
@@ -677,6 +677,7 @@ public class AdminApiTest extends
MockedPulsarServiceBaseTest {
policies.clusterSubscribeRate.put("test",
ConfigHelper.subscribeRate(conf));
policies.max_unacked_messages_per_subscription = 200000;
policies.max_unacked_messages_per_consumer = 50000;
+ policies.message_ttl_in_seconds =
pulsar.getConfiguration().getTtlDurationDefaultInSeconds();
assertEquals(admin.namespaces().getPolicies("prop-xyz/ns1"), policies);
assertEquals(admin.namespaces().getPermissions("prop-xyz/ns1"),
policies.auth_policies.namespace_auth);
diff --git
a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/TopicMessageTTLTest.java
b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/TopicMessageTTLTest.java
new file mode 100644
index 0000000..b8b638e
--- /dev/null
+++
b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/TopicMessageTTLTest.java
@@ -0,0 +1,100 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.pulsar.broker.admin;
+
+import com.google.common.collect.Sets;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.pulsar.broker.auth.MockedPulsarServiceBaseTest;
+import org.apache.pulsar.broker.service.persistent.PersistentTopic;
+import org.apache.pulsar.client.admin.PulsarAdminException;
+import org.apache.pulsar.client.api.Producer;
+import org.apache.pulsar.common.policies.data.ClusterData;
+import org.apache.pulsar.common.policies.data.TenantInfo;
+import org.testng.Assert;
+import org.testng.annotations.AfterMethod;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+import java.lang.reflect.Method;
+import java.util.UUID;
+
+@Slf4j
+public class TopicMessageTTLTest extends MockedPulsarServiceBaseTest {
+
+ private final String testTenant = "my-tenant";
+
+ private final String testNamespace = "my-namespace";
+
+ private final String myNamespace = testTenant + "/" + testNamespace;
+
+ private final String testTopic = "persistent://" + myNamespace +
"/test-topic-message-ttl";
+
+ @BeforeMethod
+ @Override
+ protected void setup() throws Exception {
+ this.conf.setSystemTopicEnabled(true);
+ this.conf.setTopicLevelPoliciesEnabled(true);
+ this.conf.setTtlDurationDefaultInSeconds(3600);
+ super.internalSetup();
+
+ admin.clusters().createCluster("test", new
ClusterData(pulsar.getWebServiceAddress()));
+ TenantInfo tenantInfo = new TenantInfo(Sets.newHashSet("role1",
"role2"), Sets.newHashSet("test"));
+ admin.tenants().createTenant(this.testTenant, tenantInfo);
+ admin.namespaces().createNamespace(testTenant + "/" + testNamespace,
Sets.newHashSet("test"));
+ admin.topics().createPartitionedTopic(testTopic, 2);
+ Producer producer = pulsarClient.newProducer().topic(testTenant + "/"
+ testNamespace + "/" + "dummy-topic").create();
+ producer.close();
+ Thread.sleep(3000);
+ }
+
+ @AfterMethod
+ @Override
+ public void cleanup() throws Exception {
+ super.internalCleanup();
+ }
+
+ @Test(timeOut = 20000)
+ public void testDifferentLevelPolicyPriority() throws Exception {
+ final String topicName = testTopic + UUID.randomUUID();
+ admin.topics().createNonPartitionedTopic(topicName);
+ PersistentTopic persistentTopic = (PersistentTopic)
pulsar.getBrokerService().getTopicIfExists(topicName).get().get();
+ Method method =
PersistentTopic.class.getDeclaredMethod("getMessageTTL");
+ method.setAccessible(true);
+
+ int namespaceMessageTTL =
admin.namespaces().getNamespaceMessageTTL(myNamespace);
+ Assert.assertEquals(namespaceMessageTTL, 3600);
+ Assert.assertEquals((int)method.invoke(persistentTopic), 3600);
+
+ admin.namespaces().setNamespaceMessageTTL(myNamespace, 10);
+ Thread.sleep(500);
+
Assert.assertEquals(admin.namespaces().getNamespaceMessageTTL(myNamespace), 10);
+ Assert.assertEquals((int)method.invoke(persistentTopic), 10);
+
+ admin.namespaces().setNamespaceMessageTTL(myNamespace, 0);
+ Thread.sleep(500);
+
Assert.assertEquals(admin.namespaces().getNamespaceMessageTTL(myNamespace), 0);
+ Assert.assertEquals((int)method.invoke(persistentTopic), 0);
+
+ admin.namespaces().removeNamespaceMessageTTL(myNamespace);
+ Thread.sleep(500);
+
Assert.assertEquals(admin.namespaces().getNamespaceMessageTTL(myNamespace),
3600);
+ Assert.assertEquals((int)method.invoke(persistentTopic), 3600);
+ }
+
+}
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 7b42a48..90b0622 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
@@ -637,6 +637,7 @@ public class V1_AdminApiTest extends
MockedPulsarServiceBaseTest {
policies.topicDispatchRate.put("test",
ConfigHelper.topicDispatchRate(conf));
policies.subscriptionDispatchRate.put("test",
ConfigHelper.subscriptionDispatchRate(conf));
policies.clusterSubscribeRate.put("test",
ConfigHelper.subscribeRate(conf));
+ policies.message_ttl_in_seconds =
pulsar.getConfiguration().getTtlDurationDefaultInSeconds();
policies.max_unacked_messages_per_subscription = 200000;
policies.max_unacked_messages_per_consumer = 50000;
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 f4315e5..01236bb 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
@@ -777,6 +777,20 @@ public interface Namespaces {
CompletableFuture<Void> setNamespaceMessageTTLAsync(String namespace, int
ttlInSeconds);
/**
+ * Remove the messages Time to Live for all the topics within a namespace.
+ * @param namespace
+ * @throws PulsarAdminException
+ */
+ void removeNamespaceMessageTTL(String namespace) throws
PulsarAdminException;
+
+ /**
+ * Remove the messages Time to Live for all the topics within a namespace
asynchronously.
+ * @param namespace
+ * @return
+ */
+ CompletableFuture<Void> removeNamespaceMessageTTLAsync(String namespace);
+
+ /**
* Get the subscription expiration time for a namespace.
* <p/>
* Response example:
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 83c6ce4..51bd8dc 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
@@ -601,6 +601,28 @@ public class NamespacesImpl extends BaseResource
implements Namespaces {
}
@Override
+ public void removeNamespaceMessageTTL(String namespace) throws
PulsarAdminException {
+ try {
+ removeNamespaceMessageTTLAsync(namespace)
+ .get(this.readTimeoutMs, TimeUnit.MILLISECONDS);
+ } catch (ExecutionException e) {
+ throw (PulsarAdminException) e.getCause();
+ } catch (InterruptedException e) {
+ Thread.currentThread().interrupt();
+ throw new PulsarAdminException(e);
+ } catch (TimeoutException e) {
+ throw new PulsarAdminException.TimeoutException(e);
+ }
+ }
+
+ @Override
+ public CompletableFuture<Void> removeNamespaceMessageTTLAsync(String
namespace) {
+ NamespaceName ns = NamespaceName.get(namespace);
+ WebTarget path = namespacePath(ns, "messageTTL");
+ return asyncDeleteRequest(path);
+ }
+
+ @Override
public int getSubscriptionExpirationTime(String namespace) throws
PulsarAdminException {
try {
return
getSubscriptionExpirationTimeAsync(namespace).get(this.readTimeoutMs,
TimeUnit.MILLISECONDS);
diff --git a/pulsar-client-messagecrypto-bc/pom.xml
b/pulsar-client-messagecrypto-bc/pom.xml
index cb58e54..e21ef54 100644
--- a/pulsar-client-messagecrypto-bc/pom.xml
+++ b/pulsar-client-messagecrypto-bc/pom.xml
@@ -47,5 +47,17 @@
<version>${project.parent.version}</version>
</dependency>
+ <dependency>
+ <groupId>org.bouncycastle</groupId>
+ <artifactId>bcprov-jdk15on</artifactId>
+ <version>1.64</version>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.bouncycastle</groupId>
+ <artifactId>bcpkix-jdk15on</artifactId>
+ <version>1.64</version>
+ <scope>compile</scope>
+ </dependency>
</dependencies>
</project>
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 18f0d39..497e9a3 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
@@ -544,6 +544,9 @@ public class PulsarAdminToolTest {
namespaces.run(split("get-offload-policies myprop/clust/ns1"));
verify(mockNamespaces).getOffloadPolicies("myprop/clust/ns1");
+
+ namespaces.run(split("remove-message-ttl myprop/clust/ns1"));
+ verify(mockNamespaces).removeNamespaceMessageTTL("myprop/clust/ns1");
}
@Test
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 661a56a..1dc5929 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
@@ -302,6 +302,18 @@ public class CmdNamespaces extends CmdBase {
}
}
+ @Parameters(commandDescription = "Remove Message TTL for a namespace")
+ private class RemoveMessageTTL extends CliCommand {
+ @Parameter(description = "tenant/namespace", required = true)
+ private java.util.List<String> params;
+
+ @Override
+ void run() throws PulsarAdminException {
+ String namespace = validateNamespace(params);
+ admin.namespaces().removeNamespaceMessageTTL(namespace);
+ }
+ }
+
@Parameters(commandDescription = "Set subscription expiration time for a
namespace")
private class SetSubscriptionExpirationTime extends CliCommand {
@Parameter(description = "tenant/namespace", required = true)
@@ -1706,6 +1718,7 @@ public class CmdNamespaces extends CmdBase {
jcommander.addCommand("get-message-ttl", new GetMessageTTL());
jcommander.addCommand("set-message-ttl", new SetMessageTTL());
+ jcommander.addCommand("remove-message-ttl", new RemoveMessageTTL());
jcommander.addCommand("get-subscription-expiration-time", new
GetSubscriptionExpirationTime());
jcommander.addCommand("set-subscription-expiration-time", new
SetSubscriptionExpirationTime());
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 0fe0811..c2960c9 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
@@ -58,7 +58,7 @@ public class Policies {
@SuppressWarnings("checkstyle:MemberName")
public Map<String, Integer> latency_stats_sample_rate = Maps.newHashMap();
@SuppressWarnings("checkstyle:MemberName")
- public int message_ttl_in_seconds = 0;
+ public Integer message_ttl_in_seconds = null;
@SuppressWarnings("checkstyle:MemberName")
public int subscription_expiration_time_minutes = 0;
@SuppressWarnings("checkstyle:MemberName")
diff --git
a/pulsar-common/src/test/java/org/apache/pulsar/common/policies/data/PoliciesDataTest.java
b/pulsar-common/src/test/java/org/apache/pulsar/common/policies/data/PoliciesDataTest.java
index 890e845..3aa7112 100644
---
a/pulsar-common/src/test/java/org/apache/pulsar/common/policies/data/PoliciesDataTest.java
+++
b/pulsar-common/src/test/java/org/apache/pulsar/common/policies/data/PoliciesDataTest.java
@@ -76,11 +76,11 @@ public class PoliciesDataTest {
public void bundlesPolicies() throws JsonGenerationException,
JsonMappingException, IOException {
ObjectMapper jsonMapper = ObjectMapperFactory.create();
String oldJsonPolicy =
"{\"auth_policies\":{\"namespace_auth\":{},\"destination_auth\":{}},\"replication_clusters\":[],"
- +
"\"backlog_quota_map\":{},\"persistence\":null,\"latency_stats_sample_rate\":{},\"message_ttl_in_seconds\":0}";
+ +
"\"backlog_quota_map\":{},\"persistence\":null,\"latency_stats_sample_rate\":{},\"message_ttl_in_seconds\":null}";
Policies policies = jsonMapper.readValue(oldJsonPolicy.getBytes(),
Policies.class);
assertEquals(policies, new Policies());
String newJsonPolicy =
"{\"auth_policies\":{\"namespace_auth\":{},\"destination_auth\":{}},\"replication_clusters\":[],\"bundles\":null,"
- +
"\"backlog_quota_map\":{},\"persistence\":null,\"latency_stats_sample_rate\":{},\"message_ttl_in_seconds\":0}";
+ +
"\"backlog_quota_map\":{},\"persistence\":null,\"latency_stats_sample_rate\":{},\"message_ttl_in_seconds\":null}";
OldPolicies oldPolicies =
jsonMapper.readValue(newJsonPolicy.getBytes(), OldPolicies.class);
assertEquals(oldPolicies, new OldPolicies());
}
diff --git
a/pulsar-zookeeper-utils/src/test/java/org/apache/pulsar/zookeeper/DeserializersTest.java
b/pulsar-zookeeper-utils/src/test/java/org/apache/pulsar/zookeeper/DeserializersTest.java
index 307241f..eb0e028 100644
---
a/pulsar-zookeeper-utils/src/test/java/org/apache/pulsar/zookeeper/DeserializersTest.java
+++
b/pulsar-zookeeper-utils/src/test/java/org/apache/pulsar/zookeeper/DeserializersTest.java
@@ -49,7 +49,7 @@ public class DeserializersTest {
public void testSimplePolicyDeserialize() throws Exception {
String key = "test_key";
String jsonPolicy =
"{\"auth_policies\":{\"namespace_auth\":{},\"destination_auth\":{}},\"replication_clusters\":[],"
- +
"\"bundles_activated\":true,\"backlog_quota_map\":{},\"persistence\":null,\"latency_stats_sample_rate\":{},\"message_ttl_in_seconds\":0}";
+ +
"\"bundles_activated\":true,\"backlog_quota_map\":{},\"persistence\":null,\"latency_stats_sample_rate\":{},\"message_ttl_in_seconds\":null}";
byte[] content = jsonPolicy.getBytes(StandardCharsets.UTF_8);
Policies result = Deserializers.POLICY_DESERIALIZER.deserialize(key,
content);
assertEquals(result, new Policies());