From 5378ec5a12125fb0d17e8a0bcdb76a8979d6ee2a Mon Sep 17 00:00:00 2001 From: Xiaoyu Hou Date: Fri, 31 Dec 2021 17:05:39 +0800 Subject: [PATCH] Support ip as advertisedAddress --- .../pulsar/broker/ServiceConfiguration.java | 12 +++++++++++- .../broker/ServiceConfigurationUtils.java | 19 +++++++++++++------ .../MultipleListenerValidatorTest.java | 10 ++++++++-- .../pulsar/PulsarStandaloneBuilder.java | 4 +++- .../apache/pulsar/broker/PulsarService.java | 11 ++++++++--- .../worker/PulsarFunctionE2ESecurityTest.java | 2 +- .../worker/PulsarFunctionLocalRunTest.java | 2 +- .../worker/PulsarFunctionPublishTest.java | 2 +- .../worker/PulsarWorkerAssignmentTest.java | 4 +++- .../pulsar/io/AbstractPulsarE2ETest.java | 2 +- .../pulsar/io/PulsarFunctionAdminTest.java | 2 +- .../pulsar/io/PulsarFunctionTlsTest.java | 2 +- .../proxy/server/ProxyConfiguration.java | 12 +++++++++++- .../pulsar/proxy/server/ProxyService.java | 4 +++- site2/docs/reference-configuration.md | 9 ++++++--- 15 files changed, 72 insertions(+), 25 deletions(-) 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 ed89818509de6..9b73930216fd2 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 @@ -187,10 +187,20 @@ public class ServiceConfiguration implements PulsarConfiguration { @FieldContext( category = CATEGORY_SERVER, doc = "Hostname or IP address the service advertises to the outside world." - + " If not set, the value of `InetAddress.getLocalHost().getHostname()` is used." + + " If `advertisedAddress` is not set, the value of `InetAddress.getLocalHost().getHostname()` is " + + "used by default." + + " If `advertisedAddress` is not set and `ipAsAdvertisedAddress` is set to true, the value of " + + "`InetAddress.getLocalHost().getHostAddress()` is used" ) private String advertisedAddress; + @FieldContext( + category = CATEGORY_SERVER, + doc = "If `ipAsAdvertisedAddress` is set to true and `advertisedAddress` is not set," + + " the value of `InetAddress.getLocalHost().getHostAddress()` is used to set the advertised address." + ) + private boolean ipAsAdvertisedAddress = false; + @FieldContext(category=CATEGORY_SERVER, doc = "Used to specify multiple advertised listeners for the broker." + " The value must format as :pulsar://:," diff --git a/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/ServiceConfigurationUtils.java b/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/ServiceConfigurationUtils.java index c47b8ca79812d..5b0117d9d04aa 100644 --- a/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/ServiceConfigurationUtils.java +++ b/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/ServiceConfigurationUtils.java @@ -33,15 +33,18 @@ public class ServiceConfigurationUtils { private static final Logger LOG = LoggerFactory.getLogger(ServiceConfigurationUtils.class); - public static String getDefaultOrConfiguredAddress(String configuredAddress) { + public static String getDefaultOrConfiguredAddress(String configuredAddress, boolean ipAsAdvertisedAddress) { if (isBlank(configuredAddress)) { - return unsafeLocalhostResolve(); + return unsafeLocalhostResolve(ipAsAdvertisedAddress); } return configuredAddress; } - public static String unsafeLocalhostResolve() { + public static String unsafeLocalhostResolve(boolean ipAsAdvertisedAddress) { try { + if (ipAsAdvertisedAddress) { + return InetAddress.getLocalHost().getHostAddress(); + } // Get the fully qualified hostname return InetAddress.getLocalHost().getCanonicalHostName(); } catch (UnknownHostException ex) { @@ -78,7 +81,7 @@ public static String getAppliedAdvertisedAddress(ServiceConfiguration configurat } } - return getDefaultOrConfiguredAddress(advertisedAddress); + return getDefaultOrConfiguredAddress(advertisedAddress, configuration.isIpAsAdvertisedAddress()); } /** @@ -91,7 +94,9 @@ public static AdvertisedListener getInternalListener(ServiceConfiguration config AdvertisedListener internal = result.get(config.getInternalListenerName()); if (internal == null) { // synthesize an advertised listener based on legacy configuration properties - String host = ServiceConfigurationUtils.getDefaultOrConfiguredAddress(config.getAdvertisedAddress()); + String host = ServiceConfigurationUtils.getDefaultOrConfiguredAddress( + config.getAdvertisedAddress(), + config.isIpAsAdvertisedAddress()); internal = AdvertisedListener.builder() .brokerServiceUrl(createUriOrNull("pulsar", host, config.getBrokerServicePort())) .brokerServiceUrlTls(createUriOrNull("pulsar+ssl", host, config.getBrokerServicePortTls())) @@ -109,7 +114,9 @@ private static URI createUriOrNull(String scheme, String hostname, Optional