private void subscribeToConfig(RawConfig input, ConfigCacheKey configCacheKey) {
        synchronized (subscribersLock) {
            if (subscribers.containsKey(configCacheKey)) return;

            log.log(Level.FINE, () -> "Could not find good config in cache, creating subscriber for: " + configCacheKey);
            var subscriber = new Subscriber(input, timingValues, requesters
                    .getRequester(configSourceSet, timingValues));
            try {
                subscriber.subscribe();
                subscribers.put(configCacheKey, subscriber);
            } catch (ConfigurationRuntimeException e) {
                log.log(Level.INFO, "Subscribe for '" + configCacheKey + "' failed, closing subscriber: " + e.getMessage());
                subscriber.cancel();
            }
        }
    }
Retrieves the requested config from the cache or the remote server.
<p>
If the requested config is different from the one in cache, the cached request is returned immediately.
If they are equal, this method returns null.
<p>
If the config was not in cache, this method starts a <em>Subscriber</em> in a separate thread
that gets the config and calls updateSubscribers().

@param input The config to retrieve - can be empty (no payload), or have a valid payload.
@return A Config with a payload.
config-proxy/src/main/java/com/yahoo/vespa/config/proxy/RpcConfigSourceClient.java