def __init__(self, address): self.address = address self.messages = _collections.deque() self.consumers = list() _plano.notice("Creating {}", self)
def add_consumer(self, link): assert link.is_sender assert link not in self.consumers _plano.notice("Adding consumer for '{}' to {}", link.connection.remote_container, self) self.consumers.append(link)
def on_start(self, event): domain = "{}:{}".format(self.broker.host, self.broker.port) event.container.listen(domain) _plano.notice("Listening on '{}'", domain) if self.broker.ready_file != "-": _plano.write(self.broker.ready_file, "ready\n")
def remove_consumer(self, link): assert link.is_sender _plano.notice("Removing consumer for '{}' from {}", link.connection.remote_container, self) try: self.consumers.remove(link) except ValueError: pass
def run(self): args = self.prelude + [ self.impl_file, self.connection_mode, self.channel_mode, self.operation, self.id_, self.host, self.port, self.path, str(self.messages), str(self.body_size), str(self.credit_window), ] assert None not in args, args with open(self.transfers_file, "wb") as fout: _plano.notice("Calling '{}'", " ".join(args)) proc = _plano.start_process(args, stdout=fout) try: self.monitor_subprocess(proc) except: _plano.stop_process(proc) raise if proc.returncode != 0: raise CommandError("{} exited with code {}", self.role, proc.returncode) if _os.path.getsize(self.transfers_file) == 0: raise CommandError("No transfers") self.compute_results() self.save_summary() _plano.call("xz --compress -0 --threads 0 {}", self.transfers_file)
def init_impl_attributes(self): sender_impls = set(ARROW_IMPLS) receiver_impls = set(ARROW_IMPLS) server_impls = set(SERVER_IMPLS) if self.args.include_senders != "all": sender_impls = self.parse_impls(self.args.include_senders) if self.args.include_receivers != "all": receiver_impls = self.parse_impls(self.args.include_receivers) if self.args.include_servers != "all": server_impls = self.parse_impls(self.args.include_servers) if self.args.exclude_senders != "none": sender_impls -= self.parse_impls(self.args.exclude_senders) if self.args.exclude_receivers != "none": receiver_impls -= self.parse_impls(self.args.exclude_receivers) if self.args.exclude_servers != "none": server_impls -= self.parse_impls(self.args.exclude_servers) for name in list(sender_impls): if not impl_available(name): _plano.notice("Sender '{}' is unavailable", name) sender_impls.remove(name) for name in list(receiver_impls): if not impl_available(name): _plano.notice("Receiver '{}' is unavailable", name) receiver_impls.remove(name) for name in list(server_impls): if not impl_available(name): _plano.notice("Server '{}' is unavailable", name) server_impls.remove(name) self.sender_impls = sorted(sender_impls) self.receiver_impls = sorted(receiver_impls) self.server_impls = sorted(server_impls)
def init_impl_attributes(self): sender_impls = set(ARROW_IMPLS) receiver_impls = set(ARROW_IMPLS) server_impls = set(SERVER_IMPLS) if self.args.include_senders != "all": sender_impls = self.parse_impls(self.args.include_senders) if self.args.include_receivers != "all": receiver_impls = self.parse_impls(self.args.include_receivers) if self.args.include_servers != "all": server_impls = self.parse_impls(self.args.include_servers) if self.args.exclude_senders != "none": sender_impls -= self.parse_impls(self.args.exclude_senders) if self.args.exclude_receivers != "none": receiver_impls -= self.parse_impls(self.args.exclude_receivers) if self.args.exclude_servers != "none": server_impls -= self.parse_impls(self.args.exclude_servers) for name in list(sender_impls): if not impl_available(name): _plano.notice("Sender '{}' is unavailable", name) sender_impls.remove(name) for name in list(receiver_impls): if not impl_available(name): _plano.notice("Receiver '{}' is unavailable", name) receiver_impls.remove(name) for name in list(server_impls): if not impl_available(name): _plano.notice("Server '{}' is unavailable", name) server_impls.remove(name) self.sender_impls = sorted(sender_impls) self.receiver_impls = sorted(receiver_impls) self.server_impls = sorted(server_impls)
def notice(self, message, *args): _plano.notice(message, *args)
def notice(self, message, *args): _plano.notice(message, *args)
def on_disconnected(self, event): _plano.notice("Disconnected from {}", event.connection.remote_container) self.remove_consumers(event.connection)
def on_connection_closing(self, event): _plano.notice("Closing connection from '{}'", event.connection.remote_container) self.remove_consumers(event.connection)
def on_connection_opening(self, event): _plano.notice("Opening connection from '{}'", event.connection.remote_container) # XXX I think this should happen automatically event.connection.container = event.container.container_id