docs: public void add(LookupDataAdapter dataAdapter) {
          if (state() == State.STOPPING || state() == State.TERMINATED) {
              LOG.debug("Service is in state <{}> - not adding new job for <{}/{}/@{}>", state(), dataAdapter.name(), dataAdapter.id(), objectId(dataAdapter));
              return;
          }
  
          final Duration interval = dataAdapter.refreshInterval();
  
          // No need to schedule the data adapter refresh if it doesn't implement a refresh
          if (!interval.equals(Duration.ZERO)) {
              // Using the adapter object ID here to make it possible to have multiple jobs for the same adapter
              final String instanceId = objectId(dataAdapter);
  
              // Manually synchronize here to avoid overwriting an existing refresh job for the given data adapter.
              // ConcurrentMap#computeIfAbsent() does not work here because scheduling a job is not idempotent.
              synchronized (futures) {
                  if (!futures.containsKey(instanceId)) {
                      LOG.info("Adding job for <{}/{}/@{}> [interval={}ms]", dataAdapter.name(), dataAdapter.id(), instanceId, interval.getMillis());
                      futures.put(instanceId, schedule(dataAdapter, interval));
                  } else {
                      LOG.warn("Job for <{}/{}/@{}> already exists, not adding it again.", dataAdapter.name(), dataAdapter.id(), instanceId);
                  }
              }
          }
      }