Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions libensemble/manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -418,6 +418,9 @@ def _set_resources(self, Work: dict, w: int) -> None:
If rsets are not assigned, then assign using default mapping
"""
resource_manager = self.resources.resource_manager # type: ignore
if resource_manager is None:
return

rset_req = Work["libE_info"].get("rset_team")

if rset_req is None:
Expand Down
36 changes: 36 additions & 0 deletions libensemble/tests/unit_tests/test_manager_main.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,21 @@

import libensemble.manager as man
import libensemble.tests.unit_tests.setup as setup
from libensemble.message_numbers import PERSIS_STOP

libE_specs = {"comms": "local", "gen_on_worker": True}


class FakeComm:
"""Records sent messages instead of transmitting them to a real worker."""

def __init__(self):
self.sent = []

def send(self, tag, obj):
self.sent.append((tag, obj))


def test_term_test_1():
# termination_test should be True when we want to stop

Expand Down Expand Up @@ -52,7 +63,32 @@ def test_term_test_3():
assert mgr.term_test()


def test_send_work_order_persis_stop_empty_rows():
# Regression test: a PERSIS_STOP work order with zero H_rows (e.g. final_gen_send
# with nothing left to forward to a persistent gen) must still send the meta-message.
# Otherwise, a persistent worker blocked in PersistentSupport.recv() waiting on this
# message hangs forever, since nothing would ever be sent to it.
hist, sim_specs, gen_specs, exit_criteria, al = setup.hist_setup2()
final_libE_specs = dict(libE_specs, final_gen_send=True)
fake_wcomm = FakeComm()
mgr = man.Manager(hist, final_libE_specs, al, sim_specs, gen_specs, exit_criteria, wcomms=[fake_wcomm])

work = {
"H_fields": ["x"],
"persis_info": {},
"tag": PERSIS_STOP,
"libE_info": {"persistent": True, "H_rows": np.array([], dtype=int)},
}
mgr._send_work_order(work, 1)

assert len(fake_wcomm.sent) == 1, "Expected the PERSIS_STOP meta-message to be sent even with zero H_rows"
tag, sent_work = fake_wcomm.sent[0]
assert tag == PERSIS_STOP
assert len(sent_work["libE_info"]["H_rows"]) == 0


if __name__ == "__main__":
test_term_test_1()
test_term_test_2()
test_term_test_3()
test_send_work_order_persis_stop_empty_rows()
Loading