in spectator-reg-atlas/src/main/java/com/netflix/spectator/atlas/impl/Evaluator.java [80:116]
public void sync(List<Subscription> subs) {
lock.lock();
try {
Set<Subscription> removed = new HashSet<>(subscriptions.keySet());
for (Subscription sub : subs) {
boolean alreadyPresent = removed.remove(sub);
if (!alreadyPresent) {
try {
// Parse and simplify query
Query q = sub.dataExpr().query().simplify(commonTags);
LOGGER.trace("query pre-eval: original [{}], simplified [{}], common tags {}",
sub.dataExpr().query(), q, commonTags);
// Update index
int multiple = (int) (sub.getFrequency() / step);
SubscriptionEntry entry = new SubscriptionEntry(sub, multiple);
subscriptions.put(sub, entry);
index.add(q, entry);
LOGGER.debug("subscription added: {}", sub);
} catch (Exception e) {
LOGGER.warn("failed to add subscription: {}", sub, e);
}
} else {
LOGGER.trace("subscription already present: {}", sub);
}
}
for (Subscription sub : removed) {
SubscriptionEntry entry = subscriptions.remove(sub);
Query q = sub.dataExpr().query().simplify(commonTags);
index.remove(q, entry);
LOGGER.debug("subscription removed: {}", sub);
}
} finally {
lock.unlock();
}
}