aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarald Musum <musum@yahooinc.com>2022-09-20 14:05:03 +0200
committerHarald Musum <musum@yahooinc.com>2022-09-20 14:05:03 +0200
commit8a8beeb565815fb71ce8c93cc70c1fc189a53216 (patch)
treef84565e9c226abb6d8ac912f1c9fd392e1e876c7
parentfb8e352681560ca139295d7e0b2251734cbdfeef (diff)
Simplify exception handling when doing connect in rpc server
-rw-r--r--clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/FleetController.java9
-rw-r--r--clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/rpc/RpcServer.java38
2 files changed, 16 insertions, 31 deletions
diff --git a/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/FleetController.java b/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/FleetController.java
index 80b79f4eb13..0baf1bba4fa 100644
--- a/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/FleetController.java
+++ b/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/FleetController.java
@@ -3,7 +3,6 @@ package com.yahoo.vespa.clustercontroller.core;
import com.yahoo.document.FixedBucketSpaces;
import com.yahoo.exception.ExceptionUtils;
-import com.yahoo.jrt.ListenFailedException;
import com.yahoo.vdslib.distribution.ConfiguredNode;
import com.yahoo.vdslib.state.ClusterState;
import com.yahoo.vdslib.state.Node;
@@ -511,13 +510,7 @@ public class FleetController implements NodeListener, SlobrokListener, SystemSta
if (rpcServer != null) {
rpcServer.setMasterElectionHandler(masterElectionHandler);
- try{
- rpcServer.setSlobrokConnectionSpecs(options.slobrokConnectionSpecs(), options.rpcPort());
- } catch (ListenFailedException e) {
- context.log(logger, Level.WARNING, "Failed to bind RPC server to port " + options.rpcPort() + ". This may be natural if cluster has altered the services running on this node: " + e.getMessage());
- } catch (Exception e) {
- context.log(logger, Level.WARNING, "Failed to initialize RPC server socket: " + e.getMessage());
- }
+ rpcServer.setSlobrokConnectionSpecs(options.slobrokConnectionSpecs(), options.rpcPort());
}
try {
diff --git a/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/rpc/RpcServer.java b/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/rpc/RpcServer.java
index 5bc4e344ec3..dcef432aec0 100644
--- a/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/rpc/RpcServer.java
+++ b/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/rpc/RpcServer.java
@@ -4,7 +4,6 @@ package com.yahoo.vespa.clustercontroller.core.rpc;
import com.yahoo.jrt.Acceptor;
import com.yahoo.jrt.ErrorCode;
import com.yahoo.jrt.Int32Value;
-import com.yahoo.jrt.ListenFailedException;
import com.yahoo.jrt.Method;
import com.yahoo.jrt.Request;
import com.yahoo.jrt.Spec;
@@ -28,7 +27,6 @@ import com.yahoo.vespa.clustercontroller.core.Timer;
import com.yahoo.vespa.clustercontroller.core.listeners.NodeListener;
import java.io.PrintWriter;
import java.io.StringWriter;
-import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
@@ -79,7 +77,7 @@ public class RpcServer {
return "storage/cluster." + clusterName + "/fleetcontroller/" + fleetControllerIndex;
}
- public void setSlobrokConnectionSpecs(String[] slobrokConnectionSpecs, int port) throws ListenFailedException, UnknownHostException {
+ public void setSlobrokConnectionSpecs(String[] slobrokConnectionSpecs, int port) {
if (this.slobrokConnectionSpecs == null
|| !Arrays.equals(this.slobrokConnectionSpecs, slobrokConnectionSpecs)
|| this.port != port) {
@@ -94,12 +92,21 @@ public class RpcServer {
return (register != null);
}
- public void connect() throws ListenFailedException, UnknownHostException {
+ public void connect() {
disconnect();
supervisor = new Supervisor(new Transport("rpc" + port)).setDropEmptyBuffers(true);
addMethods();
log.log(Level.FINE, () -> "Fleetcontroller " + fleetControllerIndex + ": RPC server attempting to bind to port " + port);
- acceptor = supervisor.listen(new Spec(port));
+ try {
+ acceptor = supervisor.listen(new Spec(port));
+ } catch (Exception e) {
+ long time = timer.getCurrentTimeInMillis();
+ if (!e.getMessage().equals(lastConnectError) || time - lastConnectErrorTime > 60 * 1000) {
+ lastConnectError = e.getMessage();
+ lastConnectErrorTime = time;
+ log.log(Level.WARNING, "Failed to bind or initialize RPC server socket: " + e.getMessage());
+ }
+ }
log.log(Level.FINE, () -> "Fleetcontroller " + fleetControllerIndex + ": RPC server listening to port " + acceptor.port());
SlobrokList slist = new SlobrokList();
slist.setup(slobrokConnectionSpecs);
@@ -176,25 +183,10 @@ public class RpcServer {
}
public boolean handleRpcRequests(ContentCluster cluster, ClusterState systemState, NodeListener changeListener) {
+ if (!isConnected())
+ connect();
+
boolean handledAnyRequests = false;
- if (!isConnected()) {
- long time = timer.getCurrentTimeInMillis();
- try{
- connect();
- } catch (ListenFailedException e) {
- if (!e.getMessage().equals(lastConnectError) || time - lastConnectErrorTime > 60 * 1000) {
- lastConnectError = e.getMessage();
- lastConnectErrorTime = time;
- log.log(Level.WARNING, "Failed to bind RPC server to port " + port +": " + e.getMessage());
- }
- } catch (Exception e) {
- if (!e.getMessage().equals(lastConnectError) || time - lastConnectErrorTime > 60 * 1000) {
- lastConnectError = e.getMessage();
- lastConnectErrorTime = time;
- log.log(Level.WARNING, "Failed to initialize RPC server socket: " + e.getMessage());
- }
- }
- }
for (int j=0; j<10; ++j) { // Max perform 10 RPC requests per cycle.
Request req;
synchronized(monitor) {