Skip to content

Commit

Permalink
tmpdir-setup: Use arguments instead of environment
Browse files Browse the repository at this point in the history
Change the tmdir-setup script helper to get ist arguments from its
argument list not from the environment.

Change mxqd to use the mx_call_external helper to call it.
  • Loading branch information
donald committed May 5, 2022
1 parent 06fa4f1 commit 40de658
Show file tree
Hide file tree
Showing 2 changed files with 67 additions and 57 deletions.
88 changes: 53 additions & 35 deletions helper/tmpdir-setup
Original file line number Diff line number Diff line change
@@ -1,42 +1,60 @@
#! /usr/bin/bash

# Input (environment):
#
# MXQ_JOBID : job ident
# MXQ_SIZE : size in GB
# MXQ_UID : uid

# Output:
#
# /dev/shm/mxqd/tmp/$JOBID mounted, space from /scratch/local2
usage() {
cat <<EOF >&2
usage:
$0 create JOBID SIZE UID # create SIZE GiB /dev/shm/mxqd/mnt/job/$JOBID
EOF
exit 1
}

tmpdir=/scratch/local2/mxqd/tmp
mntdir=/dev/shm/mxqd/mnt/job
filename=$tmpdir/$MXQ_JOBID.tmp
mountpoint=$mntdir/$MXQ_JOBID

umask 006
mkdir -p $tmpdir
mkdir -p $mntdir

status=1;

if fallocate -l ${MXQ_SIZE}G $filename; then
if loopdevice=$(losetup --find --show $filename); then
if mkfs.ext4 \
-q \
-m 0 \
-E nodiscard,mmp_update_interval=300,lazy_journal_init=1,root_owner=$MXQ_UID:0 \
-O '64bit,ext_attr,filetype,^has_journal,huge_file,inline_data,^mmp,^quota,sparse_super2' \
$loopdevice \
&& mkdir -p $mountpoint && mount -Odata=writeback,barrier=0 $loopdevice $mountpoint; then
rmdir $mountpoint/lost+found
status=0

cmd_create() {
(( $# == 3 )) || usage
MXQ_JOBID=$1
MXQ_SIZE=$2
MXQ_UID=$3

filename=$tmpdir/$MXQ_JOBID.tmp
mountpoint=$mntdir/$MXQ_JOBID

umask 006
mkdir -p $tmpdir
mkdir -p $mntdir

status=1;

if fallocate -l ${MXQ_SIZE}G $filename; then
if loopdevice=$(losetup --find --show $filename); then
if mkfs.ext4 \
-q \
-m 0 \
-E nodiscard,mmp_update_interval=300,lazy_journal_init=1,root_owner=$MXQ_UID:0 \
-O '64bit,ext_attr,filetype,^has_journal,huge_file,inline_data,^mmp,^quota,sparse_super2' \
$loopdevice \
&& mkdir -p $mountpoint && mount -Odata=writeback,barrier=0 $loopdevice $mountpoint; then
rmdir $mountpoint/lost+found
status=0
fi
losetup -d $loopdevice
fi
losetup -d $loopdevice
rm $filename
else
test -e $filename && rm $filename
fi
rm $filename
else
test -e $filename && rm $filename
fi
exit $status
exit $status
}

(( $# > 0 )) || usage
cmd="$1"
shift;
case "$cmd" in
create)
cmd_create "$@"
;;
*)
usage
;;
esac
36 changes: 14 additions & 22 deletions mxqd.c
Original file line number Diff line number Diff line change
Expand Up @@ -1292,7 +1292,6 @@ static unsigned long start_job(struct mxq_group_list *glist)

pid_t pid;
int res;
int status;

assert(glist);
assert(glist->user);
Expand All @@ -1310,28 +1309,21 @@ static unsigned long start_job(struct mxq_group_list *glist)

if (group->job_tmpdir_size > 0) {
mx_mysql_disconnect(server->mysql);
pid = fork();
if (pid==0) {
char *argv[2];
char *envp[4];
argv[0] = tmpdir_script,
argv[1] = NULL;
envp[0] = mx_asprintf_forever("MXQ_JOBID=%lu", job->job_id);
envp[1] = mx_asprintf_forever("MXQ_SIZE=%u", group->job_tmpdir_size);
envp[2] = mx_asprintf_forever("MXQ_UID=%d", group->user_uid);
envp[3] = NULL;
execve(tmpdir_script, argv,envp);
mx_log_fatal("exec %s : %m", tmpdir_script);
exit(1);
}
char *argv[] = {
tmpdir_script,
"create",
mx_asprintf_forever("%lu", job->job_id),
mx_asprintf_forever("%u", group->job_tmpdir_size),
mx_asprintf_forever("%d", group->user_uid),
NULL
};
int status = mx_call_external(tmpdir_script, argv);
free(argv[2]);
free(argv[3]);
free(argv[4]);
mx_mysql_connect_forever(&(server->mysql));
if (pid < 0) {
mx_log_err("fork: %m");
mxq_unload_job_from_server(server->mysql, job->job_id);
return(0);
}
waitpid(pid, &status, 0);
if (status) {
if (status == -1) {
mx_log_err("create job tmpdir: %m");
mxq_unload_job_from_server(server->mysql, job->job_id);
return 0;
}
Expand Down

0 comments on commit 40de658

Please sign in to comment.