mirror of
https://github.com/saltstack/salt.git
synced 2025-04-16 09:40:20 +00:00
Fix flaky multi-master test
Run event handlers for all master's in parallel. Otherwise, one handler could block the other from running in a timely manner.
This commit is contained in:
parent
6dcb7182b3
commit
05cd683eab
3 changed files with 37 additions and 4 deletions
|
@ -1072,8 +1072,11 @@ class MinionManager(MinionBase):
|
|||
|
||||
@salt.ext.tornado.gen.coroutine
|
||||
def handle_event(self, package):
|
||||
for minion in self.minions:
|
||||
yield minion.handle_event(package)
|
||||
log.error("Dispatch event to minions")
|
||||
try:
|
||||
yield [_.handle_event(package) for _ in self.minions]
|
||||
except Exception as exc: # pylint: disable=broad-except
|
||||
log.error("Error dispatching event. %s", exc)
|
||||
|
||||
def _create_minion_object(
|
||||
self,
|
||||
|
|
|
@ -25,6 +25,12 @@ def salt_mm_master_1(request, salt_factories):
|
|||
"publish_signing_algorithm": (
|
||||
"PKCS1v15-SHA224" if FIPS_TESTRUN else "PKCS1v15-SHA1"
|
||||
),
|
||||
"log_granular_levels": {
|
||||
"salt": "info",
|
||||
"salt.transport": "debug",
|
||||
"salt.channel": "debug",
|
||||
"salt.utils.event": "debug",
|
||||
},
|
||||
}
|
||||
factory = salt_factories.salt_master_daemon(
|
||||
"mm-master-1",
|
||||
|
@ -56,6 +62,12 @@ def salt_mm_master_2(salt_factories, salt_mm_master_1):
|
|||
"publish_signing_algorithm": (
|
||||
"PKCS1v15-SHA224" if FIPS_TESTRUN else "PKCS1v15-SHA1"
|
||||
),
|
||||
"log_granular_levels": {
|
||||
"salt": "info",
|
||||
"salt.transport": "debug",
|
||||
"salt.channel": "debug",
|
||||
"salt.utils.event": "debug",
|
||||
},
|
||||
}
|
||||
|
||||
# Use the same ports for both masters, they are binding to different interfaces
|
||||
|
@ -106,6 +118,13 @@ def salt_mm_minion_1(salt_mm_master_1, salt_mm_master_2):
|
|||
"fips_mode": FIPS_TESTRUN,
|
||||
"encryption_algorithm": "OAEP-SHA224" if FIPS_TESTRUN else "OAEP-SHA1",
|
||||
"signing_algorithm": "PKCS1v15-SHA224" if FIPS_TESTRUN else "PKCS1v15-SHA1",
|
||||
"log_granular_levels": {
|
||||
"salt": "info",
|
||||
"salt.minion": "debug",
|
||||
"salt.transport": "debug",
|
||||
"salt.channel": "debug",
|
||||
"salt.utils.event": "debug",
|
||||
},
|
||||
}
|
||||
factory = salt_mm_master_1.salt_minion_daemon(
|
||||
"mm-minion-1",
|
||||
|
@ -136,6 +155,13 @@ def salt_mm_minion_2(salt_mm_master_1, salt_mm_master_2):
|
|||
"fips_mode": FIPS_TESTRUN,
|
||||
"encryption_algorithm": "OAEP-SHA224" if FIPS_TESTRUN else "OAEP-SHA1",
|
||||
"signing_algorithm": "PKCS1v15-SHA224" if FIPS_TESTRUN else "PKCS1v15-SHA1",
|
||||
"log_granular_levels": {
|
||||
"salt": "info",
|
||||
"salt.minion": "debug",
|
||||
"salt.transport": "debug",
|
||||
"salt.channel": "debug",
|
||||
"salt.utils.event": "debug",
|
||||
},
|
||||
}
|
||||
factory = salt_mm_master_2.salt_minion_daemon(
|
||||
"mm-minion-2",
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
import copy
|
||||
import logging
|
||||
import os
|
||||
import uuid
|
||||
|
||||
import pytest
|
||||
|
||||
|
@ -94,12 +95,15 @@ def test_minion_load_grains_default(minion_opts):
|
|||
],
|
||||
)
|
||||
def test_send_req_fires_completion_event(event, minion_opts):
|
||||
req_id = uuid.uuid4()
|
||||
event_enter = MagicMock()
|
||||
event_enter.send.side_effect = event[1]
|
||||
event = MagicMock()
|
||||
event.__enter__.return_value = event_enter
|
||||
|
||||
with patch("salt.utils.event.get_event", return_value=event):
|
||||
with patch("salt.utils.event.get_event", return_value=event), patch(
|
||||
"uuid.uuid4", return_value=req_id
|
||||
):
|
||||
minion_opts["random_startup_delay"] = 0
|
||||
minion_opts["return_retry_tries"] = 30
|
||||
minion_opts["grains"] = {}
|
||||
|
@ -123,7 +127,7 @@ def test_send_req_fires_completion_event(event, minion_opts):
|
|||
condition_event_tag = (
|
||||
len(call.args) > 1
|
||||
and call.args[1]
|
||||
== f"__master_req_channel_payload/{minion_opts['master']}"
|
||||
== f"__master_req_channel_payload/{req_id}/{minion_opts['master']}"
|
||||
)
|
||||
condition_event_tag_error = "{} != {}; Call(number={}): {}".format(
|
||||
idx, call, call.args[1], "__master_req_channel_payload"
|
||||
|
|
Loading…
Add table
Reference in a new issue