Beispiel #1
0
    def store_complete_requirements(self, actor_id):
        actor = self.node.am.actors[actor_id]
        if actor.is_shadow():
            # Find requires
            def _desc_cb(signature, description):
                _log.debug("REQUIRES BACK %s" % description)
                requires = None
                for actor_desc in description:
                    # We get list of possible descriptions back matching the signature
                    # In reality it is only one
                    if 'requires' in actor_desc:
                        requires = actor_desc['requires']
                if requires is not None:
                    actor.requires = requires
                    self.node.storage.add_actor_requirements(actor)
                self._requires_counter += 1
                if self._requires_counter >= len(self.deployable['actors']):
                    self._wait_for_all_connections_and_requires()

            try:
                GlobalStore(node=self.node).global_signature_lookup(
                    actor._signature, cb=_desc_cb)
            except:
                _log.exception("actor instanciate GlobalStore exception")
                self._requires_counter += 1
        else:
            self._requires_counter += 1
            self.node.storage.add_actor_requirements(actor)
Beispiel #2
0
 def add_node(self, node, cb=None):
     """
     Add node to storage
     """
     self.set(prefix="node-", key=node.id,
               value={"uri": node.external_uri,
                      "control_uri": node.external_control_uri,
                      "authz_server": node.authorization.authz_server_id,
                      "attributes": {'public': node.attributes.get_public(),
                                     'indexed_public': node.attributes.get_indexed_public(as_list=False)}}, cb=cb)
     self._add_node_index(node)
     # Store all actors on this node in storage
     GlobalStore(node=node, security=Security(node) if security_enabled() else None, verify=False).export()
Beispiel #3
0
 def __init__(self, node, request):
     self.attributes = {
         "subject": {
             "actor_signer": self._get_actor_signer
         },
         "action": {
             "requires": self._get_requires
         },
         "environment": {
             "current_date": self._get_current_date,
             "current_time": self._get_current_time
         }
     }
     self.node = node
     self.request = request
     self.actorstore = GlobalStore(node=node)
     self.actor_desc = None
Beispiel #4
0
 def resolve_remote(self, actor_name, info, cb=None):
     # FIXME: no list needed since it is only done for one actor
     all_desc_iters = dynops.List()
     store = GlobalStore(node=self.node)
     desc_iter = store.global_lookup_iter(info['signature'],
                                          info['args'].keys())
     all_desc_iters.append((actor_name, desc_iter), trigger_iter=desc_iter)
     all_desc_iters.final()
     collect_desc_iter = dynops.Collect(all_desc_iters).set_name(
         "collected_desc")
     select_iter = dynops.Map(
         self.select_actor,
         collect_desc_iter,
         done=False,
         priority={k: []
                   for k in self.deployable['actors'].keys()},
         eager=True).set_name("select_actor")
     select_iter.set_cb(self.deploy_unhandled_actor, select_iter, cb)
     self.deploy_unhandled_actor(select_iter, cb)