Skip to content

Commit fd70a3c

Browse files
committed
WIP
1 parent 71991bd commit fd70a3c

File tree

1 file changed

+25
-13
lines changed

1 file changed

+25
-13
lines changed

services/src/main/java/io/scalecube/services/registry/ServiceRegistryImpl.java

Lines changed: 25 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -89,15 +89,31 @@ public boolean registerService(ServiceEndpoint serviceEndpoint) {
8989
return putIfAbsent;
9090
}
9191

92-
// TODO: refactor, clean also serviceReferencesByQualifier
9392
@Override
9493
public ServiceEndpoint unregisterService(String endpointId) {
9594
ServiceEndpoint serviceEndpoint = serviceEndpoints.remove(endpointId);
9695
if (serviceEndpoint != null) {
96+
// Clean exact-match service references
97+
9798
serviceReferencesByQualifier.values().stream()
9899
.flatMap(Collection::stream)
99100
.filter(sr -> sr.endpointId().equals(endpointId))
100-
.forEach(this::removeServiceReference);
101+
.forEach(
102+
value ->
103+
serviceReferencesByQualifier.compute(
104+
value.qualifier(), (key, list) -> removeServiceReference(value, list)));
105+
106+
// Clean dynamic-qualifier service references
107+
108+
serviceReferencesByPattern.values().stream()
109+
.flatMap(Collection::stream)
110+
.filter(sr -> sr.endpointId().equals(endpointId))
111+
.forEach(
112+
value ->
113+
serviceReferencesByPattern.compute(
114+
value.dynamicQualifier(),
115+
(key, list) -> removeServiceReference(value, list)));
116+
101117
LOGGER.log(Level.DEBUG, "ServiceEndpoint unregistered: {0}", serviceEndpoint);
102118
}
103119
return serviceEndpoint;
@@ -217,16 +233,12 @@ private void addServiceReference(ServiceReference sr) {
217233
}
218234
}
219235

220-
// TODO: refactor, clean also serviceReferencesByQualifier
221-
private void removeServiceReference(ServiceReference sr) {
222-
serviceReferencesByQualifier.compute(
223-
sr.qualifier(),
224-
(key, list) -> {
225-
if (list == null || list.isEmpty()) {
226-
return null;
227-
}
228-
list.remove(sr);
229-
return list.isEmpty() ? null : list;
230-
});
236+
private static List<ServiceReference> removeServiceReference(
237+
ServiceReference value, List<ServiceReference> list) {
238+
if (list == null || list.isEmpty()) {
239+
return null;
240+
}
241+
list.remove(value);
242+
return list.isEmpty() ? null : list;
231243
}
232244
}

0 commit comments

Comments
 (0)