def main(): # NOTE(mkwiek): no arguments should be supplied to solar-worker argparse.ArgumentParser().parse_args() log.info('Database in use: {}'.format(C.solar_db)) runner = loader.get_runner(C.runner) constructors = loader.get_constructors() clients = loader.get_clients() exts = loader.get_extensions(clients) runner.driver(constructors, exts, clients)
def run_all(construct_manager, extensions, clients): def _spawn(constructor, extensions, clients): return gevent.spawn(constructor.plugin, extensions, clients) try: log.info('Spawning scheduler, system log and tasks workers.') gevent.joinall(construct_manager.map(_spawn, extensions, clients)) except KeyboardInterrupt: log.info('Exit solar-worker') sys.exit()
def run_all(construct_manager, extensions, clients): def _spawn(constructor, extensions, clients): return gevent.spawn(constructor.plugin, extensions, clients) try: log.info('Spawning scheduler, system log and tasks workers.') gevent.joinall( construct_manager.map(_spawn, extensions, clients)) except KeyboardInterrupt: log.info('Exit solar-worker') sys.exit()
def _single(single, emitter, receiver, inps_emitter, inps_receiver): # this function is responsible for doing magic with transports_id and location_id # it tries to be safe and smart as possible # it connects only when 100% that it can and should # user can always use direct mappings, # we also use direct mappings in VR # when we will remove location_id and transports_id from inputs then this function, # will be deleted too if inps_emitter and inps_receiver: if not inps_emitter == inps_receiver: log.warning("Different %r defined %r => %r", single, emitter.name, receiver.name) return else: log.debug("The same %r defined for %r => %r, skipping", single, emitter.name, receiver.name) return emitter_single = emitter.db_obj.meta_inputs[single] receiver_single = receiver.db_obj.meta_inputs[single] emitter_single_reverse = emitter_single.get('reverse') receiver_single_reverse = receiver_single.get('reverse') if inps_receiver is None and inps_emitter is not None: # we don't connect automaticaly when receiver is None and emitter is not None # for cases when we connect existing transports to other data containers if receiver_single_reverse: log.info("Didn't connect automaticaly %s::%s -> %s::%s", receiver.name, single, emitter.name, single) return if emitter_single.get('is_emit') is False: # this case is when we connect resource to transport itself # like adding ssh_transport for solard_transport and we don't want then # transports_id to be messed # it forbids passing this value around log.debug("Disabled %r mapping for %r", single, emitter.name) return if receiver_single.get('is_own') is False: # this case is when we connect resource which has location_id but that is # from another resource log.debug("Not is_own %r for %r ", single, emitter.name) return # connect in other direction if emitter_single_reverse: if receiver_single_reverse: connect_single(receiver, single, emitter, single) _remove_from_mapping(single) return if receiver_single_reverse: connect_single(receiver, single, emitter, single) _remove_from_mapping(single) return if isinstance(orig_mapping, dict): orig_mapping[single] = single
def main(): import sys from gevent import spawn from gevent import joinall servers = [ spawn(construct_scheduler, C.tasks_address, C.scheduler_address), spawn(construct_system_log, C.system_log_address), spawn(construct_tasks, C.system_log_address, C.tasks_address, C.scheduler_address) ] try: log.info('Spawning scheduler, system log and tasks workers.') joinall(servers) except KeyboardInterrupt: log.info('Exit solar-worker') sys.exit()