From fdb8409e383243c8a3bbf7e8a1d4c852f607c4f2 Mon Sep 17 00:00:00 2001
From: Jan-Peter Nilsson <67913129+jpn-e@users.noreply.github.com>
Date: Tue, 08 Sep 2020 14:51:22 +0000
Subject: [PATCH] Blacklist misbehaving servers for a little bit (#144)
---
opendj-server-legacy/src/main/java/org/opends/server/replication/server/ReplicationServer.java | 16 ++++++++++++++--
1 files changed, 14 insertions(+), 2 deletions(-)
diff --git a/opendj-server-legacy/src/main/java/org/opends/server/replication/server/ReplicationServer.java b/opendj-server-legacy/src/main/java/org/opends/server/replication/server/ReplicationServer.java
index 279041a..b4b6c8b 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/replication/server/ReplicationServer.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/replication/server/ReplicationServer.java
@@ -309,6 +309,7 @@
{
synchronized (connectThreadLock)
{
+ final Map<HostPort, Long> blacklistedHosts = new HashMap<>();
while (!shutdown.get())
{
HostPort localAddress = HostPort.localAddress(getReplicationPort());
@@ -336,7 +337,16 @@
continue; // Skip: avoid connecting to self.
}
- connect(rsAddress, domain.getBaseDN());
+ if (blacklistedHosts.getOrDefault(rsAddress, 0L) > domainTicket)
+ {
+ continue; // Skip: avoid connecting to blacklisted hosts.
+ }
+
+ if (!connect(rsAddress, domain.getBaseDN()))
+ {
+ // Blacklist for a few iterations
+ blacklistedHosts.put(rsAddress, domainTicket + 6);
+ }
}
}
@@ -381,7 +391,7 @@
* @param baseDN
* The baseDN of the connection
*/
- private void connect(HostPort remoteServerAddress, DN baseDN)
+ private boolean connect(HostPort remoteServerAddress, DN baseDN)
{
boolean sslEncryption = replSessionSecurity.isSslEncryption();
@@ -414,7 +424,9 @@
logger.traceException(e);
close(session);
close(socket);
+ return false;
}
+ return true;
}
/** Initialization function for the replicationServer. */
--
Gitblit v1.10.0