def _handle_lost_application_actor(self, key, value, lost_node_id, lost_actor_id, lost_actor_info, start_time, cb): """ Get required reliability from app info """ _log.debug("Handling lost application actor {} of app {}".format(lost_actor_id, key)) self.storage.delete_replica_node(key, lost_node_id, lost_actor_info['name']) if not value: _log.error("Failed to get application info from storage for applicaiton {}".format(key)) cb(status=response.CalvinResponse(False)) replicator = Replicator(self.node, lost_actor_id, lost_actor_info, value['required_reliability'], lost_node=lost_node_id) replicator.replicate_lost_actor(cb, start_time)
def _check_actor_reliability(self, key, value, actors, app_info, names, index, start_time): _log.debug("Check reliability for actor: {}".format(key)) if not value: _log.warning("Failed to get actor info from storage: {}".format(key)) return self._check_actors_reliability(actors=actors, app_info=app_info, names=names, index=index + 1, start_time=start_time) name = calvinuuid.remove_uuid(value['name']) if value["replicate"] and name not in names: try: replicator = Replicator(self.node, key, value, app_info['required_reliability'], do_delete=False) except Exception as e: _log.warning("Failed to create replicator: {}".format(e)) return names.append(name) cb = CalvinCB(self._check_actors_reliability, actors=actors, app_info=app_info, names=names, index=index + 1, start_time=start_time) replicator.replicate_lost_actor(cb=cb, start_time=start_time) else: if name in names: _log.debug("Already checked reliability of actor: {}".format(name)) self._check_actors_reliability(actors=actors, app_info=app_info, names=names, index=index + 1, start_time=start_time)
def lost_actor(self, lost_actor_id, lost_actor_info, required_reliability, cb): _log.analyze(self.id, "+", "Lost actor {}".format(lost_actor_id)) self.am.delete_actor(lost_actor_id) replicator = Replicator(self, lost_actor_id, lost_actor_info, required_reliability) replicator.replicate_lost_actor(cb, time.time())