From f6cac0f50a0eab203bfde0dc3467a28a01e51881 Mon Sep 17 00:00:00 2001 From: Andrew Steinborn Date: Sun, 21 Oct 2018 20:03:38 -0400 Subject: [PATCH] Relax registration checks for same servers somewhat. If a server with the same ServerInfo is attempting to be re-registered, we will return the existing registered server, which is less surprising behavior than before. --- .../com/velocitypowered/proxy/server/ServerMap.java | 11 +++++++++-- .../com/velocitypowered/proxy/util/ServerMapTest.java | 8 ++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/proxy/src/main/java/com/velocitypowered/proxy/server/ServerMap.java b/proxy/src/main/java/com/velocitypowered/proxy/server/ServerMap.java index 2216387e..8ceb2397 100644 --- a/proxy/src/main/java/com/velocitypowered/proxy/server/ServerMap.java +++ b/proxy/src/main/java/com/velocitypowered/proxy/server/ServerMap.java @@ -34,8 +34,15 @@ public class ServerMap { Preconditions.checkNotNull(serverInfo, "serverInfo"); String lowerName = serverInfo.getName().toLowerCase(Locale.US); VelocityRegisteredServer rs = new VelocityRegisteredServer(server, serverInfo); - Preconditions.checkArgument(servers.putIfAbsent(lowerName, rs) == null, "Server with name %s already registered", serverInfo.getName()); - return rs; + + RegisteredServer existing = servers.putIfAbsent(lowerName, rs); + if (existing != null && !existing.getServerInfo().equals(serverInfo)) { + throw new IllegalArgumentException("Server with name " + serverInfo.getName() + " already registered"); + } else if (existing == null) { + return rs; + } else { + return existing; + } } public void unregister(ServerInfo serverInfo) { diff --git a/proxy/src/test/java/com/velocitypowered/proxy/util/ServerMapTest.java b/proxy/src/test/java/com/velocitypowered/proxy/util/ServerMapTest.java index 4105fdac..e2a1ab44 100644 --- a/proxy/src/test/java/com/velocitypowered/proxy/util/ServerMapTest.java +++ b/proxy/src/test/java/com/velocitypowered/proxy/util/ServerMapTest.java @@ -35,4 +35,12 @@ class ServerMapTest { ServerInfo willReject = new ServerInfo("TESTSERVER", TEST_ADDRESS); assertThrows(IllegalArgumentException.class, () -> map.register(willReject)); } + + @Test + void allowsSameServerLaxRegistrationCheck() { + ServerMap map = new ServerMap(null); + ServerInfo info = new ServerInfo("TestServer", TEST_ADDRESS); + RegisteredServer connection = map.register(info); + assertEquals(connection, map.register(info)); + } } \ No newline at end of file