Skip to content

Commit

Permalink
mxqd: Add option --prerequisites
Browse files Browse the repository at this point in the history
  • Loading branch information
donald committed Mar 29, 2021
1 parent a286f63 commit 053bd55
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 2 deletions.
1 change: 1 addition & 0 deletions mxq_daemon.h
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ struct mxq_daemon {

int daemon_flags;
char *tags;
char *prerequisites;
};

void mxq_daemon_free_content(struct mxq_daemon *daemon);
Expand Down
33 changes: 31 additions & 2 deletions mxqd.c
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@

#include "mxqd_control.h"
#include "keywordset.h"
#include "parser.tab.h"

#ifndef MXQ_INITIAL_PATH
# define MXQ_INITIAL_PATH "/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin"
Expand Down Expand Up @@ -79,8 +80,8 @@ static void print_usage(void)
"options:\n"
" -j, --slots <slots> default: depends on number of cores\n"
" -m, --memory <totalmemory> default: 2G\n"
" -t, --max-time <minutes> default: 0 (unlimited)"
"\n"
" -t, --max-time <minutes> default: 0 (unlimited)\n"
" --prerequisites <expr> default: ''\n"
" -x, --max-memory-per-slot-soft <softlimit>\n"
" root user: default: <totalmemory>/<slots>\n"
" non-root user: default: <totalmemory>\n"
Expand Down Expand Up @@ -424,6 +425,22 @@ static void read_cpufeatures(struct keywordset *kws) {
fclose(proc_cpuinfo);
}

static int expression_is_valid(char *expr) {
struct keywordset *tags = keywordset_new(NULL);
struct parser_context parser_context = {
.input = expr,
.tags = tags,
.pos = 0,
.result = 0,
};
int sts = yyparse(&parser_context);
keywordset_free(tags);
if (sts)
return 0;
else
return 1;
}

int server_init(struct mxq_server *server, int argc, char *argv[])
{
assert(server);
Expand All @@ -438,6 +455,7 @@ int server_init(struct mxq_server *server, int argc, char *argv[])
char *arg_logdir = NULL;
char *arg_initial_path;
char *arg_initial_tmpdir;
char *arg_prerequisites = "";
char arg_daemonize = 0;
char arg_nolog = 0;
char arg_recoveronly = 0;
Expand Down Expand Up @@ -478,6 +496,7 @@ int server_init(struct mxq_server *server, int argc, char *argv[])
MX_OPTION_OPTIONAL_ARG("mysql-default-file", 'M'),
MX_OPTION_OPTIONAL_ARG("mysql-default-group", 'S'),
MX_OPTION_OPTIONAL_ARG("max-time", 't'),
MX_OPTION_OPTIONAL_ARG("prerequisites", 11),
MX_OPTION_END
};

Expand Down Expand Up @@ -631,6 +650,10 @@ int server_init(struct mxq_server *server, int argc, char *argv[])
return -EX_USAGE;
}
break;

case 11:
arg_prerequisites = optctl.optarg;
break;
}
}

Expand Down Expand Up @@ -662,6 +685,11 @@ int server_init(struct mxq_server *server, int argc, char *argv[])
server->initial_tmpdir = arg_initial_tmpdir;
server->recoveronly = arg_recoveronly;

if (*arg_prerequisites != 0 && !expression_is_valid(arg_prerequisites)) {
mx_log_err("syntax error in --prerequisites expression \"%s\"", arg_prerequisites);
return -EX_UNAVAILABLE;
}

server->flock = mx_flock(LOCK_EX, "/dev/shm/mxqd.%s.%s.lck", server->hostname, server->daemon_name);
if (!server->flock) {
mx_log_err("mx_flock(/dev/shm/mxqd.%s.%s.lck) failed: %m", server->hostname, server->daemon_name);
Expand Down Expand Up @@ -812,6 +840,7 @@ int server_init(struct mxq_server *server, int argc, char *argv[])
daemon->daemon_maxtime = server->maxtime;
daemon->daemon_memory_limit_slot_soft = server->memory_limit_slot_soft;
daemon->daemon_memory_limit_slot_hard = server->memory_limit_slot_hard;
daemon->prerequisites = arg_prerequisites;

server->tags=keywordset_new("true");
keywordset_add(server->tags, server->hostname);
Expand Down

0 comments on commit 053bd55

Please sign in to comment.