def synch_topologies(self) -> None: """ Sync the topologies with the statemgrs. """ self.state_managers = statemanagerfactory.get_all_state_managers(self.config.statemgr_config) try: for state_manager in self.state_managers: state_manager.start() except Exception as e: Log.critical(f"Found exception while initializing state managers: {e}", exc_info=True) sys.exit(1) def on_topologies_watch(state_manager, topologies) -> None: """watch topologies""" Log.info("State watch triggered for topologies.") Log.debug("Topologies: " + str(topologies)) cached_names = [t.name for t in self.get_stmgr_topologies(state_manager.name)] Log.debug(f"Existing topologies: {cached_names}") for name in cached_names: if name not in topologies: Log.info("Removing topology: %s in rootpath: %s", name, state_manager.rootpath) self.remove_topology(name, state_manager.name) for name in topologies: if name not in cached_names: self.add_new_topology(state_manager, name) for state_manager in self.state_managers: # The callback function with the bound # state_manager as first variable. onTopologiesWatch = partial(on_topologies_watch, state_manager) state_manager.get_topologies(onTopologiesWatch)
def synch_topologies(self): """ Sync the topologies with the statemgrs. """ self.state_managers = statemanagerfactory.get_all_state_managers(self.config.statemgr_config) # pylint: disable=deprecated-lambda def on_topologies_watch(state_manager, topologies): """watch topologies""" LOG.info("State watch triggered for topologies.") LOG.debug("Topologies: " + str(topologies)) existingTopologies = self.getTopologiesForStateLocation(state_manager.name) existingTopNames = map(lambda t: t.name, existingTopologies) LOG.debug("Existing topologies: " + str(existingTopNames)) for name in existingTopNames: if name not in topologies: LOG.info("Removing topology: %s in rootpath: %s", name, state_manager.rootpath) self.removeTopology(name, state_manager.name) for name in topologies: if name not in existingTopNames: self.addNewTopology(state_manager, name) for state_manager in self.state_managers: # The callback function with the bound # state_manager as first variable. onTopologiesWatch = partial(on_topologies_watch, state_manager) state_manager.get_topologies(onTopologiesWatch)
def synch_topologies(self): """ Sync the topologies with the statemgrs. """ self.state_managers = statemanagerfactory.get_all_state_managers( self.config.statemgr_config) # pylint: disable=deprecated-lambda def on_topologies_watch(state_manager, topologies): """watch topologies""" Log.info("State watch triggered for topologies.") Log.debug("Topologies: " + str(topologies)) existingTopologies = self.getTopologiesForStateLocation( state_manager.name) existingTopNames = map(lambda t: t.name, existingTopologies) Log.debug("Existing topologies: " + str(existingTopNames)) for name in existingTopNames: if name not in topologies: Log.info("Removing topology: %s in rootpath: %s", name, state_manager.rootpath) self.removeTopology(name, state_manager.name) for name in topologies: if name not in existingTopNames: self.addNewTopology(state_manager, name) for state_manager in self.state_managers: # The callback function with the bound # state_manager as first variable. onTopologiesWatch = partial(on_topologies_watch, state_manager) state_manager.get_topologies(onTopologiesWatch)
def start_state_manager_watches(self): """ Receive updates to the packing plan from the statemgrs and update processes as needed. """ statemgr_config = StateMgrConfig() statemgr_config.set_state_locations(configloader.load_state_manager_locations(self.cluster)) self.state_managers = statemanagerfactory.get_all_state_managers(statemgr_config) # pylint: disable=unused-argument def on_packing_plan_watch(state_manager, new_packing_plan): Log.debug("State watch triggered for PackingPlan update on shard %s. Existing: %s, New: %s" % (self.shard, str(self.packing_plan), str(new_packing_plan))) if self.packing_plan != new_packing_plan: Log.info("PackingPlan change detected on shard %s, relaunching effected processes." % self.shard) self.update_packing_plan(new_packing_plan) Log.info("Updating executor processes") self.launch() else: Log.info( "State watch triggered for PackingPlan update but plan not changed so not relaunching.") for state_manager in self.state_managers: # The callback function with the bound # state_manager as first variable. onPackingPlanWatch = partial(on_packing_plan_watch, state_manager) state_manager.get_packing_plan(self.topology_name, onPackingPlanWatch) Log.info("Registered state watch for packing plan changes with state manager %s." % str(state_manager))
def start_state_manager_watches(self): """ Receive updates to the packing plan from the statemgrs and update processes as needed. """ Log.info("Start state manager watches") with open(self.override_config_file, 'r') as stream: overrides = yaml.load(stream) if overrides is None: overrides = {} overrides["heron.statemgr.connection.string"] = self.state_manager_connection statemgr_config = StateMgrConfig() statemgr_config.set_state_locations(configloader.load_state_manager_locations( self.cluster, state_manager_config_file=self.state_manager_config_file, **overrides)) try: self.state_managers = statemanagerfactory.get_all_state_managers(statemgr_config) for state_manager in self.state_managers: state_manager.start() except Exception as ex: Log.error("Found exception while initializing state managers: %s. Bailing out..." % ex) traceback.print_exc() sys.exit(1) # pylint: disable=unused-argument def on_packing_plan_watch(state_manager, new_packing_plan): Log.debug("State watch triggered for PackingPlan update on shard %s. Existing: %s, New: %s" % (self.shard, str(self.packing_plan), str(new_packing_plan))) if self.packing_plan != new_packing_plan: Log.info("PackingPlan change detected on shard %s, relaunching effected processes." % self.shard) self.update_packing_plan(new_packing_plan) Log.info("Updating executor processes") self.launch() else: Log.info( "State watch triggered for PackingPlan update but plan not changed so not relaunching.") for state_manager in self.state_managers: # The callback function with the bound # state_manager as first variable. onPackingPlanWatch = functools.partial(on_packing_plan_watch, state_manager) state_manager.get_packing_plan(self.topology_name, onPackingPlanWatch) Log.info("Registered state watch for packing plan changes with state manager %s." % str(state_manager))
def start_state_manager_watches(self): """ Receive updates to the packing plan from the statemgrs and update processes as needed. """ statemgr_config = StateMgrConfig() statemgr_config.set_state_locations(configloader.load_state_manager_locations( self.cluster, state_manager_config_file=self.state_manager_config_file, overrides={"heron.statemgr.connection.string": self.state_manager_connection})) try: self.state_managers = statemanagerfactory.get_all_state_managers(statemgr_config) for state_manager in self.state_managers: state_manager.start() except Exception as ex: Log.error("Found exception while initializing state managers: %s. Bailing out..." % ex) traceback.print_exc() sys.exit(1) # pylint: disable=unused-argument def on_packing_plan_watch(state_manager, new_packing_plan): Log.debug("State watch triggered for PackingPlan update on shard %s. Existing: %s, New: %s" % (self.shard, str(self.packing_plan), str(new_packing_plan))) if self.packing_plan != new_packing_plan: Log.info("PackingPlan change detected on shard %s, relaunching effected processes." % self.shard) self.update_packing_plan(new_packing_plan) Log.info("Updating executor processes") self.launch() else: Log.info( "State watch triggered for PackingPlan update but plan not changed so not relaunching.") for state_manager in self.state_managers: # The callback function with the bound # state_manager as first variable. onPackingPlanWatch = functools.partial(on_packing_plan_watch, state_manager) state_manager.get_packing_plan(self.topology_name, onPackingPlanWatch) Log.info("Registered state watch for packing plan changes with state manager %s." % str(state_manager))
def synch_topologies(self): """ Sync the topologies with the statemgrs. """ self.state_managers = statemanagerfactory.get_all_state_managers( self.config.statemgr_config) try: for state_manager in self.state_managers: state_manager.start() except Exception as ex: Log.error( "Found exception while initializing state managers: %s. Bailing out..." % ex) traceback.print_exc() sys.exit(1) # pylint: disable=deprecated-lambda def on_topologies_watch(state_manager, topologies): """watch topologies""" Log.info("State watch triggered for topologies.") Log.debug("Topologies: " + str(topologies)) existingTopologies = self.getTopologiesForStateLocation( state_manager.name) existingTopNames = [t.name for t in existingTopologies] Log.debug("Existing topologies: " + str(existingTopNames)) for name in existingTopNames: if name not in topologies: Log.info("Removing topology: %s in rootpath: %s", name, state_manager.rootpath) self.removeTopology(name, state_manager.name) for name in topologies: if name not in existingTopNames: self.addNewTopology(state_manager, name) for state_manager in self.state_managers: # The callback function with the bound # state_manager as first variable. onTopologiesWatch = partial(on_topologies_watch, state_manager) state_manager.get_topologies(onTopologiesWatch)
def synch_topologies(self): """ Sync the topologies with the statemgrs. """ self.state_managers = statemanagerfactory.get_all_state_managers(self.config.statemgr_config) try: for state_manager in self.state_managers: state_manager.start() except Exception as ex: Log.error("Found exception while initializing state managers: %s. Bailing out..." % ex) traceback.print_exc() sys.exit(1) # pylint: disable=deprecated-lambda def on_topologies_watch(state_manager, topologies): """watch topologies""" Log.info("State watch triggered for topologies.") Log.debug("Topologies: " + str(topologies)) existingTopologies = self.getTopologiesForStateLocation(state_manager.name) existingTopNames = map(lambda t: t.name, existingTopologies) Log.debug("Existing topologies: " + str(existingTopNames)) for name in existingTopNames: if name not in topologies: Log.info("Removing topology: %s in rootpath: %s", name, state_manager.rootpath) self.removeTopology(name, state_manager.name) for name in topologies: if name not in existingTopNames: self.addNewTopology(state_manager, name) for state_manager in self.state_managers: # The callback function with the bound # state_manager as first variable. onTopologiesWatch = partial(on_topologies_watch, state_manager) state_manager.get_topologies(onTopologiesWatch)