size = int(handle.attr_get("size")) log.info("unloading resource modules across %d ranks", size) resource_unload_all() log.info("reloading resource module on rank 0") resource_load(0) log.info("initiating RPC to wait for %d ranks", size) future = RPC(handle, "resource.monitor-waitup", {"up": size}) # Ensure waitup initially blocks delay = 0.5 log.info("waiting up to %.2fs for RPC (should block)", delay) try: future.wait_for(delay) except OSError as err: if err.errno == errno.ETIMEDOUT: pass else: raise err if future.is_ready(): log.error("resource.get-xml returned before expected") sys.exit(1) log.info("loading resource module on %d remaining ranks", size - 1) for rank in range(1, size): resource_load(rank) # Ensure waitup can now complete