This is an automated email from the ASF dual-hosted git repository.
dlmarion pushed a commit to branch 2.1
in repository https://gitbox.apache.org/repos/asf/accumulo.git
The following commit(s) were added to refs/heads/2.1 by this push:
new a2ca2bc382 Created bind addr property (#5599)
a2ca2bc382 is described below
commit a2ca2bc382196f53ac1e096fa6d29d964d0ac756
Author: Dave Marion <[email protected]>
AuthorDate: Wed Jun 11 13:04:15 2025 -0400
Created bind addr property (#5599)
This change includes a new property, rpc.bind.addr, which
was included in 3.0 as general.process.bind.addr in #3192,
backports ConfigOptsTest from #3192, and changes to
AbstractServer to use either the '-a' or '-o rpc.bind.addr'
bind address as the hostname.
Closes #5430
Co-authored-by: Christopher Tubbs <[email protected]>
Co-authored-by: Daniel Roberts <[email protected]>
---
.../org/apache/accumulo/core/conf/Property.java | 3 +++
.../apache/accumulo/core/cli/ConfigOptsTest.java | 31 +++++++++++++++-------
.../org/apache/accumulo/server/AbstractServer.java | 24 +++++++++++++++--
.../org/apache/accumulo/server/ServerOpts.java | 7 +++--
.../apache/accumulo/server/rpc/TServerUtils.java | 5 ++--
.../org/apache/accumulo/server/ServerOptsTest.java | 2 +-
.../java/org/apache/accumulo/monitor/Monitor.java | 2 +-
.../test/functional/GarbageCollectorIT.java | 3 ++-
.../accumulo/test/functional/ZombieTServer.java | 3 ++-
.../apache/accumulo/test/metrics/MetricsIT.java | 3 ++-
.../accumulo/test/performance/NullTserver.java | 4 ++-
11 files changed, 65 insertions(+), 22 deletions(-)
diff --git a/core/src/main/java/org/apache/accumulo/core/conf/Property.java
b/core/src/main/java/org/apache/accumulo/core/conf/Property.java
index 5a938c1a3f..adfd95a66b 100644
--- a/core/src/main/java/org/apache/accumulo/core/conf/Property.java
+++ b/core/src/main/java/org/apache/accumulo/core/conf/Property.java
@@ -54,6 +54,9 @@ public enum Property {
"Properties in this category related to the configuration of SSL keys
for"
+ " RPC. See also `instance.ssl.enabled`.",
"1.6.0"),
+ RPC_PROCESS_BIND_ADDRESS("rpc.bind.addr", "", PropertyType.STRING,
+ "The local IP address to which this server should bind for sending and
receiving network traffic. If not set then the process binds to all addresses.",
+ "2.1.4"),
RPC_MAX_MESSAGE_SIZE("rpc.message.size.max",
Integer.toString(Integer.MAX_VALUE),
PropertyType.BYTES, "The maximum size of a message that can be received
by a server.",
"2.1.3"),
diff --git
a/server/base/src/test/java/org/apache/accumulo/server/ServerOptsTest.java
b/core/src/test/java/org/apache/accumulo/core/cli/ConfigOptsTest.java
similarity index 60%
copy from
server/base/src/test/java/org/apache/accumulo/server/ServerOptsTest.java
copy to core/src/test/java/org/apache/accumulo/core/cli/ConfigOptsTest.java
index 1cde30e02e..e991bc74a3 100644
--- a/server/base/src/test/java/org/apache/accumulo/server/ServerOptsTest.java
+++ b/core/src/test/java/org/apache/accumulo/core/cli/ConfigOptsTest.java
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.accumulo.server;
+package org.apache.accumulo.core.cli;
import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -26,32 +26,43 @@ import org.apache.accumulo.core.conf.Property;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
-public class ServerOptsTest {
- private ServerOpts opts;
+public class ConfigOptsTest {
+ private ConfigOpts opts;
@BeforeEach
public void setUp() {
- opts = new ServerOpts();
+ opts = new ConfigOpts();
}
@Test
public void testGetAddress() {
- opts.parseArgs(ServerOptsTest.class.getName(), new String[] {"-a",
"1.2.3.4"});
- assertEquals("1.2.3.4", opts.getAddress());
+ opts.parseArgs(ConfigOptsTest.class.getName(),
+ new String[] {"-o", Property.RPC_PROCESS_BIND_ADDRESS.getKey() +
"=1.2.3.4"});
+ assertEquals("1.2.3.4",
opts.getSiteConfiguration().get(Property.RPC_PROCESS_BIND_ADDRESS));
}
@Test
- public void testGetAddress_NOne() {
- opts.parseArgs(ServerOptsTest.class.getName(), new String[] {});
- assertEquals("0.0.0.0", opts.getAddress());
+ public void testGetAddress_None() {
+ opts.parseArgs(ConfigOptsTest.class.getName(), new String[] {});
+ assertEquals("",
opts.getSiteConfiguration().get(Property.RPC_PROCESS_BIND_ADDRESS));
}
@Test
public void testOverrideConfig() {
AccumuloConfiguration defaults = DefaultConfiguration.getInstance();
assertEquals("localhost:2181", defaults.get(Property.INSTANCE_ZK_HOST));
- opts.parseArgs(ServerOptsTest.class.getName(),
+ opts.parseArgs(ConfigOptsTest.class.getName(),
new String[] {"-o", "instance.zookeeper.host=test:123"});
assertEquals("test:123",
opts.getSiteConfiguration().get(Property.INSTANCE_ZK_HOST));
}
+
+ @Test
+ public void testOverrideMultiple() {
+ opts.parseArgs(ConfigOptsTest.class.getName(),
+ new String[] {"-o", Property.RPC_PROCESS_BIND_ADDRESS.getKey() +
"=1.2.3.4", "-o",
+ Property.SSERV_CLIENTPORT.getKey() + "=8888"});
+ assertEquals("1.2.3.4",
opts.getSiteConfiguration().get(Property.RPC_PROCESS_BIND_ADDRESS));
+ assertEquals("8888",
opts.getSiteConfiguration().get(Property.SSERV_CLIENTPORT));
+ }
+
}
diff --git
a/server/base/src/main/java/org/apache/accumulo/server/AbstractServer.java
b/server/base/src/main/java/org/apache/accumulo/server/AbstractServer.java
index 37cb9ee381..932eb0d078 100644
--- a/server/base/src/main/java/org/apache/accumulo/server/AbstractServer.java
+++ b/server/base/src/main/java/org/apache/accumulo/server/AbstractServer.java
@@ -18,7 +18,6 @@
*/
package org.apache.accumulo.server;
-import java.util.Objects;
import java.util.OptionalInt;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean;
@@ -65,8 +64,29 @@ public abstract class AbstractServer
this.log = LoggerFactory.getLogger(getClass().getName());
this.applicationName = appName;
opts.parseArgs(appName, args);
- this.hostname = Objects.requireNonNull(opts.getAddress());
var siteConfig = opts.getSiteConfiguration();
+ boolean oldBindParameterSpecifiedOnCmdLine = false;
+ boolean newBindParameterSpecified = false;
+ for (String arg : args) {
+ if (arg.equals("-a") || arg.equals("--address")) {
+ oldBindParameterSpecifiedOnCmdLine = true;
+ } else if (siteConfig.isPropertySet(Property.RPC_PROCESS_BIND_ADDRESS)) {
+ newBindParameterSpecified = true;
+ }
+ }
+ if (oldBindParameterSpecifiedOnCmdLine && newBindParameterSpecified) {
+ throw new IllegalStateException("Argument '-a' cannot be used with
property 'rpc.bind.addr'");
+ }
+ final String newBindParameter =
siteConfig.get(Property.RPC_PROCESS_BIND_ADDRESS);
+ // If new bind parameter passed on command line or in file, then use it.
+ if (newBindParameterSpecified
+ ||
!newBindParameter.equals(Property.RPC_PROCESS_BIND_ADDRESS.getDefaultValue())) {
+ this.hostname = newBindParameter;
+ } else if (oldBindParameterSpecifiedOnCmdLine) {
+ this.hostname = opts.getAddress();
+ } else {
+ this.hostname = ServerOpts.BIND_ALL_ADDRESSES;
+ }
SecurityUtil.serverLogin(siteConfig);
context = new ServerContext(siteConfig);
final String upgradePrepNode = context.getZooKeeperRoot() +
Constants.ZPREPARE_FOR_UPGRADE;
diff --git
a/server/base/src/main/java/org/apache/accumulo/server/ServerOpts.java
b/server/base/src/main/java/org/apache/accumulo/server/ServerOpts.java
index 3bde48f436..3e73d98127 100644
--- a/server/base/src/main/java/org/apache/accumulo/server/ServerOpts.java
+++ b/server/base/src/main/java/org/apache/accumulo/server/ServerOpts.java
@@ -24,13 +24,16 @@ import com.beust.jcommander.Parameter;
public class ServerOpts extends ConfigOpts {
- @Parameter(names = {"-a", "--address"}, description = "address to bind to")
+ public static final String BIND_ALL_ADDRESSES = "0.0.0.0";
+
+ @Parameter(names = {"-a", "--address"},
+ description = "address to bind to (deprecated, use `-o
rpc.bind.addr=<address>` instead)")
private String address = null;
public String getAddress() {
if (address != null) {
return address;
}
- return "0.0.0.0";
+ return BIND_ALL_ADDRESSES;
}
}
diff --git
a/server/base/src/main/java/org/apache/accumulo/server/rpc/TServerUtils.java
b/server/base/src/main/java/org/apache/accumulo/server/rpc/TServerUtils.java
index ea2572ffe7..7c34b6601d 100644
--- a/server/base/src/main/java/org/apache/accumulo/server/rpc/TServerUtils.java
+++ b/server/base/src/main/java/org/apache/accumulo/server/rpc/TServerUtils.java
@@ -53,6 +53,7 @@ import org.apache.accumulo.core.util.UtilWaitThread;
import org.apache.accumulo.core.util.threads.ThreadPools;
import org.apache.accumulo.core.util.threads.Threads;
import org.apache.accumulo.server.ServerContext;
+import org.apache.accumulo.server.ServerOpts;
import org.apache.hadoop.security.SaslRpcServer;
import org.apache.hadoop.security.UserGroupInformation;
import org.apache.thrift.TProcessor;
@@ -498,7 +499,7 @@ public class TServerUtils {
// If we can't get a real hostname from the provided host test, use the
hostname from DNS for
// localhost
- if ("0.0.0.0".equals(hostname)) {
+ if (ServerOpts.BIND_ALL_ADDRESSES.equals(hostname)) {
hostname = fqdn;
}
@@ -669,7 +670,7 @@ public class TServerUtils {
}
// check for the special "bind to everything address"
- if (serverAddress.address.getHost().equals("0.0.0.0")) {
+ if (serverAddress.address.getHost().equals(ServerOpts.BIND_ALL_ADDRESSES))
{
// can't get the address from the bind, so we'll do our best to invent
our hostname
try {
serverAddress = new ServerAddress(finalServer, HostAndPort
diff --git
a/server/base/src/test/java/org/apache/accumulo/server/ServerOptsTest.java
b/server/base/src/test/java/org/apache/accumulo/server/ServerOptsTest.java
index 1cde30e02e..8314f43ad9 100644
--- a/server/base/src/test/java/org/apache/accumulo/server/ServerOptsTest.java
+++ b/server/base/src/test/java/org/apache/accumulo/server/ServerOptsTest.java
@@ -43,7 +43,7 @@ public class ServerOptsTest {
@Test
public void testGetAddress_NOne() {
opts.parseArgs(ServerOptsTest.class.getName(), new String[] {});
- assertEquals("0.0.0.0", opts.getAddress());
+ assertEquals(ServerOpts.BIND_ALL_ADDRESSES, opts.getAddress());
}
@Test
diff --git
a/server/monitor/src/main/java/org/apache/accumulo/monitor/Monitor.java
b/server/monitor/src/main/java/org/apache/accumulo/monitor/Monitor.java
index defa59dacd..369e725734 100644
--- a/server/monitor/src/main/java/org/apache/accumulo/monitor/Monitor.java
+++ b/server/monitor/src/main/java/org/apache/accumulo/monitor/Monitor.java
@@ -482,7 +482,7 @@ public class Monitor extends AbstractServer implements
HighlyAvailableService {
}
String advertiseHost = getHostname();
- if (advertiseHost.equals("0.0.0.0")) {
+ if (advertiseHost.equals(ServerOpts.BIND_ALL_ADDRESSES)) {
try {
advertiseHost = InetAddress.getLocalHost().getHostName();
} catch (UnknownHostException e) {
diff --git
a/test/src/main/java/org/apache/accumulo/test/functional/GarbageCollectorIT.java
b/test/src/main/java/org/apache/accumulo/test/functional/GarbageCollectorIT.java
index d4b34debf4..25e89fbd60 100644
---
a/test/src/main/java/org/apache/accumulo/test/functional/GarbageCollectorIT.java
+++
b/test/src/main/java/org/apache/accumulo/test/functional/GarbageCollectorIT.java
@@ -71,6 +71,7 @@ import
org.apache.accumulo.miniclusterImpl.MiniAccumuloClusterImpl.ProcessInfo;
import org.apache.accumulo.miniclusterImpl.MiniAccumuloConfigImpl;
import org.apache.accumulo.miniclusterImpl.ProcessNotFoundException;
import org.apache.accumulo.miniclusterImpl.ProcessReference;
+import org.apache.accumulo.server.ServerOpts;
import org.apache.accumulo.test.TestIngest;
import org.apache.accumulo.test.VerifyIngest;
import org.apache.accumulo.test.VerifyIngest.VerifyParams;
@@ -436,7 +437,7 @@ public class GarbageCollectorIT extends ConfigurableMacBase
{
String host = addr.substring(0, addrSplit), port =
addr.substring(addrSplit + 1);
// We shouldn't have the "bindall" address in zk
- assertNotEquals("0.0.0.0", host);
+ assertNotEquals(ServerOpts.BIND_ALL_ADDRESSES, host);
// Nor should we have the "random port" in zk
assertNotEquals(0, Integer.parseInt(port));
return;
diff --git
a/test/src/main/java/org/apache/accumulo/test/functional/ZombieTServer.java
b/test/src/main/java/org/apache/accumulo/test/functional/ZombieTServer.java
index 0b755ba0a1..3703b717a8 100644
--- a/test/src/main/java/org/apache/accumulo/test/functional/ZombieTServer.java
+++ b/test/src/main/java/org/apache/accumulo/test/functional/ZombieTServer.java
@@ -48,6 +48,7 @@ import org.apache.accumulo.core.util.ServerServices;
import org.apache.accumulo.core.util.ServerServices.Service;
import org.apache.accumulo.core.util.threads.ThreadPools;
import org.apache.accumulo.server.ServerContext;
+import org.apache.accumulo.server.ServerOpts;
import org.apache.accumulo.server.client.ClientServiceHandler;
import org.apache.accumulo.server.rpc.ServerAddress;
import org.apache.accumulo.server.rpc.TServerUtils;
@@ -126,7 +127,7 @@ public class ZombieTServer {
ThriftServerType.CUSTOM_HS_HA, muxProcessor, "ZombieTServer", "walking
dead", 2,
ThreadPools.DEFAULT_TIMEOUT_MILLISECS, 1000, 10 * 1024 * 1024, null,
null, -1,
context.getConfiguration().getCount(Property.RPC_BACKLOG),
context.getMetricsInfo(), false,
- HostAndPort.fromParts("0.0.0.0", port));
+ HostAndPort.fromParts(ServerOpts.BIND_ALL_ADDRESSES, port));
String addressString = serverPort.address.toString();
var zLockPath =
diff --git a/test/src/main/java/org/apache/accumulo/test/metrics/MetricsIT.java
b/test/src/main/java/org/apache/accumulo/test/metrics/MetricsIT.java
index 77c76f41ad..b7cefe3c8b 100644
--- a/test/src/main/java/org/apache/accumulo/test/metrics/MetricsIT.java
+++ b/test/src/main/java/org/apache/accumulo/test/metrics/MetricsIT.java
@@ -45,6 +45,7 @@ import org.apache.accumulo.core.data.Value;
import org.apache.accumulo.core.metrics.MetricsProducer;
import org.apache.accumulo.core.spi.metrics.LoggingMeterRegistryFactory;
import org.apache.accumulo.miniclusterImpl.MiniAccumuloConfigImpl;
+import org.apache.accumulo.server.ServerOpts;
import org.apache.accumulo.test.functional.ConfigurableMacBase;
import org.apache.accumulo.test.metrics.TestStatsDSink.Metric;
import org.apache.hadoop.conf.Configuration;
@@ -206,7 +207,7 @@ public class MetricsIT extends ConfigurableMacBase
implements MetricsProducer {
var t = a.getTags();
log.trace("METRICS, name: '{}' num tags: {}, tags: {}",
a.getName(), t.size(), t);
// check hostname is always set and is valid
- assertNotEquals("0.0.0.0", a.getTags().get("host"));
+ assertNotEquals(ServerOpts.BIND_ALL_ADDRESSES,
a.getTags().get("host"));
assertNotNull(a.getTags().get("instance.name"));
// check the length of the tag value is sane
diff --git
a/test/src/main/java/org/apache/accumulo/test/performance/NullTserver.java
b/test/src/main/java/org/apache/accumulo/test/performance/NullTserver.java
index e470d1ff48..d9625eaa21 100644
--- a/test/src/main/java/org/apache/accumulo/test/performance/NullTserver.java
+++ b/test/src/main/java/org/apache/accumulo/test/performance/NullTserver.java
@@ -74,6 +74,7 @@ import org.apache.accumulo.core.trace.thrift.TInfo;
import org.apache.accumulo.core.util.HostAndPort;
import org.apache.accumulo.core.util.threads.ThreadPools;
import org.apache.accumulo.server.ServerContext;
+import org.apache.accumulo.server.ServerOpts;
import org.apache.accumulo.server.client.ClientServiceHandler;
import org.apache.accumulo.server.manager.state.Assignment;
import org.apache.accumulo.server.manager.state.MetaDataTableScanner;
@@ -349,7 +350,8 @@ public class NullTserver {
TServerUtils.startTServer(context.getConfiguration(),
ThriftServerType.CUSTOM_HS_HA,
muxProcessor, "NullTServer", "null tserver", 2,
ThreadPools.DEFAULT_TIMEOUT_MILLISECS, 1000,
10 * 1024 * 1024, null, null, -1,
context.getConfiguration().getCount(Property.RPC_BACKLOG),
- context.getMetricsInfo(), false, HostAndPort.fromParts("0.0.0.0",
opts.port));
+ context.getMetricsInfo(), false,
+ HostAndPort.fromParts(ServerOpts.BIND_ALL_ADDRESSES, opts.port));
HostAndPort addr =
HostAndPort.fromParts(InetAddress.getLocalHost().getHostName(), opts.port);