2323import java .io .Closeable ;
2424import java .net .InetAddress ;
2525import java .util .List ;
26+ import java .util .Map ;
2627import java .util .Optional ;
27- import java .util .Set ;
2828import java .util .concurrent .CompletableFuture ;
2929import java .util .concurrent .ConcurrentHashMap ;
3030import java .util .concurrent .ExecutorService ;
6363@ FieldDefaults (level = PRIVATE , makeFinal = true )
6464public final class EpmdClient implements Closeable {
6565
66- Set <String > registered = ConcurrentHashMap .< String > newKeySet ();
66+ Map <String , Connection > registered = new ConcurrentHashMap <> ();
6767
6868 ExecutorService executor ;
6969
@@ -137,13 +137,14 @@ public EpmdClient (@NonNull InetAddress address, int port) {
137137 * @return creation id from EPMD
138138 */
139139 public CompletableFuture <RegistrationResult > register (@ NonNull Registration request ) {
140- if (registered .contains (request .getName ())) {
140+ if (registered .containsKey (request .getName ())) {
141141 val exception = new EpmdRegistrationNameConflictException (request .getName ());
142142 log .error (exception .getMessage (), exception );
143143 return FutureUtils .completedExceptionally (exception );
144144 }
145145
146146 val supplier = CommandRegistration .builder ()
147+ .registered (registered )
147148 .address (address )
148149 .port (port )
149150 .request (request )
@@ -155,7 +156,6 @@ public CompletableFuture<RegistrationResult> register (@NonNull Registration req
155156 throw new EpmdRegistrationException (throwable );
156157 })
157158 .thenApply (result -> {
158- registered .add (request .getName ());
159159 log .info ("'{}' was registered successfully" , request .getName ());
160160 return result ;
161161 });
@@ -359,8 +359,11 @@ public CompletableFuture<List<NodeDescription>> getNodes (@NonNull InetAddress n
359359 @ SneakyThrows
360360 public void close () {
361361 executor .shutdown ();
362- registered . clear ();
362+
363363 val terminated = executor .awaitTermination (5 , SECONDS );
364364 log .debug ("EPMD was successfully terminated - {}" , terminated );
365+
366+ registered .values ().forEach (Connection ::close );
367+ registered .clear ();
365368 }
366369}
0 commit comments