Skip to content

Commit

Permalink
xds, rbac: build per route serverInterceptor for httpConfig (#8524) (#…
Browse files Browse the repository at this point in the history
  • Loading branch information
YifeiZhuang committed Sep 20, 2021
1 parent 4d5a19c commit 0b8b33d
Show file tree
Hide file tree
Showing 5 changed files with 414 additions and 297 deletions.
Expand Up @@ -59,6 +59,7 @@
import java.util.Map;
import java.util.concurrent.Executor;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicReference;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.annotation.Nullable;
Expand Down Expand Up @@ -135,28 +136,29 @@ public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exc

static final class FilterChainSelector {
public static final FilterChainSelector NO_FILTER_CHAIN = new FilterChainSelector(
Collections.<FilterChain, ServerRoutingConfig>emptyMap(), null, null);
private final Map<FilterChain, ServerRoutingConfig> routingConfigs;
Collections.<FilterChain, AtomicReference<ServerRoutingConfig>>emptyMap(),
null, new AtomicReference<ServerRoutingConfig>());
private final Map<FilterChain, AtomicReference<ServerRoutingConfig>> routingConfigs;
@Nullable
private final SslContextProviderSupplier defaultSslContextProviderSupplier;
@Nullable
private final ServerRoutingConfig defaultRoutingConfig;
private final AtomicReference<ServerRoutingConfig> defaultRoutingConfig;

FilterChainSelector(Map<FilterChain, ServerRoutingConfig> routingConfigs,
FilterChainSelector(Map<FilterChain, AtomicReference<ServerRoutingConfig>> routingConfigs,
@Nullable SslContextProviderSupplier defaultSslContextProviderSupplier,
@Nullable ServerRoutingConfig defaultRoutingConfig) {
@Nullable AtomicReference<ServerRoutingConfig> defaultRoutingConfig) {
this.routingConfigs = checkNotNull(routingConfigs, "routingConfigs");
this.defaultSslContextProviderSupplier = defaultSslContextProviderSupplier;
this.defaultRoutingConfig = defaultRoutingConfig;
this.defaultRoutingConfig = checkNotNull(defaultRoutingConfig, "defaultRoutingConfig");
}

@VisibleForTesting
Map<FilterChain, ServerRoutingConfig> getRoutingConfigs() {
Map<FilterChain, AtomicReference<ServerRoutingConfig>> getRoutingConfigs() {
return routingConfigs;
}

@VisibleForTesting
ServerRoutingConfig getDefaultRoutingConfig() {
AtomicReference<ServerRoutingConfig> getDefaultRoutingConfig() {
return defaultRoutingConfig;
}

Expand Down Expand Up @@ -189,7 +191,7 @@ SelectedConfig select(InetSocketAddress localAddr, InetSocketAddress remoteAddr)
return new SelectedConfig(
routingConfigs.get(selected), selected.getSslContextProviderSupplier());
}
if (defaultRoutingConfig != null) {
if (defaultRoutingConfig.get() != null) {
return new SelectedConfig(defaultRoutingConfig, defaultSslContextProviderSupplier);
}
return null;
Expand Down Expand Up @@ -393,11 +395,11 @@ public void close() {
* The FilterChain level configuration.
*/
private static final class SelectedConfig {
private final ServerRoutingConfig routingConfig;
private final AtomicReference<ServerRoutingConfig> routingConfig;
@Nullable
private final SslContextProviderSupplier sslContextProviderSupplier;

private SelectedConfig(ServerRoutingConfig routingConfig,
private SelectedConfig(AtomicReference<ServerRoutingConfig> routingConfig,
@Nullable SslContextProviderSupplier sslContextProviderSupplier) {
this.routingConfig = checkNotNull(routingConfig, "routingConfig");
this.sslContextProviderSupplier = sslContextProviderSupplier;
Expand Down

0 comments on commit 0b8b33d

Please sign in to comment.