You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pulsar.apache.org by mm...@apache.org on 2019/06/27 17:48:58 UTC
[pulsar] branch master updated: [pulsar-admin] update dynamic
config with escape char (#4611)
This is an automated email from the ASF dual-hosted git repository.
mmerli 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 8bff618 [pulsar-admin] update dynamic config with escape char (#4611)
8bff618 is described below
commit 8bff6183477ab7ba28978acc6b253505d5cacc40
Author: Rajan Dhabalia <rd...@apache.org>
AuthorDate: Thu Jun 27 10:48:53 2019 -0700
[pulsar-admin] update dynamic config with escape char (#4611)
---
.../java/org/apache/pulsar/broker/ServiceConfiguration.java | 1 +
.../java/org/apache/pulsar/broker/admin/AdminApiTest.java | 11 +++++++++++
.../org/apache/pulsar/client/admin/internal/BrokersImpl.java | 4 +++-
3 files changed, 15 insertions(+), 1 deletion(-)
diff --git a/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/ServiceConfiguration.java b/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/ServiceConfiguration.java
index a0490b6..9932063 100644
--- a/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/ServiceConfiguration.java
+++ b/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/ServiceConfiguration.java
@@ -617,6 +617,7 @@ public class ServiceConfiguration implements PulsarConfiguration {
@FieldContext(
category = CATEGORY_AUTHORIZATION,
+ dynamic = true,
doc = "Role names that are treated as `super-user`, meaning they will be able to"
+ " do all admin operations and publish/consume from all topics"
)
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 16a3467..89dd2b0 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
@@ -468,6 +468,17 @@ public class AdminApiTest extends MockedPulsarServiceBaseTest {
} catch (Exception e) {
assertTrue(e instanceof PreconditionFailedException);
}
+
+ // (4) try to update dynamic-field with special char "/" and "%"
+ String user1 = "test/test%&$*/^";
+ String user2 = "user2/password";
+ final String configValue = user1 + "," + user2;
+ admin.brokers().updateDynamicConfiguration("superUserRoles", configValue);
+ String storedValue = admin.brokers().getAllDynamicConfigurations().get("superUserRoles");
+ assertEquals(configValue, storedValue);
+ retryStrategically((test) -> pulsar.getConfiguration().getSuperUserRoles().size() == 2, 5, 200);
+ assertTrue(pulsar.getConfiguration().getSuperUserRoles().contains(user1));
+ assertTrue(pulsar.getConfiguration().getSuperUserRoles().contains(user2));
}
diff --git a/pulsar-client-admin/src/main/java/org/apache/pulsar/client/admin/internal/BrokersImpl.java b/pulsar-client-admin/src/main/java/org/apache/pulsar/client/admin/internal/BrokersImpl.java
index 4fe345f..84f28c6 100644
--- a/pulsar-client-admin/src/main/java/org/apache/pulsar/client/admin/internal/BrokersImpl.java
+++ b/pulsar-client-admin/src/main/java/org/apache/pulsar/client/admin/internal/BrokersImpl.java
@@ -31,6 +31,7 @@ import org.apache.pulsar.client.api.Authentication;
import org.apache.pulsar.common.conf.InternalConfigurationData;
import org.apache.pulsar.common.policies.data.ErrorData;
import org.apache.pulsar.common.policies.data.NamespaceOwnershipStatus;
+import org.apache.pulsar.common.util.Codec;
public class BrokersImpl extends BaseResource implements Brokers {
private final WebTarget adminBrokers;
@@ -65,7 +66,8 @@ public class BrokersImpl extends BaseResource implements Brokers {
@Override
public void updateDynamicConfiguration(String configName, String configValue) throws PulsarAdminException {
try {
- request(adminBrokers.path("/configuration/").path(configName).path(configValue)).post(Entity.json(""),
+ String value = Codec.encode(configValue);
+ request(adminBrokers.path("/configuration/").path(configName).path(value)).post(Entity.json(""),
ErrorData.class);
} catch (Exception e) {
throw getApiException(e);