From 9016cf55d7d4b596dd49f8d022950b6690a7920e Mon Sep 17 00:00:00 2001 From: Chengyuan Zhang Date: Fri, 15 Jan 2021 12:54:00 -0800 Subject: [PATCH] xds: make XdsAttributes really public internal (#7815) Change XdsAttributes to InternalXdsAttributes. It is public internal and may be accessed out of grpc-xds. --- xds/build.gradle | 1 + .../java/io/grpc/xds/CdsLoadBalancer2.java | 2 +- .../io/grpc/xds/ClusterImplLoadBalancer.java | 8 ++++---- .../grpc/xds/ClusterResolverLoadBalancer.java | 2 +- ...ibutes.java => InternalXdsAttributes.java} | 10 +++++++--- .../java/io/grpc/xds/LrsLoadBalancer.java | 4 ++-- .../java/io/grpc/xds/XdsNameResolver.java | 4 ++-- .../internal/sds/SdsProtocolNegotiators.java | 5 +++-- .../io/grpc/xds/CdsLoadBalancer2Test.java | 4 +++- .../grpc/xds/ClusterImplLoadBalancerTest.java | 20 ++++++++++--------- .../xds/ClusterResolverLoadBalancerTest.java | 4 +++- .../java/io/grpc/xds/LrsLoadBalancerTest.java | 2 +- .../java/io/grpc/xds/XdsNameResolverTest.java | 6 +++--- .../io/grpc/xds/XdsSdsClientServerTest.java | 4 ++-- .../sds/SdsProtocolNegotiatorsTest.java | 4 ++-- 15 files changed, 46 insertions(+), 34 deletions(-) rename xds/src/main/java/io/grpc/xds/{XdsAttributes.java => InternalXdsAttributes.java} (87%) diff --git a/xds/build.gradle b/xds/build.gradle index 7b73fdff384..132c1e5c8ac 100644 --- a/xds/build.gradle +++ b/xds/build.gradle @@ -94,6 +94,7 @@ javadoc { exclude 'io/grpc/xds/XdsInitializationException.java' exclude 'io/grpc/xds/XdsNameResolverProvider.java' exclude 'io/grpc/xds/internal/**' + exclude 'io/grpc/xds/Internal*' } shadowJar { diff --git a/xds/src/main/java/io/grpc/xds/CdsLoadBalancer2.java b/xds/src/main/java/io/grpc/xds/CdsLoadBalancer2.java index 9d2762c8b65..62f2b49249d 100644 --- a/xds/src/main/java/io/grpc/xds/CdsLoadBalancer2.java +++ b/xds/src/main/java/io/grpc/xds/CdsLoadBalancer2.java @@ -86,7 +86,7 @@ public void handleResolvedAddresses(ResolvedAddresses resolvedAddresses) { } logger.log(XdsLogLevel.DEBUG, "Received resolution result: {0}", resolvedAddresses); this.resolvedAddresses = resolvedAddresses; - xdsClientPool = resolvedAddresses.getAttributes().get(XdsAttributes.XDS_CLIENT_POOL); + xdsClientPool = resolvedAddresses.getAttributes().get(InternalXdsAttributes.XDS_CLIENT_POOL); xdsClient = xdsClientPool.getObject(); CdsConfig config = (CdsConfig) resolvedAddresses.getLoadBalancingPolicyConfig(); logger.log(XdsLogLevel.INFO, "Config: {0}", config); diff --git a/xds/src/main/java/io/grpc/xds/ClusterImplLoadBalancer.java b/xds/src/main/java/io/grpc/xds/ClusterImplLoadBalancer.java index 68c6f215a09..efa6d4c7a35 100644 --- a/xds/src/main/java/io/grpc/xds/ClusterImplLoadBalancer.java +++ b/xds/src/main/java/io/grpc/xds/ClusterImplLoadBalancer.java @@ -102,11 +102,11 @@ public void handleResolvedAddresses(ResolvedAddresses resolvedAddresses) { logger.log(XdsLogLevel.DEBUG, "Received resolution result: {0}", resolvedAddresses); Attributes attributes = resolvedAddresses.getAttributes(); if (xdsClientPool == null) { - xdsClientPool = attributes.get(XdsAttributes.XDS_CLIENT_POOL); + xdsClientPool = attributes.get(InternalXdsAttributes.XDS_CLIENT_POOL); xdsClient = xdsClientPool.getObject(); } if (callCounterProvider == null) { - callCounterProvider = attributes.get(XdsAttributes.CALL_COUNTER_PROVIDER); + callCounterProvider = attributes.get(InternalXdsAttributes.CALL_COUNTER_PROVIDER); } ClusterImplConfig config = (ClusterImplConfig) resolvedAddresses.getLoadBalancingPolicyConfig(); @@ -130,7 +130,7 @@ public void handleResolvedAddresses(ResolvedAddresses resolvedAddresses) { childLbHelper.updateSslContextProviderSupplier(config.tlsContext); if (loadStatsStore != null) { attributes = attributes.toBuilder() - .set(XdsAttributes.ATTR_CLUSTER_SERVICE_LOAD_STATS_STORE, loadStatsStore).build(); + .set(InternalXdsAttributes.ATTR_CLUSTER_SERVICE_LOAD_STATS_STORE, loadStatsStore).build(); } childLb.handleResolvedAddresses( resolvedAddresses.toBuilder() @@ -200,7 +200,7 @@ public Subchannel createSubchannel(CreateSubchannelArgs args) { for (EquivalentAddressGroup eag : args.getAddresses()) { Attributes attributes = eag.getAttributes().toBuilder() - .set(XdsAttributes.ATTR_SSL_CONTEXT_PROVIDER_SUPPLIER, + .set(InternalXdsAttributes.ATTR_SSL_CONTEXT_PROVIDER_SUPPLIER, sslContextProviderSupplier) .build(); addresses.add(new EquivalentAddressGroup(eag.getAddresses(), attributes)); diff --git a/xds/src/main/java/io/grpc/xds/ClusterResolverLoadBalancer.java b/xds/src/main/java/io/grpc/xds/ClusterResolverLoadBalancer.java index d871b12a539..a61e967bca8 100644 --- a/xds/src/main/java/io/grpc/xds/ClusterResolverLoadBalancer.java +++ b/xds/src/main/java/io/grpc/xds/ClusterResolverLoadBalancer.java @@ -114,7 +114,7 @@ final class ClusterResolverLoadBalancer extends LoadBalancer { public void handleResolvedAddresses(ResolvedAddresses resolvedAddresses) { logger.log(XdsLogLevel.DEBUG, "Received resolution result: {0}", resolvedAddresses); if (xdsClientPool == null) { - xdsClientPool = resolvedAddresses.getAttributes().get(XdsAttributes.XDS_CLIENT_POOL); + xdsClientPool = resolvedAddresses.getAttributes().get(InternalXdsAttributes.XDS_CLIENT_POOL); xdsClient = xdsClientPool.getObject(); } ClusterResolverConfig config = diff --git a/xds/src/main/java/io/grpc/xds/XdsAttributes.java b/xds/src/main/java/io/grpc/xds/InternalXdsAttributes.java similarity index 87% rename from xds/src/main/java/io/grpc/xds/XdsAttributes.java rename to xds/src/main/java/io/grpc/xds/InternalXdsAttributes.java index a99c8c35352..85f9ebc520b 100644 --- a/xds/src/main/java/io/grpc/xds/XdsAttributes.java +++ b/xds/src/main/java/io/grpc/xds/InternalXdsAttributes.java @@ -26,17 +26,21 @@ import io.grpc.xds.internal.sds.SslContextProviderSupplier; /** - * Special attributes that are only useful to gRPC in the XDS context. + * Internal attributes used for xDS implementation. Do not use. */ @Internal -public final class XdsAttributes { +public final class InternalXdsAttributes { + // TODO(sanjaypujare): move to xds internal package. /** Attribute key for SslContextProviderSupplier (used from client) for a subchannel. */ @Grpc.TransportAttr public static final Attributes.Key ATTR_SSL_CONTEXT_PROVIDER_SUPPLIER = Attributes.Key.create("io.grpc.xds.internal.sds.SslContextProviderSupplier"); + /** + * Attribute key for passing around the XdsClient object pool across NameResolver/LoadBalancers. + */ @NameResolver.ResolutionResultAttr static final Attributes.Key> XDS_CLIENT_POOL = Attributes.Key.create("io.grpc.xds.XdsAttributes.xdsClientPool"); @@ -54,5 +58,5 @@ public final class XdsAttributes { static final Attributes.Key ATTR_CLUSTER_SERVICE_LOAD_STATS_STORE = Attributes.Key.create("io.grpc.xds.XdsAttributes.loadStatsStore"); - private XdsAttributes() {} + private InternalXdsAttributes() {} } diff --git a/xds/src/main/java/io/grpc/xds/LrsLoadBalancer.java b/xds/src/main/java/io/grpc/xds/LrsLoadBalancer.java index edcfcc0cc39..c5a957f4f98 100644 --- a/xds/src/main/java/io/grpc/xds/LrsLoadBalancer.java +++ b/xds/src/main/java/io/grpc/xds/LrsLoadBalancer.java @@ -52,8 +52,8 @@ final class LrsLoadBalancer extends LoadBalancer { @Override public void handleResolvedAddresses(ResolvedAddresses resolvedAddresses) { LrsConfig config = (LrsConfig) resolvedAddresses.getLoadBalancingPolicyConfig(); - LoadStatsStore store = - resolvedAddresses.getAttributes().get(XdsAttributes.ATTR_CLUSTER_SERVICE_LOAD_STATS_STORE); + LoadStatsStore store = resolvedAddresses.getAttributes().get( + InternalXdsAttributes.ATTR_CLUSTER_SERVICE_LOAD_STATS_STORE); checkNotNull(config, "missing LRS lb config"); checkNotNull(store, "missing cluster service stats object"); checkAndSetUp(config, store); diff --git a/xds/src/main/java/io/grpc/xds/XdsNameResolver.java b/xds/src/main/java/io/grpc/xds/XdsNameResolver.java index d74cb97773c..a84e35f333c 100644 --- a/xds/src/main/java/io/grpc/xds/XdsNameResolver.java +++ b/xds/src/main/java/io/grpc/xds/XdsNameResolver.java @@ -190,8 +190,8 @@ private void updateResolutionResult() { ConfigOrError parsedServiceConfig = serviceConfigParser.parseServiceConfig(rawServiceConfig); Attributes attrs = Attributes.newBuilder() - .set(XdsAttributes.XDS_CLIENT_POOL, xdsClientPool) - .set(XdsAttributes.CALL_COUNTER_PROVIDER, callCounterProvider) + .set(InternalXdsAttributes.XDS_CLIENT_POOL, xdsClientPool) + .set(InternalXdsAttributes.CALL_COUNTER_PROVIDER, callCounterProvider) .set(InternalConfigSelector.KEY, configSelector) .build(); ResolutionResult result = diff --git a/xds/src/main/java/io/grpc/xds/internal/sds/SdsProtocolNegotiators.java b/xds/src/main/java/io/grpc/xds/internal/sds/SdsProtocolNegotiators.java index f8ce03ee2bf..b9174c1e03a 100644 --- a/xds/src/main/java/io/grpc/xds/internal/sds/SdsProtocolNegotiators.java +++ b/xds/src/main/java/io/grpc/xds/internal/sds/SdsProtocolNegotiators.java @@ -32,7 +32,7 @@ import io.grpc.netty.NettyChannelBuilder; import io.grpc.netty.ProtocolNegotiationEvent; import io.grpc.xds.EnvoyServerProtoData.DownstreamTlsContext; -import io.grpc.xds.XdsAttributes; +import io.grpc.xds.InternalXdsAttributes; import io.grpc.xds.XdsClientWrapperForServerSds; import io.netty.channel.ChannelHandler; import io.netty.channel.ChannelHandlerAdapter; @@ -189,7 +189,8 @@ public AsciiString scheme() { public ChannelHandler newHandler(GrpcHttp2ConnectionHandler grpcHandler) { // check if SslContextProviderSupplier was passed via attributes SslContextProviderSupplier localSslContextProviderSupplier = - grpcHandler.getEagAttributes().get(XdsAttributes.ATTR_SSL_CONTEXT_PROVIDER_SUPPLIER); + grpcHandler.getEagAttributes().get( + InternalXdsAttributes.ATTR_SSL_CONTEXT_PROVIDER_SUPPLIER); if (localSslContextProviderSupplier == null) { checkNotNull( fallbackProtocolNegotiator, "No TLS config and no fallbackProtocolNegotiator!"); diff --git a/xds/src/test/java/io/grpc/xds/CdsLoadBalancer2Test.java b/xds/src/test/java/io/grpc/xds/CdsLoadBalancer2Test.java index 531fe4c654d..8957a4e5df8 100644 --- a/xds/src/test/java/io/grpc/xds/CdsLoadBalancer2Test.java +++ b/xds/src/test/java/io/grpc/xds/CdsLoadBalancer2Test.java @@ -130,7 +130,9 @@ public void setUp() { .setAddresses(Collections.emptyList()) .setAttributes( // Other attributes not used by cluster_resolver LB are omitted. - Attributes.newBuilder().set(XdsAttributes.XDS_CLIENT_POOL, xdsClientPool).build()) + Attributes.newBuilder() + .set(InternalXdsAttributes.XDS_CLIENT_POOL, xdsClientPool) + .build()) .setLoadBalancingPolicyConfig(new CdsConfig(CLUSTER)) .build()); assertThat(Iterables.getOnlyElement(xdsClient.watchers.keySet())).isEqualTo(CLUSTER); diff --git a/xds/src/test/java/io/grpc/xds/ClusterImplLoadBalancerTest.java b/xds/src/test/java/io/grpc/xds/ClusterImplLoadBalancerTest.java index 9f321f4663a..de053328622 100644 --- a/xds/src/test/java/io/grpc/xds/ClusterImplLoadBalancerTest.java +++ b/xds/src/test/java/io/grpc/xds/ClusterImplLoadBalancerTest.java @@ -154,10 +154,10 @@ public void handleResolvedAddresses_propagateToChildPolicy() { FakeLoadBalancer childBalancer = Iterables.getOnlyElement(downstreamBalancers); assertThat(Iterables.getOnlyElement(childBalancer.addresses)).isEqualTo(endpoint); assertThat(childBalancer.config).isSameInstanceAs(weightedTargetConfig); - assertThat(childBalancer.attributes.get(XdsAttributes.XDS_CLIENT_POOL)) + assertThat(childBalancer.attributes.get(InternalXdsAttributes.XDS_CLIENT_POOL)) .isSameInstanceAs(xdsClientPool); - assertThat(childBalancer.attributes.get(XdsAttributes.ATTR_CLUSTER_SERVICE_LOAD_STATS_STORE)) - .isNotNull(); + assertThat(childBalancer.attributes.get( + InternalXdsAttributes.ATTR_CLUSTER_SERVICE_LOAD_STATS_STORE)).isNotNull(); } @Test @@ -224,7 +224,9 @@ public void dropRpcsWithRespectToLbConfigDropCategories() { ResolvedAddresses.newBuilder() .setAddresses(Collections.singletonList(endpoint)) .setAttributes( - Attributes.newBuilder().set(XdsAttributes.XDS_CLIENT_POOL, xdsClientPool).build()) + Attributes.newBuilder() + .set(InternalXdsAttributes.XDS_CLIENT_POOL, xdsClientPool) + .build()) .setLoadBalancingPolicyConfig(config) .build()); result = currentPicker.pickSubchannel(mock(PickSubchannelArgs.class)); @@ -409,7 +411,7 @@ private void subtest_endpointConnectionWithTls(boolean enableSecurity) { Subchannel subchannel = leafBalancer.helper.createSubchannel(args); for (EquivalentAddressGroup eag : subchannel.getAllAddresses()) { SslContextProviderSupplier supplier = - eag.getAttributes().get(XdsAttributes.ATTR_SSL_CONTEXT_PROVIDER_SUPPLIER); + eag.getAttributes().get(InternalXdsAttributes.ATTR_SSL_CONTEXT_PROVIDER_SUPPLIER); if (enableSecurity) { assertThat(supplier.getUpstreamTlsContext()).isEqualTo(upstreamTlsContext); } else { @@ -425,7 +427,7 @@ private void subtest_endpointConnectionWithTls(boolean enableSecurity) { assertThat(Iterables.getOnlyElement(downstreamBalancers)).isSameInstanceAs(leafBalancer); subchannel = leafBalancer.helper.createSubchannel(args); // creates new connections for (EquivalentAddressGroup eag : subchannel.getAllAddresses()) { - assertThat(eag.getAttributes().get(XdsAttributes.ATTR_SSL_CONTEXT_PROVIDER_SUPPLIER)) + assertThat(eag.getAttributes().get(InternalXdsAttributes.ATTR_SSL_CONTEXT_PROVIDER_SUPPLIER)) .isNull(); } @@ -443,7 +445,7 @@ private void subtest_endpointConnectionWithTls(boolean enableSecurity) { subchannel = leafBalancer.helper.createSubchannel(args); // creates new connections for (EquivalentAddressGroup eag : subchannel.getAllAddresses()) { SslContextProviderSupplier supplier = - eag.getAttributes().get(XdsAttributes.ATTR_SSL_CONTEXT_PROVIDER_SUPPLIER); + eag.getAttributes().get(InternalXdsAttributes.ATTR_SSL_CONTEXT_PROVIDER_SUPPLIER); if (enableSecurity) { assertThat(supplier.getUpstreamTlsContext()).isEqualTo(upstreamTlsContext); } else { @@ -459,8 +461,8 @@ private void deliverAddressesAndConfig(List addresses, .setAddresses(addresses) .setAttributes( Attributes.newBuilder() - .set(XdsAttributes.XDS_CLIENT_POOL, xdsClientPool) - .set(XdsAttributes.CALL_COUNTER_PROVIDER, callCounterProvider) + .set(InternalXdsAttributes.XDS_CLIENT_POOL, xdsClientPool) + .set(InternalXdsAttributes.CALL_COUNTER_PROVIDER, callCounterProvider) .build()) .setLoadBalancingPolicyConfig(config) .build()); diff --git a/xds/src/test/java/io/grpc/xds/ClusterResolverLoadBalancerTest.java b/xds/src/test/java/io/grpc/xds/ClusterResolverLoadBalancerTest.java index f0941599962..b2c392f5602 100644 --- a/xds/src/test/java/io/grpc/xds/ClusterResolverLoadBalancerTest.java +++ b/xds/src/test/java/io/grpc/xds/ClusterResolverLoadBalancerTest.java @@ -736,7 +736,9 @@ private void deliverLbConfig(ClusterResolverConfig config) { .setAddresses(Collections.emptyList()) .setAttributes( // Other attributes not used by cluster_resolver LB are omitted. - Attributes.newBuilder().set(XdsAttributes.XDS_CLIENT_POOL, xdsClientPool).build()) + Attributes.newBuilder() + .set(InternalXdsAttributes.XDS_CLIENT_POOL, xdsClientPool) + .build()) .setLoadBalancingPolicyConfig(config) .build()); } diff --git a/xds/src/test/java/io/grpc/xds/LrsLoadBalancerTest.java b/xds/src/test/java/io/grpc/xds/LrsLoadBalancerTest.java index 415477892c4..ebb427aa364 100644 --- a/xds/src/test/java/io/grpc/xds/LrsLoadBalancerTest.java +++ b/xds/src/test/java/io/grpc/xds/LrsLoadBalancerTest.java @@ -158,7 +158,7 @@ private void deliverResolvedAddresses( .setAddresses(addresses) .setAttributes( Attributes.newBuilder() - .set(XdsAttributes.ATTR_CLUSTER_SERVICE_LOAD_STATS_STORE, loadRecorder) + .set(InternalXdsAttributes.ATTR_CLUSTER_SERVICE_LOAD_STATS_STORE, loadRecorder) .build()) .setLoadBalancingPolicyConfig(config) .build(); diff --git a/xds/src/test/java/io/grpc/xds/XdsNameResolverTest.java b/xds/src/test/java/io/grpc/xds/XdsNameResolverTest.java index ead68a9f8ee..2083876dab4 100644 --- a/xds/src/test/java/io/grpc/xds/XdsNameResolverTest.java +++ b/xds/src/test/java/io/grpc/xds/XdsNameResolverTest.java @@ -444,7 +444,7 @@ public void resolved_simpleCallSucceeds_routeToWeightedCluster() { assertThat(result.getAddresses()).isEmpty(); assertServiceConfigForLoadBalancingConfig( Arrays.asList(cluster1, cluster2), (Map) result.getServiceConfig().getConfig()); - assertThat(result.getAttributes().get(XdsAttributes.XDS_CLIENT_POOL)).isNotNull(); + assertThat(result.getAttributes().get(InternalXdsAttributes.XDS_CLIENT_POOL)).isNotNull(); InternalConfigSelector configSelector = result.getAttributes().get(InternalConfigSelector.KEY); assertCallSelectResult(call1, configSelector, cluster2, 20.0); assertCallSelectResult(call1, configSelector, cluster1, 20.0); @@ -504,8 +504,8 @@ private InternalConfigSelector resolveToClusters() { assertThat(result.getAddresses()).isEmpty(); assertServiceConfigForLoadBalancingConfig( Arrays.asList(cluster1, cluster2), (Map) result.getServiceConfig().getConfig()); - assertThat(result.getAttributes().get(XdsAttributes.XDS_CLIENT_POOL)).isNotNull(); - assertThat(result.getAttributes().get(XdsAttributes.CALL_COUNTER_PROVIDER)).isNotNull(); + assertThat(result.getAttributes().get(InternalXdsAttributes.XDS_CLIENT_POOL)).isNotNull(); + assertThat(result.getAttributes().get(InternalXdsAttributes.CALL_COUNTER_PROVIDER)).isNotNull(); return result.getAttributes().get(InternalConfigSelector.KEY); } diff --git a/xds/src/test/java/io/grpc/xds/XdsSdsClientServerTest.java b/xds/src/test/java/io/grpc/xds/XdsSdsClientServerTest.java index 4794f67a89e..65d02ee24ac 100644 --- a/xds/src/test/java/io/grpc/xds/XdsSdsClientServerTest.java +++ b/xds/src/test/java/io/grpc/xds/XdsSdsClientServerTest.java @@ -396,7 +396,7 @@ private SimpleServiceGrpc.SimpleServiceBlockingStub getBlockingStub( Attributes attrs = (upstreamTlsContext != null) ? Attributes.newBuilder() - .set(XdsAttributes.ATTR_SSL_CONTEXT_PROVIDER_SUPPLIER, + .set(InternalXdsAttributes.ATTR_SSL_CONTEXT_PROVIDER_SUPPLIER, new SslContextProviderSupplier( upstreamTlsContext, new TlsContextManagerImpl(mockBootstrapper))) .build() @@ -425,7 +425,7 @@ private SimpleServiceGrpc.SimpleServiceBlockingStub getBlockingStubNewApi( Attributes attrs = (upstreamTlsContext != null) ? Attributes.newBuilder() - .set(XdsAttributes.ATTR_SSL_CONTEXT_PROVIDER_SUPPLIER, + .set(InternalXdsAttributes.ATTR_SSL_CONTEXT_PROVIDER_SUPPLIER, new SslContextProviderSupplier( upstreamTlsContext, new TlsContextManagerImpl(mockBootstrapper))) .build() diff --git a/xds/src/test/java/io/grpc/xds/internal/sds/SdsProtocolNegotiatorsTest.java b/xds/src/test/java/io/grpc/xds/internal/sds/SdsProtocolNegotiatorsTest.java index b69109f2e70..4191b14970d 100644 --- a/xds/src/test/java/io/grpc/xds/internal/sds/SdsProtocolNegotiatorsTest.java +++ b/xds/src/test/java/io/grpc/xds/internal/sds/SdsProtocolNegotiatorsTest.java @@ -41,7 +41,7 @@ import io.grpc.netty.InternalProtocolNegotiators; import io.grpc.xds.EnvoyServerProtoData.DownstreamTlsContext; import io.grpc.xds.EnvoyServerProtoData.UpstreamTlsContext; -import io.grpc.xds.XdsAttributes; +import io.grpc.xds.InternalXdsAttributes; import io.grpc.xds.XdsClientWrapperForServerSds; import io.grpc.xds.XdsClientWrapperForServerSdsTest; import io.grpc.xds.internal.sds.SdsProtocolNegotiators.ClientSdsHandler; @@ -183,7 +183,7 @@ public void clientSdsProtocolNegotiatorNewHandler_withTlsContextAttribute() { when(mockHandler.getEagAttributes()) .thenReturn( Attributes.newBuilder() - .set(XdsAttributes.ATTR_SSL_CONTEXT_PROVIDER_SUPPLIER, + .set(InternalXdsAttributes.ATTR_SSL_CONTEXT_PROVIDER_SUPPLIER, new SslContextProviderSupplier(upstreamTlsContext, mockTlsContextManager)) .build()); ChannelHandler newHandler = pn.newHandler(mockHandler);