|
|
|
|
@ -69,6 +69,10 @@ def check_profiles(scenario):
|
|
|
|
|
if not scenario.args.tcp_only: |
|
|
|
|
contacts = set(profile(agents[owner.name].rpc("stats"), "udp")["contacts"]) |
|
|
|
|
helper = next((node for node in public if node.name not in {owner.name, observer.name} and node.ip not in contacts), None) |
|
|
|
|
initial = profile(agents[owner.name].rpc("stats"), "udp") |
|
|
|
|
if not helper and initial["source"] == "ETCP" and initial["mapping"] != "UNKNOWN": |
|
|
|
|
# Автоматическая детекция могла уже завершиться, пока узел помогал предыдущему owner. |
|
|
|
|
helper = next(node for node in public if node.name not in {owner.name, observer.name}) |
|
|
|
|
if not helper: |
|
|
|
|
raise RuntimeError(f"{owner.name}: no independent helper remains before cold measurement; contacts={contacts}") |
|
|
|
|
connect(observer, helper) |
|
|
|
|
|