All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.envoyproxy.controlplane.server.XdsDiscoveryRequestStreamObserver Maven / Gradle / Ivy

package io.envoyproxy.controlplane.server;

import io.envoyproxy.controlplane.cache.Watch;
import io.envoyproxy.envoy.api.v2.DiscoveryResponse;
import io.grpc.stub.StreamObserver;
import java.util.Collections;
import java.util.Set;
import java.util.concurrent.Executor;
import java.util.function.Supplier;

/**
 * {@code XdsDiscoveryRequestStreamObserver} is a lightweight implementation of {@link DiscoveryRequestStreamObserver}
 * tailored for non-ADS streams which handle a single watch.
 */
public class XdsDiscoveryRequestStreamObserver extends DiscoveryRequestStreamObserver {
  private volatile Watch watch;
  private volatile LatestDiscoveryResponse latestDiscoveryResponse;
  // ackedResources is only used in the same thread so it need not be volatile
  private Set ackedResources;

  XdsDiscoveryRequestStreamObserver(String defaultTypeUrl,
                                    StreamObserver responseObserver,
                                    long streamId,
                                    Executor executor,
                                    DiscoveryServer discoveryServer) {
    super(defaultTypeUrl, responseObserver, streamId, executor, discoveryServer);
    this.ackedResources = Collections.emptySet();
  }

  @Override
  void cancel() {
    if (watch != null) {
      watch.cancel();
    }
  }

  @Override
  boolean ads() {
    return false;
  }

  @Override
  LatestDiscoveryResponse latestResponse(String typeUrl) {
    return latestDiscoveryResponse;
  }

  @Override
  void setLatestResponse(String typeUrl, LatestDiscoveryResponse response) {
    latestDiscoveryResponse = response;
  }

  @Override
  Set ackedResources(String typeUrl) {
    return ackedResources;
  }

  @Override
  void setAckedResources(String typeUrl, Set resources) {
    ackedResources = resources;
  }

  @Override
  void computeWatch(String typeUrl, Supplier watchCreator) {
    cancel();
    watch = watchCreator.get();
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy