Skip to content

Commit

Permalink
bug fixes
Browse files Browse the repository at this point in the history
Signed-off-by: Gavrilov_A <alex_alegavr@mail.ru>
  • Loading branch information
alexander-deb committed Dec 5, 2022
1 parent 89dd182 commit 870215b
Show file tree
Hide file tree
Showing 9 changed files with 87 additions and 44 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

import static com.google.common.base.Strings.isNullOrEmpty;
import static io.envoyproxy.controlplane.cache.Resources.ApiVersion.V3;
import static io.envoyproxy.controlplane.cache.Resources.ResourceType.*;

import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;
Expand Down Expand Up @@ -78,16 +77,21 @@ public static class V3 {
}

public static final List<ResourceType> RESOURCE_TYPES_IN_ORDER =
ImmutableList.of(CLUSTER, ENDPOINT, LISTENER, ROUTE, VIRTUAL_HOST, SECRET);
ImmutableList.of(ResourceType.CLUSTER,
ResourceType.ENDPOINT,
ResourceType.LISTENER,
ResourceType.ROUTE,
ResourceType.VIRTUAL_HOST,
ResourceType.SECRET);

public static final Map<String, ResourceType> TYPE_URLS_TO_RESOURCE_TYPE =
new ImmutableMap.Builder<String, ResourceType>()
.put(Resources.V3.CLUSTER_TYPE_URL, CLUSTER)
.put(Resources.V3.ENDPOINT_TYPE_URL, ENDPOINT)
.put(Resources.V3.LISTENER_TYPE_URL, LISTENER)
.put(Resources.V3.ROUTE_TYPE_URL, ROUTE)
.put(Resources.V3.VIRTUAL_HOST_TYPE_URL, VIRTUAL_HOST)
.put(Resources.V3.SECRET_TYPE_URL, SECRET)
.put(Resources.V3.CLUSTER_TYPE_URL, ResourceType.CLUSTER)
.put(Resources.V3.ENDPOINT_TYPE_URL, ResourceType.ENDPOINT)
.put(Resources.V3.LISTENER_TYPE_URL, ResourceType.LISTENER)
.put(Resources.V3.ROUTE_TYPE_URL, ResourceType.ROUTE)
.put(Resources.V3.VIRTUAL_HOST_TYPE_URL, ResourceType.VIRTUAL_HOST)
.put(Resources.V3.SECRET_TYPE_URL, ResourceType.SECRET)
.build();

public static final Map<String, Class<? extends Message>> RESOURCE_TYPE_BY_URL =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

import com.google.auto.value.AutoValue;
import com.google.protobuf.Message;
import com.google.protobuf.MessageLiteOrBuilder;

import java.util.List;
import java.util.Map;
Expand All @@ -23,7 +22,7 @@ public static <T extends Message> SnapshotResources<T> create(
Iterable<?> resources,
String version) {
ResourceMapBuilder<T> resourcesMapBuilder = createResourcesMap(resources);
return new AutoValue_SnapshotResources<>(
return new io.envoyproxy.controlplane.cache.AutoValue_SnapshotResources<>(
resourcesMapBuilder.getVersionedResources(),
resourcesMapBuilder.getResources(),
(r) -> version
Expand All @@ -42,7 +41,7 @@ public static <T extends Message> SnapshotResources<T> create(
Iterable<VersionedResource<T>> resources,
ResourceVersionResolver versionResolver) {
ResourceMapBuilder<T> resourcesMapBuilder = createResourcesMap(resources);
return new AutoValue_SnapshotResources<>(
return new io.envoyproxy.controlplane.cache.AutoValue_SnapshotResources<>(
resourcesMapBuilder.getVersionedResources(),
resourcesMapBuilder.getResources(),
versionResolver);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,18 +20,18 @@
import io.envoyproxy.envoy.config.listener.v3.Filter;
import io.envoyproxy.envoy.config.listener.v3.FilterChain;
import io.envoyproxy.envoy.config.listener.v3.Listener;
import io.envoyproxy.envoy.config.route.v3.*;
import io.envoyproxy.envoy.config.route.v3.VirtualHost.Builder;
import io.envoyproxy.envoy.config.route.v3.Route;
import io.envoyproxy.envoy.config.route.v3.RouteAction;
import io.envoyproxy.envoy.config.route.v3.RouteConfiguration;
import io.envoyproxy.envoy.config.route.v3.RouteMatch;
import io.envoyproxy.envoy.config.route.v3.Vhds;
import io.envoyproxy.envoy.config.route.v3.VirtualHost;
import io.envoyproxy.envoy.extensions.filters.http.router.v3.Router;
import io.envoyproxy.envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager;
import io.envoyproxy.envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.CodecType;
import io.envoyproxy.envoy.extensions.transport_sockets.tls.v3.Secret;
import io.envoyproxy.envoy.extensions.transport_sockets.tls.v3.TlsCertificate;
import io.envoyproxy.envoy.service.route.v3.VirtualHostDiscoveryService;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
* {@code TestResources} provides helper methods for generating resource messages for testing. It is
Expand Down Expand Up @@ -216,7 +216,7 @@ public static Listener createListener(
*
* @param routeName name of the new route
*/
public static RouteConfiguration createVHDSRoute(String routeName) {
public static RouteConfiguration createVhdsRoute(String routeName) {

ApiVersion adsTransportVersion = ApiVersion.V3;

Expand All @@ -234,11 +234,9 @@ public static RouteConfiguration createVHDSRoute(String routeName) {
.setClusterName(XDS_CLUSTER))))
.build();

RouteConfiguration routeConfigurationbuilder = RouteConfiguration.newBuilder()
return RouteConfiguration.newBuilder()
.setVhds(Vhds.newBuilder().setConfigSource(edsSource).build())
.setName(routeName).build();

return routeConfigurationbuilder;
}

/**
Expand All @@ -261,10 +259,16 @@ public static RouteConfiguration createRoute(String routeName, String clusterNam
.build();
}

public static VirtualHost createVirtualHost(String name, int index, String domains) {
/**
* Returns a new Virtual Host.
*
* @param name Virtual host name
* @param domain domain name
*/
public static VirtualHost createVirtualHost(String name, String domain) {
return VirtualHost.newBuilder()
.setName("all")
.addDomains("*")
.setName(name)
.addDomains(domain)
.addRoutes(
Route.newBuilder()
.setMatch(RouteMatch.newBuilder().setPrefix("/")))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,13 @@
import io.envoyproxy.envoy.config.endpoint.v3.ClusterLoadAssignment;
import io.envoyproxy.envoy.config.listener.v3.Listener;
import io.envoyproxy.envoy.config.route.v3.RouteConfiguration;
import io.envoyproxy.envoy.config.route.v3.VirtualHost;
import io.envoyproxy.envoy.extensions.transport_sockets.tls.v3.Secret;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Set;
import io.envoyproxy.envoy.config.route.v3.VirtualHost;


/**
* {@code Snapshot} is a data class that contains an internally consistent snapshot of v3 xDS resources. Snapshots
Expand Down Expand Up @@ -50,7 +51,7 @@ public static Snapshot create(

String version) {

return new AutoValue_Snapshot(
return new io.envoyproxy.controlplane.cache.v3.AutoValue_Snapshot(
SnapshotResources
.create(generateSnapshotResourceIterable(clusters), version),
SnapshotResources
Expand Down Expand Up @@ -93,7 +94,7 @@ public static Snapshot create(
String secretsVersion) {

// TODO(snowp): add a builder alternative
return new AutoValue_Snapshot(
return new io.envoyproxy.controlplane.cache.v3.AutoValue_Snapshot(
SnapshotResources.create(generateSnapshotResourceIterable(clusters),
clustersVersion),
SnapshotResources.create(generateSnapshotResourceIterable(endpoints),
Expand Down Expand Up @@ -142,6 +143,7 @@ public static Snapshot createEmpty(String version) {
* Returns all secret items in the SDS payload.
*/
public abstract SnapshotResources<Secret> secrets();

public abstract SnapshotResources<VirtualHost> virtualHosts();

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,14 @@
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Sets;
import com.google.protobuf.Message;
import io.envoyproxy.controlplane.cache.*;
import io.envoyproxy.controlplane.cache.NodeGroup;
import io.envoyproxy.controlplane.cache.Resources;
import io.envoyproxy.controlplane.cache.Response;
import io.envoyproxy.controlplane.cache.StatusInfo;
import io.envoyproxy.controlplane.cache.TestResources;
import io.envoyproxy.controlplane.cache.VersionedResource;
import io.envoyproxy.controlplane.cache.Watch;
import io.envoyproxy.controlplane.cache.XdsRequest;
import io.envoyproxy.envoy.config.cluster.v3.Cluster;
import io.envoyproxy.envoy.config.core.v3.Node;
import io.envoyproxy.envoy.config.endpoint.v3.ClusterLoadAssignment;
Expand Down Expand Up @@ -43,7 +50,7 @@ public class SimpleCacheTest {
ImmutableList.of(ClusterLoadAssignment.getDefaultInstance()),
ImmutableList.of(Listener.newBuilder().setName(LISTENER_NAME).build()),
ImmutableList.of(RouteConfiguration.newBuilder().setName(ROUTE_NAME).build()),
ImmutableList.of(TestResources.createVirtualHost("v1", 1, "a")),
ImmutableList.of(TestResources.createVirtualHost("v1", "a")),
ImmutableList.of(Secret.newBuilder().setName(SECRET_NAME).build()),

VERSION1);
Expand All @@ -53,7 +60,7 @@ public class SimpleCacheTest {
ImmutableList.of(ClusterLoadAssignment.getDefaultInstance()),
ImmutableList.of(Listener.newBuilder().setName(LISTENER_NAME).build()),
ImmutableList.of(RouteConfiguration.newBuilder().setName(ROUTE_NAME).build()),
ImmutableList.of(TestResources.createVirtualHost("v1", 1, "a")),
ImmutableList.of(TestResources.createVirtualHost("v1", "a")),

ImmutableList.of(Secret.newBuilder().setName(SECRET_NAME).build()),
VERSION2);
Expand All @@ -65,7 +72,7 @@ public class SimpleCacheTest {
ClusterLoadAssignment.newBuilder().setClusterName(SECONDARY_CLUSTER_NAME).build()),
ImmutableList.of(Listener.newBuilder().setName(LISTENER_NAME).build()),
ImmutableList.of(RouteConfiguration.newBuilder().setName(ROUTE_NAME).build()),
ImmutableList.of(TestResources.createVirtualHost("v1", 1, "a")),
ImmutableList.of(TestResources.createVirtualHost("v1","a")),

ImmutableList.of(Secret.newBuilder().setName(SECRET_NAME).build()),
VERSION2);
Expand Down Expand Up @@ -429,7 +436,13 @@ public void watchesAreReleasedAfterCancel() {
public void watchIsLeftOpenIfNotRespondedImmediately() {
SimpleCache<String> cache = new SimpleCache<>(new SingleNodeGroup());
cache.setSnapshot(SingleNodeGroup.GROUP, Snapshot.create(
ImmutableList.of(), ImmutableList.of(), ImmutableList.of(), ImmutableList.of(), ImmutableList.of(), ImmutableList.of(),VERSION1));
ImmutableList.of(),
ImmutableList.of(),
ImmutableList.of(),
ImmutableList.of(),
ImmutableList.of(),
ImmutableList.of(),
VERSION1));

ResponseTracker responseTracker = new ResponseTracker();
Watch watch = cache.createWatch(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
package io.envoyproxy.controlplane.cache.v3;

import static io.envoyproxy.controlplane.cache.Resources.V3.*;
import static io.envoyproxy.controlplane.cache.Resources.V3.CLUSTER_TYPE_URL;
import static io.envoyproxy.controlplane.cache.Resources.V3.ENDPOINT_TYPE_URL;
import static io.envoyproxy.controlplane.cache.Resources.V3.LISTENER_TYPE_URL;
import static io.envoyproxy.controlplane.cache.Resources.V3.ROUTE_TYPE_URL;
import static io.envoyproxy.envoy.config.core.v3.ApiVersion.V3;
import static java.lang.String.format;
import static org.assertj.core.api.Assertions.assertThat;
Expand Down Expand Up @@ -40,7 +43,7 @@ public class SnapshotTest {
private static final RouteConfiguration ROUTE = TestResources.createRoute(ROUTE_NAME,
CLUSTER_NAME);
private static final Secret SECRET = TestResources.createSecret(SECRET_NAME);
private static final VirtualHost VIRTUAL_HOST = TestResources.createVirtualHost(VIRTUAL_HOST_NAME, 1, "a");
private static final VirtualHost VIRTUAL_HOST = TestResources.createVirtualHost(VIRTUAL_HOST_NAME, "a");

@Test
public void createSingleVersionSetsResourcesCorrectly() {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,12 @@
package io.envoyproxy.controlplane.server;

import static io.envoyproxy.envoy.service.discovery.v3.AggregatedDiscoveryServiceGrpc.AggregatedDiscoveryServiceImplBase;
import static io.envoyproxy.envoy.service.endpoint.v3.EndpointDiscoveryServiceGrpc.EndpointDiscoveryServiceImplBase;
import static io.envoyproxy.envoy.service.listener.v3.ListenerDiscoveryServiceGrpc.ListenerDiscoveryServiceImplBase;
import static io.envoyproxy.envoy.service.route.v3.RouteDiscoveryServiceGrpc.RouteDiscoveryServiceImplBase;
import static io.envoyproxy.envoy.service.route.v3.VirtualHostDiscoveryServiceGrpc.VirtualHostDiscoveryServiceImplBase;
import static io.envoyproxy.envoy.service.secret.v3.SecretDiscoveryServiceGrpc.SecretDiscoveryServiceImplBase;

import com.google.common.base.Preconditions;
import com.google.protobuf.Any;
import io.envoyproxy.controlplane.cache.ConfigWatcher;
Expand All @@ -8,21 +15,20 @@
import io.envoyproxy.controlplane.cache.XdsRequest;
import io.envoyproxy.controlplane.server.serializer.DefaultProtoResourcesSerializer;
import io.envoyproxy.controlplane.server.serializer.ProtoResourcesSerializer;

import io.envoyproxy.envoy.service.cluster.v3.ClusterDiscoveryServiceGrpc.ClusterDiscoveryServiceImplBase;
import io.envoyproxy.envoy.service.discovery.v3.*;

import io.envoyproxy.envoy.service.discovery.v3.DeltaDiscoveryRequest;
import io.envoyproxy.envoy.service.discovery.v3.DeltaDiscoveryResponse;
import io.envoyproxy.envoy.service.discovery.v3.DiscoveryRequest;
import io.envoyproxy.envoy.service.discovery.v3.DiscoveryResponse;
import io.envoyproxy.envoy.service.discovery.v3.Resource;
import io.grpc.stub.StreamObserver;

import java.util.Collection;
import java.util.Collections;
import java.util.List;

import static io.envoyproxy.envoy.service.discovery.v3.AggregatedDiscoveryServiceGrpc.AggregatedDiscoveryServiceImplBase;
import static io.envoyproxy.envoy.service.endpoint.v3.EndpointDiscoveryServiceGrpc.EndpointDiscoveryServiceImplBase;
import static io.envoyproxy.envoy.service.listener.v3.ListenerDiscoveryServiceGrpc.ListenerDiscoveryServiceImplBase;
import static io.envoyproxy.envoy.service.route.v3.RouteDiscoveryServiceGrpc.RouteDiscoveryServiceImplBase;
import static io.envoyproxy.envoy.service.secret.v3.SecretDiscoveryServiceGrpc.SecretDiscoveryServiceImplBase;
import static io.envoyproxy.envoy.service.route.v3.VirtualHostDiscoveryServiceGrpc.VirtualHostDiscoveryServiceImplBase;

public class V3DiscoveryServer extends DiscoveryServer<DiscoveryRequest, DiscoveryResponse, DeltaDiscoveryRequest,
DeltaDiscoveryResponse, Resource> {
public V3DiscoveryServer(ConfigWatcher configWatcher) {
Expand Down Expand Up @@ -165,6 +171,11 @@ public StreamObserver<DiscoveryRequest> streamSecrets(
return createRequestHandler(responseObserver, false, Resources.V3.SECRET_TYPE_URL);
}

/**
* Returns delta Secrets.
*
* @param responseObserver Stream observer
*/
@Override
public StreamObserver<DeltaDiscoveryRequest> deltaSecrets(
StreamObserver<DeltaDiscoveryResponse> responseObserver) {
Expand All @@ -174,6 +185,9 @@ public StreamObserver<DeltaDiscoveryRequest> deltaSecrets(
};
}

/**
* Returns VHDS implementation that uses this server.
*/
public VirtualHostDiscoveryServiceImplBase getVirtualHostDiscoveryServiceImpl() {
return new VirtualHostDiscoveryServiceImplBase() {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,8 @@ public class XdsDeltaDiscoveryRequestStreamObserver<V, X, Y> extends DeltaDiscov
this.pendingResources = new HashSet<>();
Resources.ResourceType resourceType = Resources.TYPE_URLS_TO_RESOURCE_TYPE.get(defaultTypeUrl);
this.isWildcard = Resources.ResourceType.CLUSTER.equals(resourceType)
|| Resources.ResourceType.LISTENER.equals(resourceType) || Resources.ResourceType.VIRTUAL_HOST.equals(resourceType);
|| Resources.ResourceType.LISTENER.equals(resourceType)
|| Resources.ResourceType.VIRTUAL_HOST.equals(resourceType);
this.responses = new ConcurrentHashMap<>();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,19 +32,21 @@ public static void main(String[] arg) throws IOException, InterruptedException {
"cluster0", "127.0.0.1", 1234, Cluster.DiscoveryType.STATIC)),
ImmutableList.of(),
ImmutableList.of(),
ImmutableList.of(TestResources.createVhdsRoute("name1")),
ImmutableList.of(),
ImmutableList.of(),
"1"));


V3DiscoveryServer v3DiscoveryServer = new V3DiscoveryServer(cache);

ServerBuilder builder =
ServerBuilder<NettyServerBuilder> builder =
NettyServerBuilder.forPort(12345)
.addService(v3DiscoveryServer.getAggregatedDiscoveryServiceImpl())
.addService(v3DiscoveryServer.getClusterDiscoveryServiceImpl())
.addService(v3DiscoveryServer.getEndpointDiscoveryServiceImpl())
.addService(v3DiscoveryServer.getListenerDiscoveryServiceImpl())
.addService(v3DiscoveryServer.getVirtualHostDiscoveryServiceImpl())
.addService(v3DiscoveryServer.getRouteDiscoveryServiceImpl());

Server server = builder.build();
Expand All @@ -65,6 +67,7 @@ public static void main(String[] arg) throws IOException, InterruptedException {
"cluster1", "127.0.0.1", 1235, Cluster.DiscoveryType.STATIC)),
ImmutableList.of(),
ImmutableList.of(),
ImmutableList.of(TestResources.createVhdsRoute("name2")),
ImmutableList.of(),
ImmutableList.of(),
"1"));
Expand Down

0 comments on commit 870215b

Please sign in to comment.