Skip to content

Commit 959adaa

Browse files
authored
Ring hash fix for affinity test (#211)
Start a temporary client to verify all endpoints are reported by TD. This is to address flakiness where the main client starts with a partial list of endpoints. Causing issue with RING_HASH no of sub channel validations Bug b/374693206
1 parent 034e5cf commit 959adaa

File tree

2 files changed

+20
-2
lines changed

2 files changed

+20
-2
lines changed

framework/xds_k8s_testcase.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1116,6 +1116,9 @@ def initKubernetesServerRunner(self, **kwargs) -> KubernetesServerRunner:
11161116
)
11171117

11181118
def initKubernetesClientRunner(self, **kwargs) -> KubernetesClientRunner:
1119+
reuse_namespace = kwargs.pop("reuse_namespace", False) or (
1120+
self.server_namespace == self.client_namespace
1121+
)
11191122
return KubernetesClientRunner(
11201123
k8s.KubernetesNamespace(
11211124
self.k8s_api_manager, self.client_namespace
@@ -1131,7 +1134,7 @@ def initKubernetesClientRunner(self, **kwargs) -> KubernetesClientRunner:
11311134
debug_use_port_forwarding=self.debug_use_port_forwarding,
11321135
enable_workload_identity=self.enable_workload_identity,
11331136
stats_port=self.client_port,
1134-
reuse_namespace=self.server_namespace == self.client_namespace,
1137+
reuse_namespace=reuse_namespace,
11351138
**kwargs,
11361139
)
11371140

tests/affinity_test.py

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,14 @@
1717

1818
from absl import flags
1919
from absl.testing import absltest
20+
from typing_extensions import override
2021

2122
from framework import xds_k8s_flags
2223
from framework import xds_k8s_testcase
2324
from framework.helpers import skips
2425
from framework.rpc import grpc_channelz
2526
from framework.rpc import grpc_testing
27+
from framework.test_app.runners.k8s import k8s_xds_client_runner
2628

2729
logger = logging.getLogger(__name__)
2830
flags.adopt_module_key_flags(xds_k8s_testcase)
@@ -31,6 +33,7 @@
3133
_XdsTestServer = xds_k8s_testcase.XdsTestServer
3234
_XdsTestClient = xds_k8s_testcase.XdsTestClient
3335
_ChannelzChannelState = grpc_channelz.ChannelState
36+
KubernetesClientRunner = k8s_xds_client_runner.KubernetesClientRunner
3437
_Lang = skips.Lang
3538

3639
# Testing consts
@@ -61,6 +64,10 @@ def is_supported(config: skips.TestConfig) -> bool:
6164
return config.version_gte("v1.10.x")
6265
return True
6366

67+
@override
68+
def initKubernetesClientRunner(self, **kwargs) -> KubernetesClientRunner:
69+
return super().initKubernetesClientRunner(reuse_namespace=True)
70+
6471
def test_affinity(self) -> None: # pylint: disable=too-many-statements
6572
with self.subTest("00_create_health_check"):
6673
self.td.create_health_check()
@@ -86,6 +93,14 @@ def test_affinity(self) -> None: # pylint: disable=too-many-statements
8693
with self.subTest("06_add_server_backends_to_backend_services"):
8794
self.setupServerBackends()
8895

96+
with self.subTest("06a_wait_for_endpoints_propagation"):
97+
# Start a temporary client to verify all endpoints are reported by TD.
98+
# This is to address flakiness where the main client starts with
99+
# a partial list of endpoints.
100+
temp_client = self.startTestClient(test_servers[0])
101+
self.assertHealthyEndpointsCount(temp_client, _REPLICA_COUNT)
102+
self.client_runner.cleanup(force_namespace=False)
103+
89104
test_client: _XdsTestClient
90105
with self.subTest("07_start_test_client"):
91106
test_client = self.startTestClient(
@@ -174,7 +189,7 @@ def test_affinity(self) -> None: # pylint: disable=too-many-statements
174189
finally:
175190
logging.info("Client received CSDS response: %s", parsed)
176191

177-
with self.subTest("12_next_100_affinity_rpcs_pick_different_backend"):
192+
with self.subTest("13_next_100_affinity_rpcs_pick_different_backend"):
178193
rpc_stats = self.getClientRpcStats(test_client, _RPC_COUNT)
179194
rpc_distribution = grpc_testing.RpcDistributionStats.from_message(
180195
rpc_stats

0 commit comments

Comments
 (0)