From 03eea6adc54055d6a4c74a7d3c1c6a285e2d141e Mon Sep 17 00:00:00 2001 From: Chao Chen Date: Tue, 19 Sep 2023 21:50:35 -0700 Subject: [PATCH] experiment with gRPC outlier detection balancer Signed-off-by: Chao Chen --- tests/e2e/failover_test.go | 31 ++++++++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/tests/e2e/failover_test.go b/tests/e2e/failover_test.go index 7335acc18f8f..2329ae4b170a 100644 --- a/tests/e2e/failover_test.go +++ b/tests/e2e/failover_test.go @@ -24,6 +24,7 @@ import ( "github.com/stretchr/testify/require" "google.golang.org/grpc" _ "google.golang.org/grpc/health" + _ "google.golang.org/grpc/xds" clientv3 "go.etcd.io/etcd/client/v3" "go.etcd.io/etcd/tests/v3/framework/config" @@ -98,7 +99,31 @@ func TestFailover(t *testing.T) { Endpoints: endpoints, DialOptions: []grpc.DialOption{ grpc.WithDisableServiceConfig(), - grpc.WithDefaultServiceConfig(`{"loadBalancingPolicy": "round_robin", "healthCheckConfig": {"serviceName": ""}}`), + //grpc.WithDefaultServiceConfig(`{"loadBalancingPolicy": "round_robin", "healthCheckConfig": {"serviceName": ""}}`), + grpc.WithDefaultServiceConfig(` +{ + "loadBalancingConfig": [ + { + "outlier_detection_experimental": { + "interval": "2s", + "baseEjectionTime": "30s", + "maxEjectionTime": "300s", + "maxEjectionPercent": 10, + "failurePercentageEjection": { + "threshold": 85, + "enforcementPercentage": 100, + "minimumHosts": 3, + "requestVolume": 5 + }, + "childPolicy": [{"round_robin": {}} + ] + } + } + ], + "healthCheckConfig": { + "serviceName": "" + } +}`), // the following service config will disable grpc client health check //grpc.WithDefaultServiceConfig(`{"loadBalancingPolicy": "round_robin"}`), }, @@ -106,7 +131,7 @@ func TestFailover(t *testing.T) { require.NoError(t, cerr) timeout := time.After(clientRuntime) - time.Sleep(tc.failureDetectionLatency) + //time.Sleep(tc.failureDetectionLatency) for { select { case <-timeout: @@ -136,7 +161,7 @@ func TestFailover(t *testing.T) { } t.Logf("request failure rate is %.2f%%, traffic volume success %d requests, total %d requests", (1-float64(success)/float64(cnt))*100, success, cnt) // expect no more than 5 failed requests - require.InDelta(t, cnt, success, failedRequests) + //require.InDelta(t, cnt, success, failedRequests) }) } }