Skip to content

Commit eb8520c

Browse files
authored
Make SnapshotStream public (#6784)
This PR is a subset of changes for #6781 Motivation: The `SnapshotStream` reactive infrastructure in the `xds` module is currently package-private, which prevents xDS extension factories (e.g. `HttpFilterFactory`) from using reactive streams to model filters that depend on external resources. Making this API public is a prerequisite for upcoming features like `CredentialInjectorFilterFactory` that need to subscribe to SDS secrets reactively. Modifications: - Moved the `SnapshotStream` reactive stream infrastructure from package-private `com.linecorp.armeria.xds` to a new public `com.linecorp.armeria.xds.stream` package. - `SnapshotStream`, `RefCountedStream`, `Subscription` (formerly `SnapshotStream.Subscription`), and all operators (`MapStream`, `SwitchMapEagerStream`, `CombineLatest2Stream`, `CombineLatest3Stream`, `CombineNLatestStream`, `StaticSnapshotStream`, `TriFunction`). - Made `SnapshotWatcher` public so it can be used as the subscriber type in the public stream API. - Updated all internal stream consumers (`ClusterStream`, `EndpointStream`, `ListenerStream`, `RouteStream`, `SecretStream`, `DataSourceStream`, `TransportSocketStream`, etc.) to import from the new `xds.stream` package. - Simplified `ResourceNodeMeterBinderFactory.ResourceNodeMeterBinder` to no longer implement `ResourceWatcher`, using plain methods instead. - Moved stream tests to the `com.linecorp.armeria.xds.stream` package. Result: - The `SnapshotStream` API is now public and available for xDS extension factories to build reactive filter pipelines. - No behavioral changes — this is a pure refactoring with no changes to existing functionality.
1 parent b6c91ea commit eb8520c

34 files changed

Lines changed: 393 additions & 141 deletions

xds/src/main/java/com/linecorp/armeria/xds/CertificateValidationContextStream.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,9 @@
2424

2525
import com.linecorp.armeria.common.util.Exceptions;
2626
import com.linecorp.armeria.internal.common.util.CertificateUtil;
27+
import com.linecorp.armeria.xds.stream.RefCountedStream;
28+
import com.linecorp.armeria.xds.stream.SnapshotStream;
29+
import com.linecorp.armeria.xds.stream.Subscription;
2730

2831
import io.envoyproxy.envoy.extensions.transport_sockets.tls.v3.CertificateValidationContext;
2932

xds/src/main/java/com/linecorp/armeria/xds/ClusterRoot.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818

1919
import com.linecorp.armeria.common.annotation.Nullable;
2020
import com.linecorp.armeria.common.annotation.UnstableApi;
21-
import com.linecorp.armeria.xds.SnapshotStream.Subscription;
21+
import com.linecorp.armeria.xds.stream.Subscription;
2222

2323
import io.envoyproxy.envoy.config.cluster.v3.Cluster;
2424

xds/src/main/java/com/linecorp/armeria/xds/ClusterStream.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,9 @@
2727
import com.linecorp.armeria.common.annotation.Nullable;
2828
import com.linecorp.armeria.xds.client.endpoint.XdsLoadBalancer;
2929
import com.linecorp.armeria.xds.client.endpoint.XdsLoadBalancerFactory;
30+
import com.linecorp.armeria.xds.stream.RefCountedStream;
31+
import com.linecorp.armeria.xds.stream.SnapshotStream;
32+
import com.linecorp.armeria.xds.stream.Subscription;
3033

3134
import io.envoyproxy.envoy.config.cluster.v3.Cluster;
3235
import io.envoyproxy.envoy.config.cluster.v3.Cluster.EdsClusterConfig;

xds/src/main/java/com/linecorp/armeria/xds/DataSourceStream.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,9 @@
3030
import com.linecorp.armeria.common.Cancellable;
3131
import com.linecorp.armeria.common.CommonPools;
3232
import com.linecorp.armeria.common.file.PathWatcher;
33+
import com.linecorp.armeria.xds.stream.RefCountedStream;
34+
import com.linecorp.armeria.xds.stream.SnapshotStream;
35+
import com.linecorp.armeria.xds.stream.Subscription;
3336

3437
import io.envoyproxy.envoy.config.core.v3.DataSource;
3538
import io.envoyproxy.envoy.config.core.v3.DataSource.SpecifierCase;

xds/src/main/java/com/linecorp/armeria/xds/EndpointStream.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
package com.linecorp.armeria.xds;
1818

1919
import com.linecorp.armeria.common.annotation.Nullable;
20+
import com.linecorp.armeria.xds.stream.RefCountedStream;
21+
import com.linecorp.armeria.xds.stream.Subscription;
2022

2123
import io.envoyproxy.envoy.config.core.v3.ConfigSource;
2224

xds/src/main/java/com/linecorp/armeria/xds/ListenerManager.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
import java.util.Map;
2727

2828
import com.linecorp.armeria.common.util.SafeCloseable;
29-
import com.linecorp.armeria.xds.SnapshotStream.Subscription;
29+
import com.linecorp.armeria.xds.stream.Subscription;
3030

3131
import io.envoyproxy.envoy.config.bootstrap.v3.Bootstrap;
3232
import io.envoyproxy.envoy.config.bootstrap.v3.Bootstrap.StaticResources;

xds/src/main/java/com/linecorp/armeria/xds/ListenerRoot.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818

1919
import com.linecorp.armeria.common.annotation.Nullable;
2020
import com.linecorp.armeria.common.annotation.UnstableApi;
21-
import com.linecorp.armeria.xds.SnapshotStream.Subscription;
21+
import com.linecorp.armeria.xds.stream.Subscription;
2222

2323
import io.envoyproxy.envoy.config.listener.v3.Listener;
2424

xds/src/main/java/com/linecorp/armeria/xds/ListenerStream.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@
1919
import static com.linecorp.armeria.xds.XdsType.LISTENER;
2020

2121
import com.linecorp.armeria.common.annotation.Nullable;
22+
import com.linecorp.armeria.xds.stream.RefCountedStream;
23+
import com.linecorp.armeria.xds.stream.SnapshotStream;
24+
import com.linecorp.armeria.xds.stream.Subscription;
2225

2326
import io.envoyproxy.envoy.config.core.v3.ConfigSource;
2427
import io.envoyproxy.envoy.config.route.v3.RouteConfiguration;

xds/src/main/java/com/linecorp/armeria/xds/RawBufferTransportSocketFactory.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import com.google.common.collect.ImmutableList;
2222

2323
import com.linecorp.armeria.common.annotation.Nullable;
24+
import com.linecorp.armeria.xds.stream.SnapshotStream;
2425

2526
import io.envoyproxy.envoy.config.core.v3.ConfigSource;
2627
import io.envoyproxy.envoy.config.core.v3.TransportSocket;

xds/src/main/java/com/linecorp/armeria/xds/ResourceNodeAdapter.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@
1616

1717
package com.linecorp.armeria.xds;
1818

19+
import com.linecorp.armeria.xds.stream.RefCountedStream;
20+
import com.linecorp.armeria.xds.stream.Subscription;
21+
1922
import io.envoyproxy.envoy.config.core.v3.ConfigSource;
2023

2124
final class ResourceNodeAdapter<T extends XdsResource> extends RefCountedStream<T> implements ResourceNode<T> {
@@ -59,13 +62,13 @@ public void onChanged(T update) {
5962

6063
@Override
6164
public void onError(XdsType type, String resourceName, Throwable t) {
62-
resourceNodeMeterBinder.onError(type, resourceName, t);
65+
resourceNodeMeterBinder.onError();
6366
emit(null, XdsResourceException.maybeWrap(type, resourceName, t));
6467
}
6568

6669
@Override
6770
public void onResourceDoesNotExist(XdsType type, String resourceName) {
68-
resourceNodeMeterBinder.onResourceDoesNotExist(type, resourceName);
71+
resourceNodeMeterBinder.onResourceDoesNotExist();
6972
emit(null, new MissingXdsResourceException(type, resourceName));
7073
}
7174

0 commit comments

Comments
 (0)