示例#1
0
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
示例#2
0
def get_block_class(block_name, version=naming.DEFAULT_VERSION):
  return naming.get_block_class(block_name, version)