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 ad141c5884fc1..5960a6eb3b9ad 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 @@ -328,6 +328,14 @@ protected Policies getNamespacePolicies(NamespaceName namespaceName) { } + protected PersistencePolicies getOrDefaultPersistencePolicy(PersistencePolicies policies) { + return policies != null ? policies + : new PersistencePolicies(pulsar().getConfiguration().getManagedLedgerDefaultEnsembleSize(), + pulsar().getConfiguration().getManagedLedgerDefaultWriteQuorum(), + pulsar().getConfiguration().getManagedLedgerDefaultAckQuorum(), + pulsar().getConfiguration().getManagedLedgerDefaultMarkDeleteRateLimit()); + } + protected CompletableFuture getNamespacePoliciesAsync(NamespaceName namespaceName) { return namespaceResources().getPoliciesAsync(namespaceName).thenCompose(policies -> { if (policies.isPresent()) { 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 b33b84e5aed41..48a3fc0ac57a6 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 @@ -1273,6 +1273,14 @@ protected CompletableFuture internalSetPersistenceAsync(PersistencePolicie .thenCompose(__ -> doUpdatePersistenceAsync(persistence)); } + + protected PersistencePolicies internalGetPersistence() { + validateNamespacePolicyOperation(namespaceName, PolicyName.PERSISTENCE, PolicyOperation.READ); + + Policies policies = getNamespacePolicies(namespaceName); + return getOrDefaultPersistencePolicy(policies.persistence); + } + private CompletableFuture doUpdatePersistenceAsync(PersistencePolicies persistence) { return updatePoliciesAsync(namespaceName, policies -> { policies.persistence = persistence; diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/impl/PersistentTopicsBase.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/impl/PersistentTopicsBase.java index 4a932a391b188..77f04a2a14e90 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/impl/PersistentTopicsBase.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/impl/PersistentTopicsBase.java @@ -3517,13 +3517,7 @@ protected CompletableFuture internalGetPersistence(boolean if (applied) { PersistencePolicies namespacePolicy = getNamespacePolicies(namespaceName) .persistence; - return namespacePolicy == null - ? new PersistencePolicies( - pulsar().getConfiguration().getManagedLedgerDefaultEnsembleSize(), - pulsar().getConfiguration().getManagedLedgerDefaultWriteQuorum(), - pulsar().getConfiguration().getManagedLedgerDefaultAckQuorum(), - pulsar().getConfiguration().getManagedLedgerDefaultMarkDeleteRateLimit()) - : namespacePolicy; + return getOrDefaultPersistencePolicy(namespacePolicy); } return null; })); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApi2Test.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApi2Test.java index a34e0c189bbe4..77b340687ff06 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApi2Test.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApi2Test.java @@ -436,7 +436,7 @@ public void testSetPersistencePolicies() throws Exception { final String namespace = "prop-xyz/ns2"; admin.namespaces().createNamespace(namespace, Set.of("test")); - assertNull(admin.namespaces().getPersistence(namespace)); + assertNotNull(admin.namespaces().getPersistence(namespace)); admin.namespaces().setPersistence(namespace, new PersistencePolicies(3, 3, 3, 10.0)); assertEquals(admin.namespaces().getPersistence(namespace), new PersistencePolicies(3, 3, 3, 10.0)); 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 b303386c65ffd..9a19271680b25 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 @@ -24,6 +24,7 @@ import static org.mockito.Mockito.verify; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertFalse; +import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertNotEquals; import static org.testng.Assert.assertNotNull; import static org.testng.Assert.assertNull; @@ -829,7 +830,7 @@ public void namespaces() throws Exception { policies.is_allow_auto_update_schema = conf.isAllowAutoUpdateSchemaEnabled(); assertEquals(admin.namespaces().getPolicies("prop-xyz/ns1"), policies); - assertEquals(admin.namespaces().getPersistence("prop-xyz/ns1"), null); + assertEquals(admin.namespaces().getPersistence("prop-xyz/ns1"), new PersistencePolicies(2, 2, 2, 1.0)); admin.namespaces().setPersistence("prop-xyz/ns1", new PersistencePolicies(3, 2, 1, 10.0)); assertEquals(admin.namespaces().getPersistence("prop-xyz/ns1"), new PersistencePolicies(3, 2, 1, 10.0)); @@ -3453,6 +3454,17 @@ public void testPeekEncryptedMessages() throws Exception { } } + @Test + public void testGetPersistenceAPI() throws Exception { + String namespace = "prop-xyz/test/persistence"; + admin.namespaces().createNamespace(namespace); + PersistencePolicies persistencePolicies = admin.namespaces().getPersistence(namespace); + assertNotNull(persistencePolicies); + assertEquals(persistencePolicies.getBookkeeperEnsemble(), conf.getManagedLedgerDefaultEnsembleSize()); + assertEquals(persistencePolicies.getBookkeeperWriteQuorum(), conf.getManagedLedgerDefaultWriteQuorum()); + assertEquals(persistencePolicies.getBookkeeperAckQuorum(), conf.getManagedLedgerDefaultAckQuorum()); + } + @Test public void testGetPartitionStatsWithEarliestTimeInBacklog() throws PulsarAdminException, PulsarClientException { final String topicName = "persistent://prop-xyz/ns1/testPeekEncryptedMessages-" + UUID.randomUUID();