public void sync()

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();
    }
  }