Skip to content

Commit

Permalink
mxq_reaper: Retry on spool file write errors
Browse files Browse the repository at this point in the history
If we can't write the spool file for any reason, do not write to stderr,
as this is the users stderr of the mxq job. Just wait and retry until
success.
  • Loading branch information
donald committed Feb 17, 2024
1 parent 57cc235 commit b4b4d87
Showing 1 changed file with 48 additions and 32 deletions.
80 changes: 48 additions & 32 deletions mxq_reaper.c
Original file line number Diff line number Diff line change
Expand Up @@ -73,38 +73,54 @@ int main(int argc, char **argv) {
sleep(wait);
}

char *tmpfilename;
if (asprintf(&tmpfilename, "%s.tmp", spoolfilename) == -1)
die("%m\n");
while (1) {
// if anything fails, do not write to stderr, as this is the users
// stderr, just wait and retry.

char *tmpfilename;
if (asprintf(&tmpfilename, "%s.tmp", spoolfilename) == -1)
goto retry_1;

FILE *out = fopen(tmpfilename,"w");
if (out == NULL)
die("%s: %m\n", tmpfilename);
fprintf(out,"1 %d %d %ld %ld %ld %ld %ld %ld %ld %ld %ld %ld %ld %ld %ld %ld %ld %ld %ld %ld %ld %ld\n",
getpid(),
user_status,
user_time.tv_sec, user_time.tv_usec,
user_rusage.ru_utime.tv_sec, user_rusage.ru_utime.tv_usec,
user_rusage.ru_stime.tv_sec, user_rusage.ru_stime.tv_usec,
user_rusage.ru_maxrss,
user_rusage.ru_ixrss,
user_rusage.ru_idrss,
user_rusage.ru_isrss,
user_rusage.ru_minflt,
user_rusage.ru_majflt,
user_rusage.ru_nswap,
user_rusage.ru_inblock,
user_rusage.ru_oublock,
user_rusage.ru_msgsnd,
user_rusage.ru_msgrcv,
user_rusage.ru_nsignals,
user_rusage.ru_nvcsw,
user_rusage.ru_nivcsw
);
fflush(out);
fsync(fileno(out));
fclose(out);
if (rename(tmpfilename, spoolfilename) == -1)
die("%s: %m\n", spoolfilename);
FILE *out = fopen(tmpfilename, "w");
if (out == NULL)
goto retry_2;
if (fprintf(out,"1 %d %d %ld %ld %ld %ld %ld %ld %ld %ld %ld %ld %ld %ld %ld %ld %ld %ld %ld %ld %ld %ld\n",
getpid(),
user_status,
user_time.tv_sec, user_time.tv_usec,
user_rusage.ru_utime.tv_sec, user_rusage.ru_utime.tv_usec,
user_rusage.ru_stime.tv_sec, user_rusage.ru_stime.tv_usec,
user_rusage.ru_maxrss,
user_rusage.ru_ixrss,
user_rusage.ru_idrss,
user_rusage.ru_isrss,
user_rusage.ru_minflt,
user_rusage.ru_majflt,
user_rusage.ru_nswap,
user_rusage.ru_inblock,
user_rusage.ru_oublock,
user_rusage.ru_msgsnd,
user_rusage.ru_msgrcv,
user_rusage.ru_nsignals,
user_rusage.ru_nvcsw,
user_rusage.ru_nivcsw) < 0)
goto retry_3;
if (fflush(out) == EOF)
goto retry_3;
if (fsync(fileno(out)) == -1)
goto retry_3;
if (fclose(out) == EOF)
goto retry_2;
if (rename(tmpfilename, spoolfilename) == -1)
goto retry_2;
break;

retry_3:
fclose(out);
retry_2:
free(tmpfilename);
retry_1:
sleep(10);
}
return 0;
}

0 comments on commit b4b4d87

Please sign in to comment.