def override_config(self, agent_type, config): if self.overriden_configs is None: self.overriden_configs = dict() self.addCleanup(self.revert_overrides) factory = registry_lookup(agent_type) self.overriden_configs[agent_type] = factory.configuration_doc_id factory.configuration_doc_id = config.doc_id
def check_requirements(self, state, doc): agnt = agent.registry_lookup(doc.document_type) ret = check_categories(self, agnt.categories) if not ret: msg = "Categoryies doesn't match" self.error(msg) raise CategoryError(msg) return doc
def start_agent(self, descriptor, **kwargs): factory = IAgentFactory(registry_lookup(descriptor.document_type)) self.log('I will start: %r agent. Kwargs: %r', factory, kwargs) medium = self.agency_agent_factory(self, factory, descriptor) self.register_agent(medium) d = self.wait_connected() d.addCallback(defer.drop_param, medium.initiate, **kwargs) return d
def actually_start_agent(self, descriptor, **kwargs): """ This method will be run only on the master agency. """ factory = IAgentFactory( registry_lookup(descriptor.document_type)) if factory.standalone: return self.start_standalone_agent(descriptor, factory, **kwargs) else: return self.start_agent_locally(descriptor, **kwargs)
def initiate(self, state, desc, **kwargs): state.descriptor = desc state.keywords = kwargs state.factory = agent.registry_lookup(state.descriptor.document_type) # we are setting shard=None here first, because of the logic in # Host Agent which prevents it from changing the shard field if it # has been set to sth meaningfull (not in [None, 'lobby']) f = state.descriptor.set_shard(state.agent, None) f.add_callback(self._store_descriptor) f.add_callback(fiber.drop_param, self._retry) return f
def announced(self, state, announce): state.descriptor = announce.payload['descriptor'] state.factory = agent.registry_lookup(state.descriptor.document_type) state.keep_allocated = False if state.agent.is_migrating(): self._refuse() return if not check_categories(state.agent, state.factory.categories): self._refuse() return resc = state.descriptor.extract_resources() agent_id = state.descriptor.doc_id partner = agent_id and state.agent.find_partner(agent_id) if partner and partner.allocation_id: cost = 0 delta = state.agent.get_allocation_delta( partner.allocation_id, **resc) if delta: alloc = state.agent.premodify_allocation( partner.allocation_id, **delta) else: alloc = state.agent.get_allocation(partner.allocation_id) state.keep_allocated = True else: cost = 10 alloc = state.agent.preallocate_resource(**resc) if alloc is None: self._refuse() return state.alloc_id = alloc.id bid = message.Bid() bid.payload = dict(cost=cost) state.medium.bid(bid)
def announced(self, state, announce): state.descriptor = announce.payload['descriptor'] state.factory = agent.registry_lookup(state.descriptor.document_type) if state.agent.is_migrating(): self._refuse() return if not check_categories(state.agent, state.factory.categories): self._refuse() return resc = state.descriptor.extract_resources() alloc = state.agent.preallocate_resource(**resc) if alloc is None: self._refuse() return state.alloc_id = alloc.id bid = message.Bid() state.medium.bid(bid)
def _determine_factory(self, state): state.factory = agent.registry_lookup(state.descriptor.document_type)
def revert_overrides(self): if self.overriden_configs is None: return for key, value in self.overriden_configs.iteritems(): factory = registry_lookup(key) factory.configuration_doc_id = value
def _get_factory(self, state): return agent.registry_lookup(state.descriptor.document_type)