This is an automated email from the ASF dual-hosted git repository.
lhotari pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/pulsar.git
The following commit(s) were added to refs/heads/master by this push:
new add792baf54 [fix] [admin] set offload threshold should fail if ns
policies is read-only (#19383)
add792baf54 is described below
commit add792baf54918ab726a09b6a590aa6e814bdaa7
Author: fengyubiao <[email protected]>
AuthorDate: Thu Feb 2 13:42:03 2023 +0800
[fix] [admin] set offload threshold should fail if ns policies is read-only
(#19383)
---
.../broker/resources/NamespaceResources.java | 2 +-
.../pulsar/broker/admin/impl/NamespacesBase.java | 2 +-
.../pulsar/broker/admin/AdminApiOffloadTest.java | 23 ++++++++++++++++++++++
3 files changed, 25 insertions(+), 2 deletions(-)
diff --git
a/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/resources/NamespaceResources.java
b/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/resources/NamespaceResources.java
index dd1c428380b..48f82596567 100644
---
a/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/resources/NamespaceResources.java
+++
b/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/resources/NamespaceResources.java
@@ -50,7 +50,7 @@ public class NamespaceResources extends
BaseResources<Policies> {
private final PartitionedTopicResources partitionedTopicResources;
private final MetadataStore configurationStore;
- private static final String POLICIES_READONLY_FLAG_PATH =
"/admin/flags/policies-readonly";
+ public static final String POLICIES_READONLY_FLAG_PATH =
"/admin/flags/policies-readonly";
private static final String NAMESPACE_BASE_PATH = "/namespace";
private static final String BUNDLE_DATA_BASE_PATH =
"/loadbalance/bundle-data";
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 324c8404875..44e2f46174a 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
@@ -2046,7 +2046,7 @@ public abstract class NamespacesBase extends
AdminResource {
CompletableFuture<Void> f = new CompletableFuture<>();
validateNamespacePolicyOperationAsync(namespaceName,
PolicyName.OFFLOAD, PolicyOperation.WRITE)
- .thenApply(v -> validatePoliciesReadOnlyAccessAsync())
+ .thenCompose(v -> validatePoliciesReadOnlyAccessAsync())
.thenCompose(v -> updatePoliciesAsync(namespaceName,
policies -> {
if (policies.offload_policies == null) {
diff --git
a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiOffloadTest.java
b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiOffloadTest.java
index 604bc437f19..c3265897b87 100644
---
a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiOffloadTest.java
+++
b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiOffloadTest.java
@@ -47,14 +47,17 @@ import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNotNull;
import static org.testng.Assert.assertNull;
import static org.testng.Assert.assertTrue;
+import static org.testng.Assert.fail;
import java.util.HashMap;
import java.util.Map;
+import java.util.Optional;
import java.util.Set;
import java.util.UUID;
import java.util.concurrent.CompletableFuture;
import org.apache.bookkeeper.mledger.LedgerOffloader;
import org.apache.bookkeeper.mledger.ManagedLedgerInfo;
import org.apache.pulsar.broker.auth.MockedPulsarServiceBaseTest;
+import org.apache.pulsar.broker.resources.NamespaceResources;
import org.apache.pulsar.broker.service.persistent.PersistentTopic;
import org.apache.pulsar.client.admin.LongRunningProcessStatus;
import org.apache.pulsar.client.admin.PulsarAdminException.ConflictException;
@@ -290,6 +293,26 @@ public class AdminApiOffloadTest extends
MockedPulsarServiceBaseTest {
assertEquals(admin.namespaces().getOffloadPolicies(myNamespace),
policies);
}
+ @Test
+ public void testSetNamespaceOffloadPoliciesFailByReadOnly() throws
Exception {
+ boolean setNsPolicyReadOnlySuccess = false;
+ try {
+
pulsar.getConfigurationMetadataStore().put(NamespaceResources.POLICIES_READONLY_FLAG_PATH,
"0".getBytes(),
+ Optional.empty()).join();
+ setNsPolicyReadOnlySuccess = true;
+ admin.namespaces().setOffloadThresholdInSeconds(myNamespace, 300);
+ fail("set offload threshold should fail when ns policies is
readonly");
+ } catch (Exception ex){
+ // ignore.
+ } finally {
+ // cleanup.
+ if (setNsPolicyReadOnlySuccess) {
+
pulsar.getConfigurationMetadataStore().delete(NamespaceResources.POLICIES_READONLY_FLAG_PATH,
+ Optional.empty()).join();
+ }
+ }
+ }
+
@Test
public void testSetTopicOffloadPolicies() throws Exception {
conf.setManagedLedgerOffloadThresholdInSeconds(100);