YARN-1274. Fixed NodeManager's LinuxContainerExecutor to create user, app-dir and log-dirs correctly even when there are no resources to localize for the container. Contributed by Siddharth Seth.
git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/trunk@1529555 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
5e2d93b4d3
commit
52b0ce3565
|
@ -184,6 +184,10 @@ Release 2.1.2 - UNRELEASED
|
||||||
YARN-1090. Fixed CS UI to better reflect applications as non-schedulable
|
YARN-1090. Fixed CS UI to better reflect applications as non-schedulable
|
||||||
and not as pending. (Jian He via acmurthy)
|
and not as pending. (Jian He via acmurthy)
|
||||||
|
|
||||||
|
YARN-1274. Fixed NodeManager's LinuxContainerExecutor to create user, app-dir
|
||||||
|
and log-dirs correctly even when there are no resources to localize for the
|
||||||
|
container. (Siddharth Seth via vinodkv)
|
||||||
|
|
||||||
Release 2.1.1-beta - 2013-09-23
|
Release 2.1.1-beta - 2013-09-23
|
||||||
|
|
||||||
INCOMPATIBLE CHANGES
|
INCOMPATIBLE CHANGES
|
||||||
|
|
|
@ -751,28 +751,11 @@ int initialize_user(const char *user, char* const* local_dirs) {
|
||||||
return failed ? INITIALIZE_USER_FAILED : 0;
|
return failed ? INITIALIZE_USER_FAILED : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
int create_log_dirs(const char *app_id, char * const * log_dirs) {
|
||||||
* Function to prepare the application directories for the container.
|
|
||||||
*/
|
|
||||||
int initialize_app(const char *user, const char *app_id,
|
|
||||||
const char* nmPrivate_credentials_file,
|
|
||||||
char* const* local_dirs, char* const* log_roots,
|
|
||||||
char* const* args) {
|
|
||||||
if (app_id == NULL || user == NULL || user_detail == NULL || user_detail->pw_name == NULL) {
|
|
||||||
fprintf(LOGFILE, "Either app_id is null or the user passed is null.\n");
|
|
||||||
return INVALID_ARGUMENT_NUMBER;
|
|
||||||
}
|
|
||||||
|
|
||||||
// create the user directory on all disks
|
|
||||||
int result = initialize_user(user, local_dirs);
|
|
||||||
if (result != 0) {
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
////////////// create the log directories for the app on all disks
|
|
||||||
char* const* log_root;
|
char* const* log_root;
|
||||||
char *any_one_app_log_dir = NULL;
|
char *any_one_app_log_dir = NULL;
|
||||||
for(log_root=log_roots; *log_root != NULL; ++log_root) {
|
for(log_root=log_dirs; *log_root != NULL; ++log_root) {
|
||||||
char *app_log_dir = get_app_log_directory(*log_root, app_id);
|
char *app_log_dir = get_app_log_directory(*log_root, app_id);
|
||||||
if (app_log_dir == NULL) {
|
if (app_log_dir == NULL) {
|
||||||
// try the next one
|
// try the next one
|
||||||
|
@ -791,7 +774,33 @@ int initialize_app(const char *user, const char *app_id,
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
free(any_one_app_log_dir);
|
free(any_one_app_log_dir);
|
||||||
////////////// End of creating the log directories for the app on all disks
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function to prepare the application directories for the container.
|
||||||
|
*/
|
||||||
|
int initialize_app(const char *user, const char *app_id,
|
||||||
|
const char* nmPrivate_credentials_file,
|
||||||
|
char* const* local_dirs, char* const* log_roots,
|
||||||
|
char* const* args) {
|
||||||
|
if (app_id == NULL || user == NULL || user_detail == NULL || user_detail->pw_name == NULL) {
|
||||||
|
fprintf(LOGFILE, "Either app_id is null or the user passed is null.\n");
|
||||||
|
return INVALID_ARGUMENT_NUMBER;
|
||||||
|
}
|
||||||
|
|
||||||
|
// create the user directory on all disks
|
||||||
|
int result = initialize_user(user, local_dirs);
|
||||||
|
if (result != 0) {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
// create the log directories for the app on all disks
|
||||||
|
int log_create_result = create_log_dirs(app_id, log_roots);
|
||||||
|
if (log_create_result != 0) {
|
||||||
|
return log_create_result;
|
||||||
|
}
|
||||||
|
|
||||||
// open up the credentials file
|
// open up the credentials file
|
||||||
int cred_file = open_file_as_nm(nmPrivate_credentials_file);
|
int cred_file = open_file_as_nm(nmPrivate_credentials_file);
|
||||||
|
@ -922,18 +931,34 @@ int launch_container_as_user(const char *user, const char *app_id,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// create the user directory on all disks
|
||||||
|
int result = initialize_user(user, local_dirs);
|
||||||
|
if (result != 0) {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
// initializing log dirs
|
||||||
|
int log_create_result = create_log_dirs(app_id, log_dirs);
|
||||||
|
if (log_create_result != 0) {
|
||||||
|
return log_create_result;
|
||||||
|
}
|
||||||
|
|
||||||
// give up root privs
|
// give up root privs
|
||||||
if (change_user(user_detail->pw_uid, user_detail->pw_gid) != 0) {
|
if (change_user(user_detail->pw_uid, user_detail->pw_gid) != 0) {
|
||||||
exit_code = SETUID_OPER_FAILED;
|
exit_code = SETUID_OPER_FAILED;
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Create container specific directories as user. If there are no resources
|
||||||
|
// to localize for this container, app-directories and log-directories are
|
||||||
|
// also created automatically as part of this call.
|
||||||
if (create_container_directories(user, app_id, container_id, local_dirs,
|
if (create_container_directories(user, app_id, container_id, local_dirs,
|
||||||
log_dirs, work_dir) != 0) {
|
log_dirs, work_dir) != 0) {
|
||||||
fprintf(LOGFILE, "Could not create container dirs");
|
fprintf(LOGFILE, "Could not create container dirs");
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// 700
|
// 700
|
||||||
if (copy_file(container_file_source, script_name, script_file_dest,S_IRWXU) != 0) {
|
if (copy_file(container_file_source, script_name, script_file_dest,S_IRWXU) != 0) {
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
Loading…
Reference in New Issue