@Override public Observation getObservation(String registrationId, byte[] observationId) { try { lock.readLock().lock(); Observation observation = build(unsafeGetObservation(new Token(observationId))); if (observation != null && registrationId.equals(observation.getRegistrationId())) { return observation; } return null; } finally { lock.readLock().unlock(); } }
@Override public Observation removeObservation(String registrationId, byte[] observationId) { try { lock.writeLock().lock(); Token token = new Token(observationId); Observation observation = build(unsafeGetObservation(token)); if (observation != null && registrationId.equals(observation.getRegistrationId())) { unsafeRemoveObservation(token); return observation; } return null; } finally { lock.writeLock().unlock(); } }
@Override public Observation getObservation(String registrationId, byte[] observationId) { return build(get(new Token(observationId))); }
@Override public Observation getObservation(String registrationId, byte[] observationId) { return build(get(new Token(observationId))); }
@Override public Collection<Observation> addObservation(String registrationId, Observation observation) { List<Observation> removed = new ArrayList<>(); try { lock.writeLock().lock(); // cancel existing observations for the same path and registration id. for (Observation obs : unsafeGetObservations(registrationId)) { if (observation.getPath().equals(obs.getPath()) && !Arrays.equals(observation.getId(), obs.getId())) { unsafeRemoveObservation(new Token(obs.getId())); removed.add(obs); } } } finally { lock.writeLock().unlock(); } return removed; }
private void cancel(Observation observation) { Token token = new Token(observation.getId()); if (secureEndpoint != null) secureEndpoint.cancelObservation(token); if (nonSecureEndpoint != null) nonSecureEndpoint.cancelObservation(token); for (ObservationListener listener : listeners) { listener.cancelled(observation); } }
@Override public Observation removeObservation(String registrationId, byte[] observationId) { try (Jedis j = pool.getResource()) { // fetch the client ep by registration ID index byte[] ep = j.get(toRegIdKey(registrationId)); if (ep == null) { return null; } // remove observation byte[] lockValue = null; byte[] lockKey = toLockKey(ep); try { lockValue = RedisLock.acquire(j, lockKey); Observation observation = build(get(new Token(observationId))); if (observation != null && registrationId.equals(observation.getRegistrationId())) { unsafeRemoveObservation(j, registrationId, observationId); return observation; } return null; } finally { RedisLock.release(j, lockKey, lockValue); } } }
@Override public Observation removeObservation(String registrationId, byte[] observationId) { try (Jedis j = pool.getResource()) { // fetch the client ep by registration ID index byte[] ep = j.get(toRegIdKey(registrationId)); if (ep == null) { return null; } // remove observation byte[] lockValue = null; byte[] lockKey = toLockKey(ep); try { lockValue = RedisLock.acquire(j, lockKey); Observation observation = build(get(new Token(observationId))); if (observation != null && registrationId.equals(observation.getRegistrationId())) { unsafeRemoveObservation(j, registrationId, observationId); return observation; } return null; } finally { RedisLock.release(j, lockKey, lockValue); } } }