int main()

in hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/native/container-executor/impl/main.c [656:842]


int main(int argc, char **argv) {
  open_log_files();
  assert_valid_setup(argv[0]);

  int operation = -1;
  int exit_code = 0;
  exit_code = validate_arguments(argc, argv, &operation);

  if (exit_code != 0 || operation == -1) {
    // if operation is still -1, the work was done in validate_arguments
    // e.g. for --module-gpu
    goto cleanup;
  }

  switch (operation) {
  case CHECK_SETUP:
    //we already did this
    exit_code = 0;
    break;
  case MOUNT_CGROUPS:
    exit_code = 0;

    while (optind < argc && exit_code == 0) {
      exit_code = mount_cgroup(argv[optind++], cmd_input.cgroups_hierarchy);
    }

    break;
  case TRAFFIC_CONTROL_MODIFY_STATE:
    exit_code = traffic_control_modify_state(cmd_input.traffic_control_command_file);
    break;
  case TRAFFIC_CONTROL_READ_STATE:
    exit_code = traffic_control_read_state(cmd_input.traffic_control_command_file);
    break;
  case TRAFFIC_CONTROL_READ_STATS:
    exit_code = traffic_control_read_stats(cmd_input.traffic_control_command_file);
    break;
  case EXEC_CONTAINER:
    exit_code = exec_container(cmd_input.command_file);
    break;
  case RUN_DOCKER:
    exit_code = run_docker(cmd_input.command_file);
    break;
  case REMOVE_DOCKER_CONTAINER:
    exit_code = remove_docker_container(argv + optind, argc - optind);
    break;
  case INSPECT_DOCKER_CONTAINER:
    exit_code = exec_docker_command("inspect", argv + optind, argc - optind);
    break;
  case RUN_AS_USER_INITIALIZE_CONTAINER:
    exit_code = set_user(cmd_input.run_as_user_name);
    if (exit_code != 0) {
      break;
    }

    exit_code = initialize_app(cmd_input.yarn_user_name,
                            cmd_input.app_id,
                            cmd_input.container_id,
                            cmd_input.cred_file,
                            split(cmd_input.local_dirs),
                            split(cmd_input.log_dirs),
                            argv + optind);
    break;
  case RUN_AS_USER_LAUNCH_DOCKER_CONTAINER:
     if (cmd_input.traffic_control_command_file != NULL) {
        //apply tc rules before switching users and launching the container
        exit_code = traffic_control_modify_state(cmd_input.traffic_control_command_file);
        if( exit_code != 0) {
          //failed to apply tc rules - break out before launching the container
          break;
        }
      }

      exit_code = set_user(cmd_input.run_as_user_name);
      if (exit_code != 0) {
        break;
      }

      exit_code = launch_docker_container_as_user(cmd_input.yarn_user_name,
                      cmd_input.app_id,
                      cmd_input.container_id,
                      cmd_input.current_dir,
                      cmd_input.script_file,
                      cmd_input.cred_file,
                      cmd_input.https,
                      cmd_input.keystore_file,
                      cmd_input.truststore_file,
                      cmd_input.pid_file,
                      split(cmd_input.local_dirs),
                      split(cmd_input.log_dirs),
                      cmd_input.command_file);
      break;
  case RUN_AS_USER_LAUNCH_CONTAINER:
    if (cmd_input.traffic_control_command_file != NULL) {
      //apply tc rules before switching users and launching the container
      exit_code = traffic_control_modify_state(cmd_input.traffic_control_command_file);
      if( exit_code != 0) {
        //failed to apply tc rules - break out before launching the container
        break;
      }
    }

    exit_code = set_user(cmd_input.run_as_user_name);
    if (exit_code != 0) {
      break;
    }

    exit_code = launch_container_as_user(cmd_input.yarn_user_name,
                    cmd_input.app_id,
                    cmd_input.container_id,
                    cmd_input.current_dir,
                    cmd_input.script_file,
                    cmd_input.cred_file,
                    cmd_input.https,
                    cmd_input.keystore_file,
                    cmd_input.truststore_file,
                    cmd_input.pid_file,
                    split(cmd_input.local_dirs),
                    split(cmd_input.log_dirs),
                    cmd_input.resources_key,
                    cmd_input.resources_values);
    free(cmd_input.resources_key);
    free(cmd_input.resources_value);
    free(cmd_input.resources_values);
    break;
  case RUN_AS_USER_SIGNAL_CONTAINER:
    exit_code = set_user(cmd_input.run_as_user_name);
    if (exit_code != 0) {
      break;
    }

    exit_code = signal_container_as_user(cmd_input.yarn_user_name,
                                  cmd_input.container_pid,
                                  cmd_input.signal);
    break;
  case RUN_AS_USER_DELETE:
    exit_code = set_user(cmd_input.run_as_user_name);
    if (exit_code != 0) {
      break;
    }

    exit_code = delete_as_user(cmd_input.yarn_user_name,
                        cmd_input.target_dir,
                        argv + optind);
    break;
  case RUN_AS_USER_LIST:
    exit_code = set_user(cmd_input.run_as_user_name);

    if (exit_code != 0) {
      break;
    }

    exit_code = list_as_user(cmd_input.target_dir);
    break;
  case RUN_AS_USER_SYNC_YARN_SYSFS:
    exit_code = set_user(cmd_input.run_as_user_name);
    if (exit_code != 0) {
      break;
    }
    if (is_yarn_sysfs_support_enabled()) {
      exit_code = sync_yarn_sysfs(split(cmd_input.local_dirs),
          cmd_input.run_as_user_name, cmd_input.yarn_user_name,
          cmd_input.app_id);
    } else {
      exit_code = FEATURE_DISABLED;
    }
    break;
  case RUN_RUNC_CONTAINER:
    exit_code = run_runc_container(cmd_input.command_file);
    break;
  case REAP_RUNC_LAYER_MOUNTS:
    exit_code = reap_runc_layer_mounts(cmd_input.runc_layer_count);
    break;
  default:
    fprintf(ERRORFILE, "Unexpected operation code: %d\n", operation);
    exit_code = INVALID_COMMAND_PROVIDED;
    break;
  }

cleanup:
  if (exit_code) {
    fprintf(ERRORFILE, "Nonzero exit code=%d, error message='%s'\n", exit_code,
            get_error_message(exit_code));
  }

  flush_and_close_log_files();
  return exit_code;
}