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

Reply via email to