mirror of https://github.com/grpc/grpc-go.git
Changed Outlier Detection Env Var to default true (#5673)
This commit is contained in:
parent
54521b22e0
commit
d83070ec0d
|
|
@ -84,9 +84,9 @@ var (
|
||||||
// "GRPC_XDS_EXPERIMENTAL_RBAC" to "false".
|
// "GRPC_XDS_EXPERIMENTAL_RBAC" to "false".
|
||||||
XDSRBAC = !strings.EqualFold(os.Getenv(rbacSupportEnv), "false")
|
XDSRBAC = !strings.EqualFold(os.Getenv(rbacSupportEnv), "false")
|
||||||
// XDSOutlierDetection indicates whether outlier detection support is
|
// XDSOutlierDetection indicates whether outlier detection support is
|
||||||
// enabled, which can be enabled by setting the environment variable
|
// enabled, which can be disabled by setting the environment variable
|
||||||
// "GRPC_EXPERIMENTAL_ENABLE_OUTLIER_DETECTION" to "true".
|
// "GRPC_EXPERIMENTAL_ENABLE_OUTLIER_DETECTION" to "false".
|
||||||
XDSOutlierDetection = strings.EqualFold(os.Getenv(outlierDetectionSupportEnv), "true")
|
XDSOutlierDetection = !strings.EqualFold(os.Getenv(outlierDetectionSupportEnv), "false")
|
||||||
// XDSFederation indicates whether federation support is enabled.
|
// XDSFederation indicates whether federation support is enabled.
|
||||||
XDSFederation = strings.EqualFold(os.Getenv(federationEnv), "true")
|
XDSFederation = strings.EqualFold(os.Getenv(federationEnv), "true")
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -120,22 +120,6 @@ var (
|
||||||
//
|
//
|
||||||
// TODO: Remove this function once the RBAC env var is removed.
|
// TODO: Remove this function once the RBAC env var is removed.
|
||||||
UnregisterRBACHTTPFilterForTesting func()
|
UnregisterRBACHTTPFilterForTesting func()
|
||||||
|
|
||||||
// RegisterOutlierDetectionBalancerForTesting registers the Outlier
|
|
||||||
// Detection Balancer for testing purposes, regardless of the Outlier
|
|
||||||
// Detection environment variable.
|
|
||||||
//
|
|
||||||
// TODO: Remove this function once the Outlier Detection env var is removed.
|
|
||||||
RegisterOutlierDetectionBalancerForTesting func()
|
|
||||||
|
|
||||||
// UnregisterOutlierDetectionBalancerForTesting unregisters the Outlier
|
|
||||||
// Detection Balancer for testing purposes. This is needed because there is
|
|
||||||
// no way to unregister the Outlier Detection Balancer after registering it
|
|
||||||
// solely for testing purposes using
|
|
||||||
// RegisterOutlierDetectionBalancerForTesting().
|
|
||||||
//
|
|
||||||
// TODO: Remove this function once the Outlier Detection env var is removed.
|
|
||||||
UnregisterOutlierDetectionBalancerForTesting func()
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// HealthChecker defines the signature of the client-side LB channel health checking function.
|
// HealthChecker defines the signature of the client-side LB channel health checking function.
|
||||||
|
|
|
||||||
|
|
@ -32,8 +32,6 @@ import (
|
||||||
v3routepb "github.com/envoyproxy/go-control-plane/envoy/config/route/v3"
|
v3routepb "github.com/envoyproxy/go-control-plane/envoy/config/route/v3"
|
||||||
"google.golang.org/grpc"
|
"google.golang.org/grpc"
|
||||||
"google.golang.org/grpc/credentials/insecure"
|
"google.golang.org/grpc/credentials/insecure"
|
||||||
"google.golang.org/grpc/internal"
|
|
||||||
"google.golang.org/grpc/internal/envconfig"
|
|
||||||
"google.golang.org/grpc/internal/stubserver"
|
"google.golang.org/grpc/internal/stubserver"
|
||||||
"google.golang.org/grpc/internal/testutils/xds/e2e"
|
"google.golang.org/grpc/internal/testutils/xds/e2e"
|
||||||
testgrpc "google.golang.org/grpc/test/grpc_testing"
|
testgrpc "google.golang.org/grpc/test/grpc_testing"
|
||||||
|
|
@ -49,14 +47,6 @@ import (
|
||||||
// Detection balancer. This test verifies that an RPC is able to proceed
|
// Detection balancer. This test verifies that an RPC is able to proceed
|
||||||
// normally with this configuration.
|
// normally with this configuration.
|
||||||
func (s) TestOutlierDetection_NoopConfig(t *testing.T) {
|
func (s) TestOutlierDetection_NoopConfig(t *testing.T) {
|
||||||
oldOD := envconfig.XDSOutlierDetection
|
|
||||||
envconfig.XDSOutlierDetection = true
|
|
||||||
internal.RegisterOutlierDetectionBalancerForTesting()
|
|
||||||
defer func() {
|
|
||||||
envconfig.XDSOutlierDetection = oldOD
|
|
||||||
internal.UnregisterOutlierDetectionBalancerForTesting()
|
|
||||||
}()
|
|
||||||
|
|
||||||
managementServer, nodeID, _, resolver, cleanup1 := e2e.SetupManagementServer(t, nil)
|
managementServer, nodeID, _, resolver, cleanup1 := e2e.SetupManagementServer(t, nil)
|
||||||
defer cleanup1()
|
defer cleanup1()
|
||||||
|
|
||||||
|
|
@ -129,14 +119,6 @@ func clusterWithOutlierDetection(clusterName, edsServiceName string, secLevel e2
|
||||||
// Detection Balancer should eject the connection to the backend which
|
// Detection Balancer should eject the connection to the backend which
|
||||||
// constantly errors, and thus RPC's should mainly go to backend 1 and 2.
|
// constantly errors, and thus RPC's should mainly go to backend 1 and 2.
|
||||||
func (s) TestOutlierDetectionWithOutlier(t *testing.T) {
|
func (s) TestOutlierDetectionWithOutlier(t *testing.T) {
|
||||||
oldOD := envconfig.XDSOutlierDetection
|
|
||||||
envconfig.XDSOutlierDetection = true
|
|
||||||
internal.RegisterOutlierDetectionBalancerForTesting()
|
|
||||||
defer func() {
|
|
||||||
envconfig.XDSOutlierDetection = oldOD
|
|
||||||
internal.UnregisterOutlierDetectionBalancerForTesting()
|
|
||||||
}()
|
|
||||||
|
|
||||||
managementServer, nodeID, _, resolver, cleanup := e2e.SetupManagementServer(t, nil)
|
managementServer, nodeID, _, resolver, cleanup := e2e.SetupManagementServer(t, nil)
|
||||||
defer cleanup()
|
defer cleanup()
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -25,5 +25,6 @@ import (
|
||||||
_ "google.golang.org/grpc/xds/internal/balancer/clusterimpl" // Register the xds_cluster_impl balancer
|
_ "google.golang.org/grpc/xds/internal/balancer/clusterimpl" // Register the xds_cluster_impl balancer
|
||||||
_ "google.golang.org/grpc/xds/internal/balancer/clustermanager" // Register the xds_cluster_manager balancer
|
_ "google.golang.org/grpc/xds/internal/balancer/clustermanager" // Register the xds_cluster_manager balancer
|
||||||
_ "google.golang.org/grpc/xds/internal/balancer/clusterresolver" // Register the xds_cluster_resolver balancer
|
_ "google.golang.org/grpc/xds/internal/balancer/clusterresolver" // Register the xds_cluster_resolver balancer
|
||||||
|
_ "google.golang.org/grpc/xds/internal/balancer/outlierdetection" // Register the outlier_detection balancer
|
||||||
_ "google.golang.org/grpc/xds/internal/balancer/priority" // Register the priority balancer
|
_ "google.golang.org/grpc/xds/internal/balancer/priority" // Register the priority balancer
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -34,7 +34,6 @@ import (
|
||||||
"google.golang.org/grpc/internal/testutils"
|
"google.golang.org/grpc/internal/testutils"
|
||||||
"google.golang.org/grpc/internal/xds/matcher"
|
"google.golang.org/grpc/internal/xds/matcher"
|
||||||
"google.golang.org/grpc/resolver"
|
"google.golang.org/grpc/resolver"
|
||||||
"google.golang.org/grpc/xds/internal/balancer/outlierdetection"
|
|
||||||
"google.golang.org/grpc/xds/internal/testutils/fakeclient"
|
"google.golang.org/grpc/xds/internal/testutils/fakeclient"
|
||||||
"google.golang.org/grpc/xds/internal/xdsclient/bootstrap"
|
"google.golang.org/grpc/xds/internal/xdsclient/bootstrap"
|
||||||
"google.golang.org/grpc/xds/internal/xdsclient/xdsresource"
|
"google.golang.org/grpc/xds/internal/xdsclient/xdsresource"
|
||||||
|
|
@ -251,7 +250,7 @@ func (s) TestSecurityConfigWithoutXDSCreds(t *testing.T) {
|
||||||
// returned to the CDS balancer, because we have overridden the
|
// returned to the CDS balancer, because we have overridden the
|
||||||
// newChildBalancer function as part of test setup.
|
// newChildBalancer function as part of test setup.
|
||||||
cdsUpdate := xdsresource.ClusterUpdate{ClusterName: serviceName}
|
cdsUpdate := xdsresource.ClusterUpdate{ClusterName: serviceName}
|
||||||
wantCCS := edsCCS(serviceName, nil, false, nil, outlierdetection.LBConfig{})
|
wantCCS := edsCCS(serviceName, nil, false, nil, noopODLBCfg)
|
||||||
ctx, ctxCancel := context.WithTimeout(context.Background(), defaultTestTimeout)
|
ctx, ctxCancel := context.WithTimeout(context.Background(), defaultTestTimeout)
|
||||||
defer ctxCancel()
|
defer ctxCancel()
|
||||||
if err := invokeWatchCbAndWait(ctx, xdsC, cdsWatchInfo{cdsUpdate, nil}, wantCCS, edsB); err != nil {
|
if err := invokeWatchCbAndWait(ctx, xdsC, cdsWatchInfo{cdsUpdate, nil}, wantCCS, edsB); err != nil {
|
||||||
|
|
@ -307,7 +306,7 @@ func (s) TestNoSecurityConfigWithXDSCreds(t *testing.T) {
|
||||||
// newChildBalancer function as part of test setup. No security config is
|
// newChildBalancer function as part of test setup. No security config is
|
||||||
// passed to the CDS balancer as part of this update.
|
// passed to the CDS balancer as part of this update.
|
||||||
cdsUpdate := xdsresource.ClusterUpdate{ClusterName: serviceName}
|
cdsUpdate := xdsresource.ClusterUpdate{ClusterName: serviceName}
|
||||||
wantCCS := edsCCS(serviceName, nil, false, nil, outlierdetection.LBConfig{})
|
wantCCS := edsCCS(serviceName, nil, false, nil, noopODLBCfg)
|
||||||
ctx, ctxCancel := context.WithTimeout(context.Background(), defaultTestTimeout)
|
ctx, ctxCancel := context.WithTimeout(context.Background(), defaultTestTimeout)
|
||||||
defer ctxCancel()
|
defer ctxCancel()
|
||||||
if err := invokeWatchCbAndWait(ctx, xdsC, cdsWatchInfo{cdsUpdate, nil}, wantCCS, edsB); err != nil {
|
if err := invokeWatchCbAndWait(ctx, xdsC, cdsWatchInfo{cdsUpdate, nil}, wantCCS, edsB); err != nil {
|
||||||
|
|
@ -463,7 +462,7 @@ func (s) TestSecurityConfigUpdate_BadToGood(t *testing.T) {
|
||||||
// create a new EDS balancer. The fake EDS balancer created above will be
|
// create a new EDS balancer. The fake EDS balancer created above will be
|
||||||
// returned to the CDS balancer, because we have overridden the
|
// returned to the CDS balancer, because we have overridden the
|
||||||
// newChildBalancer function as part of test setup.
|
// newChildBalancer function as part of test setup.
|
||||||
wantCCS := edsCCS(serviceName, nil, false, nil, outlierdetection.LBConfig{})
|
wantCCS := edsCCS(serviceName, nil, false, nil, noopODLBCfg)
|
||||||
if err := invokeWatchCbAndWait(ctx, xdsC, cdsWatchInfo{cdsUpdateWithGoodSecurityCfg, nil}, wantCCS, edsB); err != nil {
|
if err := invokeWatchCbAndWait(ctx, xdsC, cdsWatchInfo{cdsUpdateWithGoodSecurityCfg, nil}, wantCCS, edsB); err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
@ -497,7 +496,7 @@ func (s) TestGoodSecurityConfig(t *testing.T) {
|
||||||
// create a new EDS balancer. The fake EDS balancer created above will be
|
// create a new EDS balancer. The fake EDS balancer created above will be
|
||||||
// returned to the CDS balancer, because we have overridden the
|
// returned to the CDS balancer, because we have overridden the
|
||||||
// newChildBalancer function as part of test setup.
|
// newChildBalancer function as part of test setup.
|
||||||
wantCCS := edsCCS(serviceName, nil, false, nil, outlierdetection.LBConfig{})
|
wantCCS := edsCCS(serviceName, nil, false, nil, noopODLBCfg)
|
||||||
ctx, ctxCancel := context.WithTimeout(context.Background(), defaultTestTimeout)
|
ctx, ctxCancel := context.WithTimeout(context.Background(), defaultTestTimeout)
|
||||||
defer ctxCancel()
|
defer ctxCancel()
|
||||||
if err := invokeWatchCbAndWait(ctx, xdsC, cdsWatchInfo{cdsUpdateWithGoodSecurityCfg, nil}, wantCCS, edsB); err != nil {
|
if err := invokeWatchCbAndWait(ctx, xdsC, cdsWatchInfo{cdsUpdateWithGoodSecurityCfg, nil}, wantCCS, edsB); err != nil {
|
||||||
|
|
@ -550,7 +549,7 @@ func (s) TestSecurityConfigUpdate_GoodToFallback(t *testing.T) {
|
||||||
// create a new EDS balancer. The fake EDS balancer created above will be
|
// create a new EDS balancer. The fake EDS balancer created above will be
|
||||||
// returned to the CDS balancer, because we have overridden the
|
// returned to the CDS balancer, because we have overridden the
|
||||||
// newChildBalancer function as part of test setup.
|
// newChildBalancer function as part of test setup.
|
||||||
wantCCS := edsCCS(serviceName, nil, false, nil, outlierdetection.LBConfig{})
|
wantCCS := edsCCS(serviceName, nil, false, nil, noopODLBCfg)
|
||||||
ctx, ctxCancel := context.WithTimeout(context.Background(), defaultTestTimeout)
|
ctx, ctxCancel := context.WithTimeout(context.Background(), defaultTestTimeout)
|
||||||
defer ctxCancel()
|
defer ctxCancel()
|
||||||
if err := invokeWatchCbAndWait(ctx, xdsC, cdsWatchInfo{cdsUpdateWithGoodSecurityCfg, nil}, wantCCS, edsB); err != nil {
|
if err := invokeWatchCbAndWait(ctx, xdsC, cdsWatchInfo{cdsUpdateWithGoodSecurityCfg, nil}, wantCCS, edsB); err != nil {
|
||||||
|
|
@ -600,7 +599,7 @@ func (s) TestSecurityConfigUpdate_GoodToBad(t *testing.T) {
|
||||||
// create a new EDS balancer. The fake EDS balancer created above will be
|
// create a new EDS balancer. The fake EDS balancer created above will be
|
||||||
// returned to the CDS balancer, because we have overridden the
|
// returned to the CDS balancer, because we have overridden the
|
||||||
// newChildBalancer function as part of test setup.
|
// newChildBalancer function as part of test setup.
|
||||||
wantCCS := edsCCS(serviceName, nil, false, nil, outlierdetection.LBConfig{})
|
wantCCS := edsCCS(serviceName, nil, false, nil, noopODLBCfg)
|
||||||
ctx, ctxCancel := context.WithTimeout(context.Background(), defaultTestTimeout)
|
ctx, ctxCancel := context.WithTimeout(context.Background(), defaultTestTimeout)
|
||||||
defer ctxCancel()
|
defer ctxCancel()
|
||||||
if err := invokeWatchCbAndWait(ctx, xdsC, cdsWatchInfo{cdsUpdateWithGoodSecurityCfg, nil}, wantCCS, edsB); err != nil {
|
if err := invokeWatchCbAndWait(ctx, xdsC, cdsWatchInfo{cdsUpdateWithGoodSecurityCfg, nil}, wantCCS, edsB); err != nil {
|
||||||
|
|
@ -678,7 +677,7 @@ func (s) TestSecurityConfigUpdate_GoodToGood(t *testing.T) {
|
||||||
SubjectAltNameMatchers: testSANMatchers,
|
SubjectAltNameMatchers: testSANMatchers,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
wantCCS := edsCCS(serviceName, nil, false, nil, outlierdetection.LBConfig{})
|
wantCCS := edsCCS(serviceName, nil, false, nil, noopODLBCfg)
|
||||||
ctx, ctxCancel := context.WithTimeout(context.Background(), defaultTestTimeout)
|
ctx, ctxCancel := context.WithTimeout(context.Background(), defaultTestTimeout)
|
||||||
defer ctxCancel()
|
defer ctxCancel()
|
||||||
if err := invokeWatchCbAndWait(ctx, xdsC, cdsWatchInfo{cdsUpdate, nil}, wantCCS, edsB); err != nil {
|
if err := invokeWatchCbAndWait(ctx, xdsC, cdsWatchInfo{cdsUpdate, nil}, wantCCS, edsB); err != nil {
|
||||||
|
|
|
||||||
|
|
@ -29,7 +29,6 @@ import (
|
||||||
"google.golang.org/grpc/balancer"
|
"google.golang.org/grpc/balancer"
|
||||||
"google.golang.org/grpc/connectivity"
|
"google.golang.org/grpc/connectivity"
|
||||||
"google.golang.org/grpc/internal"
|
"google.golang.org/grpc/internal"
|
||||||
"google.golang.org/grpc/internal/envconfig"
|
|
||||||
"google.golang.org/grpc/internal/grpctest"
|
"google.golang.org/grpc/internal/grpctest"
|
||||||
internalserviceconfig "google.golang.org/grpc/internal/serviceconfig"
|
internalserviceconfig "google.golang.org/grpc/internal/serviceconfig"
|
||||||
"google.golang.org/grpc/internal/testutils"
|
"google.golang.org/grpc/internal/testutils"
|
||||||
|
|
@ -366,14 +365,11 @@ func (s) TestUpdateClientConnStateWithSameState(t *testing.T) {
|
||||||
// different updates and verifies that the expect ClientConnState is propagated
|
// different updates and verifies that the expect ClientConnState is propagated
|
||||||
// to the edsBalancer.
|
// to the edsBalancer.
|
||||||
func (s) TestHandleClusterUpdate(t *testing.T) {
|
func (s) TestHandleClusterUpdate(t *testing.T) {
|
||||||
oldOutlierDetection := envconfig.XDSOutlierDetection
|
|
||||||
envconfig.XDSOutlierDetection = true
|
|
||||||
xdsC, cdsB, edsB, _, cancel := setupWithWatch(t)
|
xdsC, cdsB, edsB, _, cancel := setupWithWatch(t)
|
||||||
xdsC.SetBootstrapConfig(&bootstrap.Config{
|
xdsC.SetBootstrapConfig(&bootstrap.Config{
|
||||||
XDSServer: defaultTestAuthorityServerConfig,
|
XDSServer: defaultTestAuthorityServerConfig,
|
||||||
})
|
})
|
||||||
defer func() {
|
defer func() {
|
||||||
envconfig.XDSOutlierDetection = oldOutlierDetection
|
|
||||||
cancel()
|
cancel()
|
||||||
cdsB.Close()
|
cdsB.Close()
|
||||||
}()
|
}()
|
||||||
|
|
@ -506,7 +502,7 @@ func (s) TestHandleClusterUpdateError(t *testing.T) {
|
||||||
// returned to the CDS balancer, because we have overridden the
|
// returned to the CDS balancer, because we have overridden the
|
||||||
// newChildBalancer function as part of test setup.
|
// newChildBalancer function as part of test setup.
|
||||||
cdsUpdate := xdsresource.ClusterUpdate{ClusterName: serviceName}
|
cdsUpdate := xdsresource.ClusterUpdate{ClusterName: serviceName}
|
||||||
wantCCS := edsCCS(serviceName, nil, false, nil, outlierdetection.LBConfig{})
|
wantCCS := edsCCS(serviceName, nil, false, nil, noopODLBCfg)
|
||||||
if err := invokeWatchCbAndWait(ctx, xdsC, cdsWatchInfo{cdsUpdate, nil}, wantCCS, edsB); err != nil {
|
if err := invokeWatchCbAndWait(ctx, xdsC, cdsWatchInfo{cdsUpdate, nil}, wantCCS, edsB); err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
@ -591,7 +587,7 @@ func (s) TestResolverError(t *testing.T) {
|
||||||
// returned to the CDS balancer, because we have overridden the
|
// returned to the CDS balancer, because we have overridden the
|
||||||
// newChildBalancer function as part of test setup.
|
// newChildBalancer function as part of test setup.
|
||||||
cdsUpdate := xdsresource.ClusterUpdate{ClusterName: serviceName}
|
cdsUpdate := xdsresource.ClusterUpdate{ClusterName: serviceName}
|
||||||
wantCCS := edsCCS(serviceName, nil, false, nil, outlierdetection.LBConfig{})
|
wantCCS := edsCCS(serviceName, nil, false, nil, noopODLBCfg)
|
||||||
if err := invokeWatchCbAndWait(ctx, xdsC, cdsWatchInfo{cdsUpdate, nil}, wantCCS, edsB); err != nil {
|
if err := invokeWatchCbAndWait(ctx, xdsC, cdsWatchInfo{cdsUpdate, nil}, wantCCS, edsB); err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
@ -640,7 +636,7 @@ func (s) TestUpdateSubConnState(t *testing.T) {
|
||||||
// returned to the CDS balancer, because we have overridden the
|
// returned to the CDS balancer, because we have overridden the
|
||||||
// newChildBalancer function as part of test setup.
|
// newChildBalancer function as part of test setup.
|
||||||
cdsUpdate := xdsresource.ClusterUpdate{ClusterName: serviceName}
|
cdsUpdate := xdsresource.ClusterUpdate{ClusterName: serviceName}
|
||||||
wantCCS := edsCCS(serviceName, nil, false, nil, outlierdetection.LBConfig{})
|
wantCCS := edsCCS(serviceName, nil, false, nil, noopODLBCfg)
|
||||||
ctx, ctxCancel := context.WithTimeout(context.Background(), defaultTestTimeout)
|
ctx, ctxCancel := context.WithTimeout(context.Background(), defaultTestTimeout)
|
||||||
defer ctxCancel()
|
defer ctxCancel()
|
||||||
if err := invokeWatchCbAndWait(ctx, xdsC, cdsWatchInfo{cdsUpdate, nil}, wantCCS, edsB); err != nil {
|
if err := invokeWatchCbAndWait(ctx, xdsC, cdsWatchInfo{cdsUpdate, nil}, wantCCS, edsB); err != nil {
|
||||||
|
|
@ -675,7 +671,7 @@ func (s) TestCircuitBreaking(t *testing.T) {
|
||||||
// the service's counter with the new max requests.
|
// the service's counter with the new max requests.
|
||||||
var maxRequests uint32 = 1
|
var maxRequests uint32 = 1
|
||||||
cdsUpdate := xdsresource.ClusterUpdate{ClusterName: clusterName, MaxRequests: &maxRequests}
|
cdsUpdate := xdsresource.ClusterUpdate{ClusterName: clusterName, MaxRequests: &maxRequests}
|
||||||
wantCCS := edsCCS(clusterName, &maxRequests, false, nil, outlierdetection.LBConfig{})
|
wantCCS := edsCCS(clusterName, &maxRequests, false, nil, noopODLBCfg)
|
||||||
ctx, ctxCancel := context.WithTimeout(context.Background(), defaultTestTimeout)
|
ctx, ctxCancel := context.WithTimeout(context.Background(), defaultTestTimeout)
|
||||||
defer ctxCancel()
|
defer ctxCancel()
|
||||||
if err := invokeWatchCbAndWait(ctx, xdsC, cdsWatchInfo{cdsUpdate, nil}, wantCCS, edsB); err != nil {
|
if err := invokeWatchCbAndWait(ctx, xdsC, cdsWatchInfo{cdsUpdate, nil}, wantCCS, edsB); err != nil {
|
||||||
|
|
@ -708,7 +704,7 @@ func (s) TestClose(t *testing.T) {
|
||||||
// returned to the CDS balancer, because we have overridden the
|
// returned to the CDS balancer, because we have overridden the
|
||||||
// newChildBalancer function as part of test setup.
|
// newChildBalancer function as part of test setup.
|
||||||
cdsUpdate := xdsresource.ClusterUpdate{ClusterName: serviceName}
|
cdsUpdate := xdsresource.ClusterUpdate{ClusterName: serviceName}
|
||||||
wantCCS := edsCCS(serviceName, nil, false, nil, outlierdetection.LBConfig{})
|
wantCCS := edsCCS(serviceName, nil, false, nil, noopODLBCfg)
|
||||||
ctx, ctxCancel := context.WithTimeout(context.Background(), defaultTestTimeout)
|
ctx, ctxCancel := context.WithTimeout(context.Background(), defaultTestTimeout)
|
||||||
defer ctxCancel()
|
defer ctxCancel()
|
||||||
if err := invokeWatchCbAndWait(ctx, xdsC, cdsWatchInfo{cdsUpdate, nil}, wantCCS, edsB); err != nil {
|
if err := invokeWatchCbAndWait(ctx, xdsC, cdsWatchInfo{cdsUpdate, nil}, wantCCS, edsB); err != nil {
|
||||||
|
|
@ -779,7 +775,7 @@ func (s) TestExitIdle(t *testing.T) {
|
||||||
// returned to the CDS balancer, because we have overridden the
|
// returned to the CDS balancer, because we have overridden the
|
||||||
// newChildBalancer function as part of test setup.
|
// newChildBalancer function as part of test setup.
|
||||||
cdsUpdate := xdsresource.ClusterUpdate{ClusterName: serviceName}
|
cdsUpdate := xdsresource.ClusterUpdate{ClusterName: serviceName}
|
||||||
wantCCS := edsCCS(serviceName, nil, false, nil, outlierdetection.LBConfig{})
|
wantCCS := edsCCS(serviceName, nil, false, nil, noopODLBCfg)
|
||||||
ctx, ctxCancel := context.WithTimeout(context.Background(), defaultTestTimeout)
|
ctx, ctxCancel := context.WithTimeout(context.Background(), defaultTestTimeout)
|
||||||
defer ctxCancel()
|
defer ctxCancel()
|
||||||
if err := invokeWatchCbAndWait(ctx, xdsC, cdsWatchInfo{cdsUpdate, nil}, wantCCS, edsB); err != nil {
|
if err := invokeWatchCbAndWait(ctx, xdsC, cdsWatchInfo{cdsUpdate, nil}, wantCCS, edsB); err != nil {
|
||||||
|
|
|
||||||
|
|
@ -30,8 +30,6 @@ import (
|
||||||
"google.golang.org/grpc/balancer/roundrobin"
|
"google.golang.org/grpc/balancer/roundrobin"
|
||||||
"google.golang.org/grpc/balancer/weightedtarget"
|
"google.golang.org/grpc/balancer/weightedtarget"
|
||||||
"google.golang.org/grpc/connectivity"
|
"google.golang.org/grpc/connectivity"
|
||||||
"google.golang.org/grpc/internal"
|
|
||||||
"google.golang.org/grpc/internal/envconfig"
|
|
||||||
"google.golang.org/grpc/internal/grpctest"
|
"google.golang.org/grpc/internal/grpctest"
|
||||||
internalserviceconfig "google.golang.org/grpc/internal/serviceconfig"
|
internalserviceconfig "google.golang.org/grpc/internal/serviceconfig"
|
||||||
"google.golang.org/grpc/internal/testutils"
|
"google.golang.org/grpc/internal/testutils"
|
||||||
|
|
@ -533,13 +531,6 @@ func newLBConfigWithOneEDSAndOutlierDetection(edsServiceName string, odCfg outli
|
||||||
// Configuration sent downward should have a top level Outlier Detection Policy
|
// Configuration sent downward should have a top level Outlier Detection Policy
|
||||||
// for each priority.
|
// for each priority.
|
||||||
func (s) TestOutlierDetection(t *testing.T) {
|
func (s) TestOutlierDetection(t *testing.T) {
|
||||||
oldOutlierDetection := envconfig.XDSOutlierDetection
|
|
||||||
envconfig.XDSOutlierDetection = true
|
|
||||||
internal.RegisterOutlierDetectionBalancerForTesting()
|
|
||||||
defer func() {
|
|
||||||
envconfig.XDSOutlierDetection = oldOutlierDetection
|
|
||||||
}()
|
|
||||||
|
|
||||||
edsLBCh := testutils.NewChannel()
|
edsLBCh := testutils.NewChannel()
|
||||||
xdsC, cleanup := setup(edsLBCh)
|
xdsC, cleanup := setup(edsLBCh)
|
||||||
defer cleanup()
|
defer cleanup()
|
||||||
|
|
|
||||||
|
|
@ -31,7 +31,6 @@ import (
|
||||||
"google.golang.org/grpc/balancer/roundrobin"
|
"google.golang.org/grpc/balancer/roundrobin"
|
||||||
"google.golang.org/grpc/balancer/weightedroundrobin"
|
"google.golang.org/grpc/balancer/weightedroundrobin"
|
||||||
"google.golang.org/grpc/balancer/weightedtarget"
|
"google.golang.org/grpc/balancer/weightedtarget"
|
||||||
"google.golang.org/grpc/internal/envconfig"
|
|
||||||
"google.golang.org/grpc/internal/hierarchy"
|
"google.golang.org/grpc/internal/hierarchy"
|
||||||
internalserviceconfig "google.golang.org/grpc/internal/serviceconfig"
|
internalserviceconfig "google.golang.org/grpc/internal/serviceconfig"
|
||||||
"google.golang.org/grpc/resolver"
|
"google.golang.org/grpc/resolver"
|
||||||
|
|
@ -179,156 +178,10 @@ func TestBuildPriorityConfigJSON(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TestBuildPriorityConfig tests the priority config generation. Each top level
|
||||||
|
// balancer per priority should be an Outlier Detection balancer, with a Cluster
|
||||||
|
// Impl Balancer as a child.
|
||||||
func TestBuildPriorityConfig(t *testing.T) {
|
func TestBuildPriorityConfig(t *testing.T) {
|
||||||
gotConfig, gotAddrs, _ := buildPriorityConfig([]priorityConfig{
|
|
||||||
{
|
|
||||||
mechanism: DiscoveryMechanism{
|
|
||||||
Cluster: testClusterName,
|
|
||||||
LoadReportingServer: testLRSServerConfig,
|
|
||||||
MaxConcurrentRequests: newUint32(testMaxRequests),
|
|
||||||
Type: DiscoveryMechanismTypeEDS,
|
|
||||||
EDSServiceName: testEDSServiceName,
|
|
||||||
},
|
|
||||||
edsResp: xdsresource.EndpointsUpdate{
|
|
||||||
Drops: []xdsresource.OverloadDropConfig{
|
|
||||||
{
|
|
||||||
Category: testDropCategory,
|
|
||||||
Numerator: testDropOverMillion,
|
|
||||||
Denominator: million,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
Localities: []xdsresource.Locality{
|
|
||||||
testLocalitiesP0[0],
|
|
||||||
testLocalitiesP0[1],
|
|
||||||
testLocalitiesP1[0],
|
|
||||||
testLocalitiesP1[1],
|
|
||||||
},
|
|
||||||
},
|
|
||||||
childNameGen: newNameGenerator(0),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mechanism: DiscoveryMechanism{
|
|
||||||
Cluster: testClusterName2,
|
|
||||||
Type: DiscoveryMechanismTypeLogicalDNS,
|
|
||||||
},
|
|
||||||
addresses: testAddressStrs[4],
|
|
||||||
childNameGen: newNameGenerator(1),
|
|
||||||
},
|
|
||||||
}, nil)
|
|
||||||
|
|
||||||
wantConfig := &priority.LBConfig{
|
|
||||||
Children: map[string]*priority.Child{
|
|
||||||
"priority-0-0": {
|
|
||||||
Config: &internalserviceconfig.BalancerConfig{
|
|
||||||
Name: clusterimpl.Name,
|
|
||||||
Config: &clusterimpl.LBConfig{
|
|
||||||
Cluster: testClusterName,
|
|
||||||
EDSServiceName: testEDSServiceName,
|
|
||||||
LoadReportingServer: testLRSServerConfig,
|
|
||||||
MaxConcurrentRequests: newUint32(testMaxRequests),
|
|
||||||
DropCategories: []clusterimpl.DropConfig{
|
|
||||||
{
|
|
||||||
Category: testDropCategory,
|
|
||||||
RequestsPerMillion: testDropOverMillion,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
ChildPolicy: &internalserviceconfig.BalancerConfig{
|
|
||||||
Name: weightedtarget.Name,
|
|
||||||
Config: &weightedtarget.LBConfig{
|
|
||||||
Targets: map[string]weightedtarget.Target{
|
|
||||||
assertString(testLocalityIDs[0].ToString): {
|
|
||||||
Weight: 20,
|
|
||||||
ChildPolicy: &internalserviceconfig.BalancerConfig{Name: roundrobin.Name},
|
|
||||||
},
|
|
||||||
assertString(testLocalityIDs[1].ToString): {
|
|
||||||
Weight: 80,
|
|
||||||
ChildPolicy: &internalserviceconfig.BalancerConfig{Name: roundrobin.Name},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
IgnoreReresolutionRequests: true,
|
|
||||||
},
|
|
||||||
"priority-0-1": {
|
|
||||||
Config: &internalserviceconfig.BalancerConfig{
|
|
||||||
Name: clusterimpl.Name,
|
|
||||||
Config: &clusterimpl.LBConfig{
|
|
||||||
Cluster: testClusterName,
|
|
||||||
EDSServiceName: testEDSServiceName,
|
|
||||||
LoadReportingServer: testLRSServerConfig,
|
|
||||||
MaxConcurrentRequests: newUint32(testMaxRequests),
|
|
||||||
DropCategories: []clusterimpl.DropConfig{
|
|
||||||
{
|
|
||||||
Category: testDropCategory,
|
|
||||||
RequestsPerMillion: testDropOverMillion,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
ChildPolicy: &internalserviceconfig.BalancerConfig{
|
|
||||||
Name: weightedtarget.Name,
|
|
||||||
Config: &weightedtarget.LBConfig{
|
|
||||||
Targets: map[string]weightedtarget.Target{
|
|
||||||
assertString(testLocalityIDs[2].ToString): {
|
|
||||||
Weight: 20,
|
|
||||||
ChildPolicy: &internalserviceconfig.BalancerConfig{Name: roundrobin.Name},
|
|
||||||
},
|
|
||||||
assertString(testLocalityIDs[3].ToString): {
|
|
||||||
Weight: 80,
|
|
||||||
ChildPolicy: &internalserviceconfig.BalancerConfig{Name: roundrobin.Name},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
IgnoreReresolutionRequests: true,
|
|
||||||
},
|
|
||||||
"priority-1": {
|
|
||||||
Config: &internalserviceconfig.BalancerConfig{
|
|
||||||
Name: clusterimpl.Name,
|
|
||||||
Config: &clusterimpl.LBConfig{
|
|
||||||
Cluster: testClusterName2,
|
|
||||||
ChildPolicy: &internalserviceconfig.BalancerConfig{Name: "pick_first"},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
IgnoreReresolutionRequests: false,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
Priorities: []string{"priority-0-0", "priority-0-1", "priority-1"},
|
|
||||||
}
|
|
||||||
wantAddrs := []resolver.Address{
|
|
||||||
testAddrWithAttrs(testAddressStrs[0][0], nil, "priority-0-0", &testLocalityIDs[0]),
|
|
||||||
testAddrWithAttrs(testAddressStrs[0][1], nil, "priority-0-0", &testLocalityIDs[0]),
|
|
||||||
testAddrWithAttrs(testAddressStrs[1][0], nil, "priority-0-0", &testLocalityIDs[1]),
|
|
||||||
testAddrWithAttrs(testAddressStrs[1][1], nil, "priority-0-0", &testLocalityIDs[1]),
|
|
||||||
testAddrWithAttrs(testAddressStrs[2][0], nil, "priority-0-1", &testLocalityIDs[2]),
|
|
||||||
testAddrWithAttrs(testAddressStrs[2][1], nil, "priority-0-1", &testLocalityIDs[2]),
|
|
||||||
testAddrWithAttrs(testAddressStrs[3][0], nil, "priority-0-1", &testLocalityIDs[3]),
|
|
||||||
testAddrWithAttrs(testAddressStrs[3][1], nil, "priority-0-1", &testLocalityIDs[3]),
|
|
||||||
testAddrWithAttrs(testAddressStrs[4][0], nil, "priority-1", nil),
|
|
||||||
testAddrWithAttrs(testAddressStrs[4][1], nil, "priority-1", nil),
|
|
||||||
}
|
|
||||||
|
|
||||||
if diff := cmp.Diff(gotConfig, wantConfig); diff != "" {
|
|
||||||
t.Errorf("buildPriorityConfig() diff (-got +want) %v", diff)
|
|
||||||
}
|
|
||||||
if diff := cmp.Diff(gotAddrs, wantAddrs, addrCmpOpts); diff != "" {
|
|
||||||
t.Errorf("buildPriorityConfig() diff (-got +want) %v", diff)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// TestBuildPriorityConfigWithOutlierDetection tests the priority config
|
|
||||||
// generation with Outlier Detection toggled on. Each top level balancer per
|
|
||||||
// priority should be an Outlier Detection balancer, with a Cluster Impl
|
|
||||||
// Balancer as a child.
|
|
||||||
func TestBuildPriorityConfigWithOutlierDetection(t *testing.T) {
|
|
||||||
oldOutlierDetection := envconfig.XDSOutlierDetection
|
|
||||||
envconfig.XDSOutlierDetection = true
|
|
||||||
defer func() {
|
|
||||||
envconfig.XDSOutlierDetection = oldOutlierDetection
|
|
||||||
}()
|
|
||||||
|
|
||||||
gotConfig, _, _ := buildPriorityConfig([]priorityConfig{
|
gotConfig, _, _ := buildPriorityConfig([]priorityConfig{
|
||||||
{
|
{
|
||||||
// EDS - OD config should be the top level for both of the EDS
|
// EDS - OD config should be the top level for both of the EDS
|
||||||
|
|
|
||||||
|
|
@ -33,7 +33,6 @@ import (
|
||||||
|
|
||||||
"google.golang.org/grpc/balancer"
|
"google.golang.org/grpc/balancer"
|
||||||
"google.golang.org/grpc/connectivity"
|
"google.golang.org/grpc/connectivity"
|
||||||
"google.golang.org/grpc/internal"
|
|
||||||
"google.golang.org/grpc/internal/balancer/gracefulswitch"
|
"google.golang.org/grpc/internal/balancer/gracefulswitch"
|
||||||
"google.golang.org/grpc/internal/buffer"
|
"google.golang.org/grpc/internal/buffer"
|
||||||
"google.golang.org/grpc/internal/envconfig"
|
"google.golang.org/grpc/internal/envconfig"
|
||||||
|
|
@ -57,13 +56,6 @@ func init() {
|
||||||
if envconfig.XDSOutlierDetection {
|
if envconfig.XDSOutlierDetection {
|
||||||
balancer.Register(bb{})
|
balancer.Register(bb{})
|
||||||
}
|
}
|
||||||
// TODO: Remove these once the Outlier Detection env var is removed.
|
|
||||||
internal.RegisterOutlierDetectionBalancerForTesting = func() {
|
|
||||||
balancer.Register(bb{})
|
|
||||||
}
|
|
||||||
internal.UnregisterOutlierDetectionBalancerForTesting = func() {
|
|
||||||
internal.BalancerUnregister(Name)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type bb struct{}
|
type bb struct{}
|
||||||
|
|
|
||||||
|
|
@ -33,7 +33,6 @@ import (
|
||||||
"github.com/google/go-cmp/cmp/cmpopts"
|
"github.com/google/go-cmp/cmp/cmpopts"
|
||||||
"google.golang.org/grpc/balancer"
|
"google.golang.org/grpc/balancer"
|
||||||
"google.golang.org/grpc/connectivity"
|
"google.golang.org/grpc/connectivity"
|
||||||
"google.golang.org/grpc/internal"
|
|
||||||
"google.golang.org/grpc/internal/balancer/stub"
|
"google.golang.org/grpc/internal/balancer/stub"
|
||||||
"google.golang.org/grpc/internal/grpcsync"
|
"google.golang.org/grpc/internal/grpcsync"
|
||||||
"google.golang.org/grpc/internal/grpctest"
|
"google.golang.org/grpc/internal/grpctest"
|
||||||
|
|
@ -300,17 +299,13 @@ type subConnWithState struct {
|
||||||
|
|
||||||
func setup(t *testing.T) (*outlierDetectionBalancer, *testutils.TestClientConn, func()) {
|
func setup(t *testing.T) (*outlierDetectionBalancer, *testutils.TestClientConn, func()) {
|
||||||
t.Helper()
|
t.Helper()
|
||||||
internal.RegisterOutlierDetectionBalancerForTesting()
|
|
||||||
builder := balancer.Get(Name)
|
builder := balancer.Get(Name)
|
||||||
if builder == nil {
|
if builder == nil {
|
||||||
t.Fatalf("balancer.Get(%q) returned nil", Name)
|
t.Fatalf("balancer.Get(%q) returned nil", Name)
|
||||||
}
|
}
|
||||||
tcc := testutils.NewTestClientConn(t)
|
tcc := testutils.NewTestClientConn(t)
|
||||||
odB := builder.Build(tcc, balancer.BuildOptions{})
|
odB := builder.Build(tcc, balancer.BuildOptions{})
|
||||||
return odB.(*outlierDetectionBalancer), tcc, func() {
|
return odB.(*outlierDetectionBalancer), tcc, odB.Close
|
||||||
odB.Close()
|
|
||||||
internal.UnregisterOutlierDetectionBalancerForTesting()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type emptyChildConfig struct {
|
type emptyChildConfig struct {
|
||||||
|
|
@ -361,7 +356,6 @@ func (s) TestChildBasicOperations(t *testing.T) {
|
||||||
})
|
})
|
||||||
|
|
||||||
od, tcc, _ := setup(t)
|
od, tcc, _ := setup(t)
|
||||||
defer internal.UnregisterOutlierDetectionBalancerForTesting()
|
|
||||||
|
|
||||||
// This first config update should cause a child to be built and forwarded
|
// This first config update should cause a child to be built and forwarded
|
||||||
// it's first update.
|
// it's first update.
|
||||||
|
|
|
||||||
|
|
@ -199,8 +199,6 @@ func (s) TestOutlierDetectionAlgorithmsE2E(t *testing.T) {
|
||||||
}
|
}
|
||||||
for _, test := range tests {
|
for _, test := range tests {
|
||||||
t.Run(test.name, func(t *testing.T) {
|
t.Run(test.name, func(t *testing.T) {
|
||||||
internal.RegisterOutlierDetectionBalancerForTesting()
|
|
||||||
defer internal.UnregisterOutlierDetectionBalancerForTesting()
|
|
||||||
addresses, cancel := setupBackends(t)
|
addresses, cancel := setupBackends(t)
|
||||||
defer cancel()
|
defer cancel()
|
||||||
|
|
||||||
|
|
@ -265,8 +263,6 @@ func (s) TestOutlierDetectionAlgorithmsE2E(t *testing.T) {
|
||||||
// requiring counting RPC's, the Outlier Detection Balancer should start
|
// requiring counting RPC's, the Outlier Detection Balancer should start
|
||||||
// ejecting any upstreams as specified in the configuration.
|
// ejecting any upstreams as specified in the configuration.
|
||||||
func (s) TestNoopConfiguration(t *testing.T) {
|
func (s) TestNoopConfiguration(t *testing.T) {
|
||||||
internal.RegisterOutlierDetectionBalancerForTesting()
|
|
||||||
defer internal.UnregisterOutlierDetectionBalancerForTesting()
|
|
||||||
addresses, cancel := setupBackends(t)
|
addresses, cancel := setupBackends(t)
|
||||||
defer cancel()
|
defer cancel()
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1690,9 +1690,6 @@ func (s) TestUnmarshalCluster(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s) TestValidateClusterWithOutlierDetection(t *testing.T) {
|
func (s) TestValidateClusterWithOutlierDetection(t *testing.T) {
|
||||||
oldOutlierDetectionSupportEnv := envconfig.XDSOutlierDetection
|
|
||||||
envconfig.XDSOutlierDetection = true
|
|
||||||
defer func() { envconfig.XDSOutlierDetection = oldOutlierDetectionSupportEnv }()
|
|
||||||
odToClusterProto := func(od *v3clusterpb.OutlierDetection) *v3clusterpb.Cluster {
|
odToClusterProto := func(od *v3clusterpb.OutlierDetection) *v3clusterpb.Cluster {
|
||||||
// Cluster parsing doesn't fail with respect to fields orthogonal to
|
// Cluster parsing doesn't fail with respect to fields orthogonal to
|
||||||
// outlier detection.
|
// outlier detection.
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue