@Override public Deregistration removeRegistration(String registrationId) { try { lock.writeLock().lock(); Registration registration = getRegistration(registrationId); if (registration != null) { Collection<Observation> observationsRemoved = unsafeRemoveAllObservations(registration.getId()); regsByEp.remove(registration.getEndpoint()); removeFromMap(regsByAddr, registration.getSocketAddress(), registration); removeFromMap(regsByRegId, registration.getId(), registration); return new Deregistration(registration, observationsRemoved); } return null; } finally { lock.writeLock().unlock(); } }
@Override public Deregistration addRegistration(Registration registration) { try { lock.writeLock().lock(); Registration registrationRemoved = regsByEp.put(registration.getEndpoint(), registration); regsByRegId.put(registration.getId(), registration); // If a registration is already associated to this address we don't care as we only want to keep the most // recent binding. regsByAddr.put(registration.getSocketAddress(), registration); if (registrationRemoved != null) { Collection<Observation> observationsRemoved = unsafeRemoveAllObservations(registrationRemoved.getId()); if (!registrationRemoved.getSocketAddress().equals(registration.getSocketAddress())) { removeFromMap(regsByAddr, registrationRemoved.getSocketAddress(), registrationRemoved); } if (!registrationRemoved.getId().equals(registration.getId())) { removeFromMap(regsByRegId, registrationRemoved.getId(), registrationRemoved); } return new Deregistration(registrationRemoved, observationsRemoved); } } finally { lock.writeLock().unlock(); } return null; }
removeAddrIndex(j, r); removeExpiration(j, r); return new Deregistration(r, obsRemoved);
removeAddrIndex(j, r); removeExpiration(j, r); return new Deregistration(r, obsRemoved);
return new Deregistration(oldRegistration, obsRemoved);
return new Deregistration(oldRegistration, obsRemoved);