@Override public void run() { registrationService.fireUnregistered(deregistration.getRegistration(), deregistration.getObservations(), null); }; };
@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(); } }
public SendableResponse<DeregisterResponse> deregister(Identity sender, DeregisterRequest deregisterRequest) { // We must check if the client is using the right identity. Registration registration = registrationService.getById(deregisterRequest.getRegistrationId()); if (registration == null) { return new SendableResponse<>(DeregisterResponse.notFound()); } if (authorizer.isAuthorized(deregisterRequest, registration, sender) == null) { // TODO replace by Forbidden if https://github.com/OpenMobileAlliance/OMA_LwM2M_for_Developers/issues/181 is // closed. return new SendableResponse<>(DeregisterResponse.badRequest("forbidden")); } final Deregistration deregistration = registrationService.getStore() .removeRegistration(deregisterRequest.getRegistrationId()); if (deregistration != null) { LOG.debug("Deregistered client: {}", deregistration.getRegistration()); // Create callback to notify new de-registration Runnable whenSent = new Runnable() { @Override public void run() { registrationService.fireUnregistered(deregistration.getRegistration(), deregistration.getObservations(), null); }; }; return new SendableResponse<>(DeregisterResponse.success(), whenSent); } else { LOG.debug("Invalid deregistration : registration {} not found", registration.getId()); return new SendableResponse<>(DeregisterResponse.notFound()); } }
@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; }
@Override public void run() { if (deregistration != null) { registrationService.fireUnregistered(deregistration.getRegistration(), deregistration.getObservations(), registration); registrationService.fireRegistered(registration, deregistration.registration, deregistration.observations); } else { registrationService.fireRegistered(registration, null, null); } } };
removeAddrIndex(j, r); removeExpiration(j, r); return new Deregistration(r, obsRemoved);
@Override public void run() { try { Collection<Registration> allRegs = new ArrayList<>(); try { lock.readLock().lock(); allRegs.addAll(regsByEp.values()); } finally { lock.readLock().unlock(); } for (Registration reg : allRegs) { if (!reg.isAlive()) { // force de-registration Deregistration removedRegistration = removeRegistration(reg.getId()); expirationListener.registrationExpired(removedRegistration.getRegistration(), removedRegistration.getObservations()); } } } catch (Exception e) { LOG.warn("Unexpected Exception while registration cleaning", e); } } }
removeAddrIndex(j, r); removeExpiration(j, r); return new Deregistration(r, obsRemoved);
@Override public void run() { try (Jedis j = pool.getResource()) { Set<byte[]> endpointsExpired = j.zrangeByScore(EXP_EP, Double.NEGATIVE_INFINITY, System.currentTimeMillis(), 0, cleanLimit); for (byte[] endpoint : endpointsExpired) { Registration r = deserializeReg(j.get(toEndpointKey(endpoint))); if (!r.isAlive(gracePeriod)) { Deregistration dereg = removeRegistration(j, r.getId(), true); if (dereg != null) expirationListener.registrationExpired(dereg.getRegistration(), dereg.getObservations()); } } } catch (Exception e) { LOG.warn("Unexpected Exception while registration cleaning", e); } } }
return new Deregistration(oldRegistration, obsRemoved);
@Override public void run() { try (Jedis j = pool.getResource()) { Set<byte[]> endpointsExpired = j.zrangeByScore(EXP_EP, Double.NEGATIVE_INFINITY, System.currentTimeMillis(), 0, cleanLimit); for (byte[] endpoint : endpointsExpired) { Registration r = deserializeReg(j.get(toEndpointKey(endpoint))); if (!r.isAlive(gracePeriod)) { Deregistration dereg = removeRegistration(j, r.getId(), true); if (dereg != null) expirationListener.registrationExpired(dereg.getRegistration(), dereg.getObservations()); } } } catch (Exception e) { LOG.warn("Unexpected Exception while registration cleaning", e); } } }
return new Deregistration(oldRegistration, obsRemoved);