def __init__(self, here, manager_loc, core_store, store_lock, current_id, id_lock, current_creator, creator_lock, port_range, f = None, args = None, kwds = None, ps = None): log.debug(self, 'starting') self.__here = here port = ids.port_from_loc(here) self.__shared_data = Shared(port, current_id, id_lock, core_store, store_lock, current_creator, creator_lock, port_range) self.__actor_store = LocalActorStore(self.__here, self.__shared_data) self.__messenger = Messenger(here, self.__actor_store) self.__migrator = Migrator(here, self.__actor_store, self.__shared_data) self.__manager_loc = manager_loc self.__port_range = port_range self.__term = None self.__processes = ps if (port == port_range[0]): self.__term = Terminal(self, here) self.valve = rpc.RPCValve(port, self.external_interface(), log) set_local_theatre(self.internal_interface()) self.valve.listen() print('Theatre created on port ' + str(port)) vis.add_host(here) if (port != port_range[0]): while True: try: time.sleep(5) except: pass else: self.f = f self.f(*args, **kwds) self.__term.shell()
def incoming_actor(self, actorstate): # Create actor but don't start # TODO: FIX- generation of id, handle local and non-local migrations. log.debug(self, 'receieved migrating actor %s' % actorstate) actor = Actor(local_theatre()) actor.state = actorstate old_actor_id = actor.state.actor_id type = actor.state.actortype if ids.ip(old_actor_id) == ids.ip_from_loc(self.here): # Migration has been local actor_id = ids.change_port(old_actor_id, ids.port_from_loc(self.here)) else: actor_id = ids.change_host(old_actor_id, self.here, self.shared_data.next_id_num()) actor.state.actor_id = actor_id self.__local_actor_store.add_network_actor(actor, actor_id) actor.start() # At the moment even core migrations trigger re-registrations # Could probably forgo these if core migrations are frequent. local_theatre().globally_reregister_network_actor(actor_id, type, old_actor_id) names = actor.state.names for name in names: local_theatre().name(name, actor_id)
def add_host(self, ip): port = str(ids.port_from_loc(ip)) self.hosts[port] = VisHost(port)
def store_type(self, actor, manager): port = str(ids.port_from_loc(manager)) self.managers[port].store_type(actor)
def store_name(self, name, actor, manager): port = str(ids.port_from_loc(manager)) self.managers[port].store_name(name, actor)
def add_manager(self, ip): port = str(ids.port_from_loc(ip)) self.managers[port] = VisManager(port)