Beispiel #1
0
 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
Beispiel #2
0
 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
Beispiel #3
0
    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
Beispiel #4
0
 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)
Beispiel #5
0
 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
Beispiel #6
0
    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)
Beispiel #7
0
    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)
Beispiel #8
0
 def _determine_factory(self, state):
     state.factory = agent.registry_lookup(state.descriptor.document_type)
Beispiel #9
0
 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
Beispiel #10
0
 def _get_factory(self, state):
     return agent.registry_lookup(state.descriptor.document_type)