more e2e test cleanup

This commit is contained in:
Felix Kunde 2022-01-06 17:43:00 +01:00
parent ea531ff140
commit 92db09182e
1 changed files with 11 additions and 31 deletions

View File

@ -286,7 +286,7 @@ class EndToEndTestCase(unittest.TestCase):
# revert config change # revert config change
revert_resync = { revert_resync = {
"data": { "data": {
"resync_period": "30m", "resync_period": "4m",
}, },
} }
k8s.update_config(revert_resync) k8s.update_config(revert_resync)
@ -933,7 +933,7 @@ class EndToEndTestCase(unittest.TestCase):
# node affinity change should cause replica to relocate from replica node to master node due to node affinity requirement # node affinity change should cause replica to relocate from replica node to master node due to node affinity requirement
k8s.wait_for_pod_failover(master_nodes, 'spilo-role=replica,' + cluster_label) k8s.wait_for_pod_failover(master_nodes, 'spilo-role=replica,' + cluster_label)
k8s.wait_for_pod_start('spilo-role=replica,' + cluster_label) k8s.wait_for_pod_start('spilo-role=replica,' + cluster_label)
# master pod needs to be replaced as well to finish the rolling update # next master will be switched over and pod needs to be replaced as well to finish the rolling update
k8s.wait_for_pod_failover(master_nodes, 'spilo-role=master,' + cluster_label) k8s.wait_for_pod_failover(master_nodes, 'spilo-role=master,' + cluster_label)
k8s.wait_for_pod_start('spilo-role=replica,' + cluster_label) k8s.wait_for_pod_start('spilo-role=replica,' + cluster_label)
@ -994,9 +994,6 @@ class EndToEndTestCase(unittest.TestCase):
self.assertNotEqual(master_nodes, []) self.assertNotEqual(master_nodes, [])
self.assertNotEqual(replica_nodes, []) self.assertNotEqual(replica_nodes, [])
num_replicas = len(replica_nodes)
failover_targets = self.get_failover_targets(master_nodes[0], replica_nodes)
try: try:
# add node_readiness_label to potential failover nodes # add node_readiness_label to potential failover nodes
patch_readiness_label = { patch_readiness_label = {
@ -1006,8 +1003,8 @@ class EndToEndTestCase(unittest.TestCase):
} }
} }
} }
for failover_target in failover_targets: for replica_node in replica_nodes:
k8s.api.core_v1.patch_node(failover_target, patch_readiness_label) k8s.api.core_v1.patch_node(replica_node, patch_readiness_label)
# define node_readiness_label in config map which should trigger a rolling update # define node_readiness_label in config map which should trigger a rolling update
patch_readiness_label_config = { patch_readiness_label_config = {
@ -1019,19 +1016,18 @@ class EndToEndTestCase(unittest.TestCase):
self.eventuallyEqual(lambda: k8s.get_operator_state(), {"0": "idle"}, "Operator does not get in sync") self.eventuallyEqual(lambda: k8s.get_operator_state(), {"0": "idle"}, "Operator does not get in sync")
# first replica will be replaced and get the new affinity # first replica will be replaced and get the new affinity
k8s.wait_for_pod_start('spilo-role=replica,' + cluster_label) # however, it might not start due to a volume node affinity conflict
# in this case only if the pvc and pod are deleted it can be scheduled
# next switchover of the master
k8s.wait_for_pod_failover(failover_targets, 'spilo-role=master,' + cluster_label)
# the old master is replaced. However it might not start due to a volume node affinity conflict
# only if the pvc and pod are deleted it can be scheduled
replica = k8s.get_cluster_replica_pod() replica = k8s.get_cluster_replica_pod()
if replica.status.phase == 'Pending': if replica.status.phase == 'Pending':
k8s.api.core_v1.delete_namespaced_persistent_volume_claim('pgdata-' + replica.metadata.name, 'default') k8s.api.core_v1.delete_namespaced_persistent_volume_claim('pgdata-' + replica.metadata.name, 'default')
k8s.api.core_v1.delete_namespaced_pod(replica.metadata.name, 'default') k8s.api.core_v1.delete_namespaced_pod(replica.metadata.name, 'default')
k8s.wait_for_pod_start('spilo-role=replica,' + cluster_label) k8s.wait_for_pod_start('spilo-role=replica,' + cluster_label)
# next master will be switched over and pod needs to be replaced as well to finish the rolling update
k8s.wait_for_pod_failover(replica_nodes, 'spilo-role=master,' + cluster_label)
k8s.wait_for_pod_start('spilo-role=replica,' + cluster_label)
# patch also node where master ran before # patch also node where master ran before
k8s.api.core_v1.patch_node(master_nodes[0], patch_readiness_label) k8s.api.core_v1.patch_node(master_nodes[0], patch_readiness_label)
@ -1330,7 +1326,7 @@ class EndToEndTestCase(unittest.TestCase):
patch_resync_config = { patch_resync_config = {
"data": { "data": {
"pod_label_wait_timeout": "10m", "pod_label_wait_timeout": "10m",
"resync_period": "30m", "resync_period": "4m",
} }
} }
k8s.update_config(patch_resync_config, "revert resync interval and pod_label_wait_timeout") k8s.update_config(patch_resync_config, "revert resync interval and pod_label_wait_timeout")
@ -1570,22 +1566,6 @@ class EndToEndTestCase(unittest.TestCase):
} }
k8s.update_config(patch_delete_annotations) k8s.update_config(patch_delete_annotations)
def get_failover_targets(self, master_node, replica_nodes):
'''
If all pods live on the same node, failover will happen to other worker(s)
'''
k8s = self.k8s
k8s_master_exclusion = 'kubernetes.io/hostname!=postgres-operator-e2e-tests-control-plane'
failover_targets = [x for x in replica_nodes if x != master_node]
if len(failover_targets) == 0:
nodes = k8s.api.core_v1.list_node(label_selector=k8s_master_exclusion)
for n in nodes.items:
if n.metadata.name != master_node:
failover_targets.append(n.metadata.name)
return failover_targets
def assert_master_is_unique(self, namespace='default', clusterName="acid-minimal-cluster"): def assert_master_is_unique(self, namespace='default', clusterName="acid-minimal-cluster"):
''' '''
Check that there is a single pod in the k8s cluster with the label "spilo-role=master" Check that there is a single pod in the k8s cluster with the label "spilo-role=master"