RegistryItem(K key, I item, int maxAgeSeconds) { this.key = key; this.item = item; this.expirationDetails = new ExpirationDetails(maxAgeSeconds); }
public void stampLastRefresh() { setLastRefreshTimestampSeconds(getCurrentTimestampSeconds()); }
void maintain() { if (getDeviceItems().isEmpty()) return; // Remove expired remote devices Map<UDN, RemoteDevice> expiredRemoteDevices = new HashMap<>(); for (RegistryItem<UDN, RemoteDevice> remoteItem : getDeviceItems()) { if (log.isLoggable(Level.FINEST)) log.finest("Device '" + remoteItem.getItem() + "' expires in seconds: " + remoteItem.getExpirationDetails().getSecondsUntilExpiration()); if (remoteItem.getExpirationDetails().hasExpired(false)) { expiredRemoteDevices.put(remoteItem.getKey(), remoteItem.getItem()); } } for (RemoteDevice remoteDevice : expiredRemoteDevices.values()) { if (log.isLoggable(Level.FINE)) log.fine("Removing expired: " + remoteDevice); remove(remoteDevice); } // Renew outgoing subscriptions Set<RemoteGENASubscription> expiredOutgoingSubscriptions = new HashSet<>(); for (RegistryItem<String, RemoteGENASubscription> item : getSubscriptionItems()) { if (item.getExpirationDetails().hasExpired(true)) { expiredOutgoingSubscriptions.add(item.getItem()); } } for (RemoteGENASubscription subscription : expiredOutgoingSubscriptions) { if (log.isLoggable(Level.FINEST)) log.fine("Renewing outgoing subscription: " + subscription); renewOutgoingSubscription(subscription); } }
if (isAdvertised(localItem.getKey()) && localItem.getExpirationDetails().hasExpired(true)) { log.finer("Local item has expired: " + localItem); expiredLocalItems.add(localItem); log.fine("Refreshing local device advertisement: " + expiredLocalItem.getItem()); advertiseAlive(expiredLocalItem.getItem()); expiredLocalItem.getExpirationDetails().stampLastRefresh(); if (item.getExpirationDetails().hasExpired(false)) { expiredIncomingSubscriptions.add(item);
public long getSecondsUntilExpiration() { // Note: Uses direct field access for performance reasons on Android return maxAgeSeconds == UNLIMITED_AGE ? Integer.MAX_VALUE : (lastRefreshTimestampSeconds + maxAgeSeconds) - getCurrentTimestampSeconds(); }
public boolean hasExpired() { return hasExpired(false); }
); log.fine("Adding hydrated remote device to registry with " + item.getExpirationDetails().getMaxAgeSeconds() + " seconds expiration: " + device); getDeviceItems().add(item);
if (isAdvertised(localItem.getKey()) && localItem.getExpirationDetails().hasExpired(true)) { log.finer("Local item has expired: " + localItem); expiredLocalItems.add(localItem); log.fine("Refreshing local device advertisement: " + expiredLocalItem.getItem()); advertiseAlive(expiredLocalItem.getItem()); expiredLocalItem.getExpirationDetails().stampLastRefresh(); if (item.getExpirationDetails().hasExpired(false)) { expiredIncomingSubscriptions.add(item);
/** * @param halfTime If <code>true</code> then half maximum age is used to determine expiration. * @return <code>true</code> if the maximum age has been reached. */ public boolean hasExpired(boolean halfTime) { // Note: Uses direct field access for performance reasons on Android return maxAgeSeconds != UNLIMITED_AGE && (lastRefreshTimestampSeconds + (maxAgeSeconds/(halfTime ? 2 : 1))) < getCurrentTimestampSeconds(); }
synchronized void maintain() { if (log.isLoggable(Level.FINEST)) log.finest("Maintaining registry..."); // Remove expired resources Iterator<RegistryItem<URI, Resource>> it = resourceItems.iterator(); while (it.hasNext()) { RegistryItem<URI, Resource> item = it.next(); if (item.getExpirationDetails().hasExpired()) { if (log.isLoggable(Level.FINER)) log.finer("Removing expired resource: " + item); it.remove(); } } // Let each resource do its own maintenance for (RegistryItem<URI, Resource> resourceItem : resourceItems) { resourceItem.getItem().maintain( pendingExecutions, resourceItem.getExpirationDetails() ); } // These add all their operations to the pendingExecutions queue remoteItems.maintain(); localItems.maintain(); // We now run the queue asynchronously so the maintenance thread can continue its loop undisturbed runPendingExecutions(true); }
); log.fine("Adding hydrated remote device to registry with " + item.getExpirationDetails().getMaxAgeSeconds() + " seconds expiration: " + device); getDeviceItems().add(item);
public void stampLastRefresh() { setLastRefreshTimestampSeconds(getCurrentTimestampSeconds()); }
void maintain() { if (getDeviceItems().isEmpty()) return; // Remove expired remote devices Map<UDN, RemoteDevice> expiredRemoteDevices = new HashMap(); for (RegistryItem<UDN, RemoteDevice> remoteItem : getDeviceItems()) { if (log.isLoggable(Level.FINEST)) log.finest("Device '" + remoteItem.getItem() + "' expires in seconds: " + remoteItem.getExpirationDetails().getSecondsUntilExpiration()); if (remoteItem.getExpirationDetails().hasExpired(false)) { expiredRemoteDevices.put(remoteItem.getKey(), remoteItem.getItem()); } } for (RemoteDevice remoteDevice : expiredRemoteDevices.values()) { if (log.isLoggable(Level.FINE)) log.fine("Removing expired: " + remoteDevice); remove(remoteDevice); } // Renew outgoing subscriptions Set<RemoteGENASubscription> expiredOutgoingSubscriptions = new HashSet(); for (RegistryItem<String, RemoteGENASubscription> item : getSubscriptionItems()) { if (item.getExpirationDetails().hasExpired(true)) { expiredOutgoingSubscriptions.add(item.getItem()); } } for (RemoteGENASubscription subscription : expiredOutgoingSubscriptions) { if (log.isLoggable(Level.FINEST)) log.fine("Renewing outgoing subscription: " + subscription); renewOutgoingSubscription(subscription); } }
if (isAdvertised(localItem.getKey()) && localItem.getExpirationDetails().hasExpired(true)) { log.finer("Local item has expired: " + localItem); expiredLocalItems.add(localItem); log.fine("Refreshing local device advertisement: " + expiredLocalItem.getItem()); advertiseAlive(expiredLocalItem.getItem()); expiredLocalItem.getExpirationDetails().stampLastRefresh(); if (item.getExpirationDetails().hasExpired(false)) { expiredIncomingSubscriptions.add(item);
public long getSecondsUntilExpiration() { // Note: Uses direct field access for performance reasons on Android return maxAgeSeconds == UNLIMITED_AGE ? Integer.MAX_VALUE : (lastRefreshTimestampSeconds + maxAgeSeconds) - getCurrentTimestampSeconds(); }
public boolean hasExpired() { return hasExpired(false); }
RegistryItem(K key, I item, int maxAgeSeconds) { this.key = key; this.item = item; this.expirationDetails = new ExpirationDetails(maxAgeSeconds); }
); log.fine("Adding hydrated remote device to registry with " + item.getExpirationDetails().getMaxAgeSeconds() + " seconds expiration: " + device); getDeviceItems().add(item);
public void stampLastRefresh() { setLastRefreshTimestampSeconds(getCurrentTimestampSeconds()); }
void maintain() { if (getDeviceItems().isEmpty()) return; // Remove expired remote devices Map<UDN, RemoteDevice> expiredRemoteDevices = new HashMap<>(); for (RegistryItem<UDN, RemoteDevice> remoteItem : getDeviceItems()) { if (log.isLoggable(Level.FINEST)) log.finest("Device '" + remoteItem.getItem() + "' expires in seconds: " + remoteItem.getExpirationDetails().getSecondsUntilExpiration()); if (remoteItem.getExpirationDetails().hasExpired(false)) { expiredRemoteDevices.put(remoteItem.getKey(), remoteItem.getItem()); } } for (RemoteDevice remoteDevice : expiredRemoteDevices.values()) { if (log.isLoggable(Level.FINE)) log.fine("Removing expired: " + remoteDevice); remove(remoteDevice); } // Renew outgoing subscriptions Set<RemoteGENASubscription> expiredOutgoingSubscriptions = new HashSet<>(); for (RegistryItem<String, RemoteGENASubscription> item : getSubscriptionItems()) { if (item.getExpirationDetails().hasExpired(true)) { expiredOutgoingSubscriptions.add(item.getItem()); } } for (RemoteGENASubscription subscription : expiredOutgoingSubscriptions) { if (log.isLoggable(Level.FINEST)) log.fine("Renewing outgoing subscription: " + subscription); renewOutgoingSubscription(subscription); } }