Skip to content

Commit add792b

Browse files
authored
[fix] [admin] set offload threshold should fail if ns policies is read-only (apache#19383)
1 parent a4c3034 commit add792b

File tree

3 files changed

+25
-2
lines changed

3 files changed

+25
-2
lines changed

pulsar-broker-common/src/main/java/org/apache/pulsar/broker/resources/NamespaceResources.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ public class NamespaceResources extends BaseResources<Policies> {
5050
private final PartitionedTopicResources partitionedTopicResources;
5151
private final MetadataStore configurationStore;
5252

53-
private static final String POLICIES_READONLY_FLAG_PATH = "/admin/flags/policies-readonly";
53+
public static final String POLICIES_READONLY_FLAG_PATH = "/admin/flags/policies-readonly";
5454
private static final String NAMESPACE_BASE_PATH = "/namespace";
5555
private static final String BUNDLE_DATA_BASE_PATH = "/loadbalance/bundle-data";
5656

pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/impl/NamespacesBase.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2046,7 +2046,7 @@ protected CompletableFuture<Void> internalSetOffloadThresholdInSecondsAsync(long
20462046
CompletableFuture<Void> f = new CompletableFuture<>();
20472047

20482048
validateNamespacePolicyOperationAsync(namespaceName, PolicyName.OFFLOAD, PolicyOperation.WRITE)
2049-
.thenApply(v -> validatePoliciesReadOnlyAccessAsync())
2049+
.thenCompose(v -> validatePoliciesReadOnlyAccessAsync())
20502050
.thenCompose(v -> updatePoliciesAsync(namespaceName,
20512051
policies -> {
20522052
if (policies.offload_policies == null) {

pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiOffloadTest.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,14 +47,17 @@
4747
import static org.testng.Assert.assertNotNull;
4848
import static org.testng.Assert.assertNull;
4949
import static org.testng.Assert.assertTrue;
50+
import static org.testng.Assert.fail;
5051
import java.util.HashMap;
5152
import java.util.Map;
53+
import java.util.Optional;
5254
import java.util.Set;
5355
import java.util.UUID;
5456
import java.util.concurrent.CompletableFuture;
5557
import org.apache.bookkeeper.mledger.LedgerOffloader;
5658
import org.apache.bookkeeper.mledger.ManagedLedgerInfo;
5759
import org.apache.pulsar.broker.auth.MockedPulsarServiceBaseTest;
60+
import org.apache.pulsar.broker.resources.NamespaceResources;
5861
import org.apache.pulsar.broker.service.persistent.PersistentTopic;
5962
import org.apache.pulsar.client.admin.LongRunningProcessStatus;
6063
import org.apache.pulsar.client.admin.PulsarAdminException.ConflictException;
@@ -290,6 +293,26 @@ public void testSetNamespaceOffloadPolicies() throws Exception {
290293
assertEquals(admin.namespaces().getOffloadPolicies(myNamespace), policies);
291294
}
292295

296+
@Test
297+
public void testSetNamespaceOffloadPoliciesFailByReadOnly() throws Exception {
298+
boolean setNsPolicyReadOnlySuccess = false;
299+
try {
300+
pulsar.getConfigurationMetadataStore().put(NamespaceResources.POLICIES_READONLY_FLAG_PATH, "0".getBytes(),
301+
Optional.empty()).join();
302+
setNsPolicyReadOnlySuccess = true;
303+
admin.namespaces().setOffloadThresholdInSeconds(myNamespace, 300);
304+
fail("set offload threshold should fail when ns policies is readonly");
305+
} catch (Exception ex){
306+
// ignore.
307+
} finally {
308+
// cleanup.
309+
if (setNsPolicyReadOnlySuccess) {
310+
pulsar.getConfigurationMetadataStore().delete(NamespaceResources.POLICIES_READONLY_FLAG_PATH,
311+
Optional.empty()).join();
312+
}
313+
}
314+
}
315+
293316
@Test
294317
public void testSetTopicOffloadPolicies() throws Exception {
295318
conf.setManagedLedgerOffloadThresholdInSeconds(100);

0 commit comments

Comments
 (0)