Example #1
0
def startSlaveNode(cFile, cDict):
  """
  startSlaveNode(cFile: string, cDict (string?string list) dict[string]) -> None
    startSlaveNode spins up an RMI server on the local machine, puts a fsShell
    and pinger inside of it and connects it to the master server.
  """
  ip, port = get(cFile, cDict, "ADDRESS", 2, addressMapper)
  masterIp, masterPort = get(cFile, cDict, "MASTER_ADDRESS", 2, addressMapper)
  dfsRoot = get(cFile, cDict, "DFS_ROOT", 1)
  tmpRoot = get(cFile, cDict, "TMP_ROOT", 1)
  nodeID = get(cFile, cDict, "NODE_ID", 1)

  if not os.path.exists(dfsRoot) or not os.path.isdir(dfsRoot):
    configKeyError(cFile, "DFS_ROOT", dfsRoot)
  if not os.path.exists(tmpRoot) or not os.path.isdir(tmpRoot):
    configKeyError(cFile, "TMP_ROOT", tmpRoot)

  deleteWithPermission(dfsRoot)
  deleteWithPermission(tmpRoot)

  localRmi = rmiUI.RMIServer(ip, port)
  remoteRmi = rmiUI.getServer(masterIp, masterPort)

  fsShell = distributedFile.FileSystemShell(dfsRoot, tmpRoot, nodeID)
  pinger = link.Pinger()
  transferer = transfer.Transferer(fsShell)
  mapHandler = mapReduce.MapReduceHandler(fsShell)

  localRmi.register(fsShell, "fsShell")
  localRmi.register(pinger, "pinger")
  localRmi.register(transferer, "transferer")
  localRmi.register(mapHandler, "mapHandler")

  def addSelfToManager():
    try:
      managerID = remoteRmi.IDFromName("dfsManager")
      dfsManager = remoteRmi.get(managerID)
      dfsManager.addRmiServer(ip, port, nodeID)
    except:
      localRmi.close()
      raise
  worker = threading.Thread(target=addSelfToManager, args=())

  # This is _not_ a race condition. You have tried to "fix" this four times
  # already. Give it a break.
  worker.start()

  print "Node started successfully."
  localRmi.monitor()
Example #2
0
  while RUNNING:
    tokens = getUserInput().split(" ")
    command, args = tokens[0], tokens[1:]
    if command not in COMMAND_MAP:
      print "Command '%s' not recognized." % command
    else:
      try:
        COMMAND_MAP[command](dfsManager, configDict, args)
      except BaseException as exn:
        traceback.print_exc()


if __name__ == "__main__":
  if len(sys.argv) != 2:
    printBasicHelp()
    sys.exit(1)
  elif len(sys.argv) in ("--help", "-help"):
    printVerboseHelp()
    sys.exit(0)

  configFile = sys.argv[1]
  configDict = configUtils.parse(configFile)

  masterIP, masterPort = configDict["ADDRESS"]
  masterRMI = rmiUI.getServer(masterIP, int(masterPort))
  dfsManagerID = masterRMI.IDFromName("dfsManager")
  dfsManager = masterRMI.get(dfsManagerID)

  mainLoop(dfsManager, configDict)