@Override
    public void run() {
        Collection<Subscriber> s;
        synchronized (subscribersLock) {
            s = List.copyOf(subscribers.values());
        }
        s.forEach(subscriber -> {
            if (!subscriber.isClosed()) {
                Optional<RawConfig> config = subscriber.nextGeneration();
                config.ifPresent(this::updateWithNewConfig);
            }
        });
    }
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