def start(blox_dir, configuration_file_name, log_dir): global using_engage try: sys.path.index(blox_dir) except ValueError: sys.path.append(blox_dir) config = read_configuration(configuration_file_name) block_version = config["version"] if config.has_key("version") \ else naming.DEFAULT_VERSION block_class = \ naming.get_block_class(config["name"], block_version) print "[load_block] Preparing to start block %s" % config["name"] sys.stdout.flush() inst = block_class(config["master_port"]) inst.id = config["id"] inst.log_level = config["log_level"] # intialize logging inst.initialize_logging(log_directory=log_dir) inst.log(logging.DEBUG, config) try: #setup policies if config.has_key("policy"): setup_policy(inst, config["policy"]) inst.on_load(config["args"]) if is_shard(config["name"]): num_blocks = config["num_blocks"] inst.num_nodes = num_blocks for i in range(num_blocks): output_port = "output"+str(i) inst.add_port(output_port, Port.PUSH, Port.UNNAMED, []) for (port_name, port_config) in config["ports"].items(): port_type, port_nums = port_config[0], port_config[1:] #TODO: loop does extra work, rewrite this for port_num in port_nums: if port_type == "output": inst.add_output_connection(port_name, port_num) elif port_type == "input": inst.add_input_connection(port_name, port_num) else: print "Unknown port type " + port_type raise NameError #for dynamic join if config.has_key("subscribers"): inst.set_subscribers(config["subscribers"]) inst.start() except Exception, e: inst.logger.exception("Uncaught exception in block %s: %s" % (config["name"], e)) raise
def get_block_class(block_name, version=naming.DEFAULT_VERSION): return naming.get_block_class(block_name, version)