Skip to content

Commit 5bf7369

Browse files
Artem LabazinArtem Labazin
authored andcommitted
Fix single registration
1 parent 65ea0b3 commit 5bf7369

File tree

5 files changed

+29
-25
lines changed

5 files changed

+29
-25
lines changed

client/src/main/java/io/appulse/epmd/java/client/Connection.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,10 @@ public boolean isClosed () {
124124
return socket.isClosed();
125125
}
126126

127+
public boolean isConnected () {
128+
return socket.isConnected();
129+
}
130+
127131
private void connect () {
128132
if (socket.isConnected()) {
129133
log.debug("EPMD connection was already connected");

client/src/main/java/io/appulse/epmd/java/client/EpmdClient.java

Lines changed: 14 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222
import java.io.Closeable;
2323
import java.net.InetAddress;
2424
import java.util.List;
25+
import java.util.Map;
26+
import java.util.concurrent.ConcurrentHashMap;
2527

2628
import io.appulse.epmd.java.client.exception.EpmdRegistrationException;
2729
import io.appulse.epmd.java.core.model.NodeType;
@@ -36,7 +38,6 @@
3638
import io.appulse.epmd.java.core.model.response.RegistrationResult;
3739

3840
import lombok.Builder;
39-
import lombok.Getter;
4041
import lombok.NonNull;
4142
import lombok.SneakyThrows;
4243
import lombok.experimental.Delegate;
@@ -54,8 +55,7 @@
5455
@FieldDefaults(level = PRIVATE, makeFinal = true)
5556
public final class EpmdClient implements Closeable {
5657

57-
@Getter(lazy = true, value = PRIVATE)
58-
Connection localConnection = connect();
58+
Map<String, Connection> cache = new ConcurrentHashMap<>();
5959

6060
@Delegate
6161
LookupService lookupService;
@@ -102,22 +102,29 @@ public int register (String name, int nodePort, NodeType type, Protocol protocol
102102
}
103103

104104
public int register (@NonNull Registration request) {
105+
if (cache.containsKey(request.getName()) && cache.get(request.getName()).isConnected()) {
106+
log.error("Node with name '{}' already exists");
107+
throw new EpmdRegistrationException();
108+
}
105109
log.debug("Registering: '{}'", request.getName());
106-
val connection = getLocalConnection();
110+
val connection = new Connection(address, port);
107111

108112
RegistrationResult response;
109113
try {
110114
response = connection.send(request, RegistrationResult.class);
111115
} catch (Exception ex) {
116+
connection.close();
112117
log.error("'{}' wasn't registered successfully", request.getName());
113118
throw new EpmdRegistrationException(ex);
114119
}
115120

116121
if (!response.isOk()) {
122+
connection.close();
117123
log.error("'{}' wasn't registered successfully", request.getName());
118124
throw new EpmdRegistrationException();
119125
}
120126

127+
cache.put(request.getName(), connection);
121128
log.info("'{}' was registered successfully", request.getName());
122129
return response.getCreation();
123130
}
@@ -151,20 +158,11 @@ public boolean kill () {
151158
}
152159
}
153160

154-
public boolean isClosed () {
155-
val connection = getLocalConnection();
156-
return connection.isClosed();
157-
}
158-
159161
@Override
160162
public void close () {
161-
val connection = getLocalConnection();
162-
if (connection.isClosed()) {
163-
log.debug("EPMD client was already closed");
164-
} else {
165-
connection.close();
166-
log.debug("EPMD client was closed");
167-
}
163+
cache.values().forEach(Connection::close);
164+
cache.clear();
165+
log.debug("EPMD client was closed");
168166
}
169167

170168
public void clearCaches () {
@@ -177,10 +175,6 @@ protected void finalize () throws Throwable {
177175
super.finalize();
178176
}
179177

180-
private Connection connect () {
181-
return new Connection(address, port);
182-
}
183-
184178
private static class Default {
185179

186180
private static final InetAddress ADDRESS = getDefaultInetAddress();

client/src/test/java/io/appulse/epmd/java/client/LocalEpmdClientTest.java

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,15 @@ public void after () {
7373
LocalEpmdHelper.kill();
7474
}
7575

76+
@Test
77+
public void twoRegisters () throws Exception {
78+
val creation = client.register("register", 8971, R3_ERLANG, TCP, R6, R6);
79+
assertThat(creation).isNotEqualTo(0);
80+
81+
assertThatExceptionOfType(EpmdRegistrationException.class)
82+
.isThrownBy(() -> client.register("register", 8971, R3_ERLANG, TCP, R6, R6));
83+
}
84+
7685
@Test
7786
public void register () throws Exception {
7887
val creation = client.register("register", 8971, R3_ERLANG, TCP, R6, R6);
@@ -179,9 +188,5 @@ public void kill () {
179188
assertThat(client.kill())
180189
.as("EPMD client wasn't killed")
181190
.isTrue();
182-
183-
assertThat(client.isClosed())
184-
.as("EPMD client wasn't closed")
185-
.isTrue();
186191
}
187192
}

pom.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -272,6 +272,7 @@ limitations under the License.
272272
<artifactId>maven-surefire-plugin</artifactId>
273273
<version>2.20.1</version>
274274
<configuration>
275+
<trimStackTrace>false</trimStackTrace>
275276
<includes>
276277
<include>**/*Test.java</include>
277278
</includes>

server/src/test/java/io/appulse/epmd/java/server/command/server/ServerCommandExecutorTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ public class ServerCommandExecutorTest {
4545

4646
@Before
4747
public void before () {
48-
int port = SocketUtils.findFreePort()
48+
val port = SocketUtils.findFreePort()
4949
.orElseThrow(RuntimeException::new);
5050

5151
val commonOptions = new CommonOptions();

0 commit comments

Comments
 (0)