Skip to content

Commit 54881b0

Browse files
committed
sbcast - Add --no-allocation/-Z option
Issue #2
1 parent 8b41e6b commit 54881b0

File tree

3 files changed

+69
-4
lines changed

3 files changed

+69
-4
lines changed

src/bcast/file_bcast.c

Lines changed: 50 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@ static list_t *_fill_in_excluded_paths(struct bcast_parameters *params);
9797
static int _find_subpath(void *x, void *key);
9898
static int _foreach_shared_object(void *x, void *y);
9999
static int _get_cred_for_job(struct bcast_parameters *params);
100+
static int _get_cred_no_job(struct bcast_parameters *params);
100101
static list_t *_get_lib_paths(char *filename);
101102

102103
static int _file_state(struct bcast_parameters *params)
@@ -179,6 +180,48 @@ static int _get_cred_for_job(struct bcast_parameters *params)
179180
return rc;
180181
}
181182

183+
static int _get_cred_no_job(struct bcast_parameters *params)
184+
{
185+
slurm_msg_t req_msg;
186+
slurm_msg_t resp_msg;
187+
sbcast_cred_req_msg_t cred_req_msg = {0};
188+
int *resp_rc;
189+
190+
slurm_msg_t_init(&req_msg);
191+
slurm_msg_t_init(&resp_msg);
192+
193+
cred_req_msg.node_list = params->node_list;
194+
195+
req_msg.msg_type = REQUEST_SBCAST_CRED_NO_JOB;
196+
req_msg.data = &cred_req_msg;
197+
198+
if (slurm_send_recv_controller_msg(&req_msg, &resp_msg,
199+
working_cluster_rec) < 0) {
200+
error("Unable to send/recv sbcast credentional request to slurmctld");
201+
return SLURM_ERROR;
202+
}
203+
204+
switch (resp_msg.msg_type) {
205+
case RESPONSE_JOB_SBCAST_CRED:
206+
sbcast_cred = (job_sbcast_cred_msg_t *) resp_msg.data;
207+
break;
208+
case RESPONSE_SLURM_RC:
209+
resp_rc = resp_msg.data;
210+
error("Received error in response to sbcast credential request: %s",
211+
slurm_strerror(*resp_rc));
212+
return SLURM_ERROR;
213+
default:
214+
error("Received unexpected message type %d in response to sbcast credential request.",
215+
resp_msg.msg_type);
216+
return SLURM_ERROR;
217+
}
218+
219+
if (params->verbose)
220+
print_sbcast_cred(sbcast_cred->sbcast_cred);
221+
222+
return SLURM_SUCCESS;
223+
}
224+
182225
/* Issue the RPC to transfer the file's data */
183226
static int _file_bcast(struct bcast_parameters *params,
184227
file_bcast_msg_t *bcast_msg,
@@ -644,7 +687,13 @@ extern int bcast_file(struct bcast_parameters *params)
644687

645688
if ((rc = _file_state(params)) != SLURM_SUCCESS)
646689
return rc;
647-
if ((rc = _get_cred_for_job(params)) != SLURM_SUCCESS)
690+
691+
if (params->flags & BCAST_FLAG_NO_JOB)
692+
rc = _get_cred_no_job(params);
693+
else
694+
rc = _get_cred_for_job(params);
695+
696+
if (rc != SLURM_SUCCESS)
648697
return rc;
649698

650699
/*

src/bcast/file_bcast.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
#define BCAST_FLAG_PRESERVE SLURM_BIT(1)
4545
#define BCAST_FLAG_SEND_LIBS SLURM_BIT(2)
4646
#define BCAST_FLAG_SHARED_OBJECT SLURM_BIT(3)
47+
#define BCAST_FLAG_NO_JOB SLURM_BIT(4)
4748

4849
struct bcast_parameters {
4950
uint32_t block_size;

src/sbcast/opts.c

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ extern void parse_command_line(int argc, char **argv)
8787
{"treewidth", required_argument, 0, OPT_LONG_TREE_WIDTH},
8888
{"force", no_argument, 0, 'f'},
8989
{"jobid", required_argument, 0, 'j'},
90+
{"no-allocation", optional_argument, 0, 'Z'},
9091
{"nodelist", optional_argument, 0, 'w'},
9192
{"send-libs", optional_argument, 0, OPT_LONG_SEND_LIBS},
9293
{"preserve", no_argument, 0, 'p'},
@@ -149,7 +150,7 @@ extern void parse_command_line(int argc, char **argv)
149150
params.timeout = (atoi(env_val) * 1000);
150151

151152
optind = 0;
152-
while ((opt_char = getopt_long(argc, argv, "C::fF:j:ps:t:vVw:",
153+
while ((opt_char = getopt_long(argc, argv, "C::fF:j:ps:t:vVw:Z",
153154
long_options, &option_index)) != -1) {
154155
switch (opt_char) {
155156
case (int)'?':
@@ -205,6 +206,9 @@ extern void parse_command_line(int argc, char **argv)
205206
case (int) 'w':
206207
params.node_list = xstrdup(optarg);
207208
break;
209+
case (int) 'Z':
210+
params.flags |= BCAST_FLAG_NO_JOB;
211+
break;
208212
case (int) OPT_LONG_HELP:
209213
_help();
210214
exit(0);
@@ -225,8 +229,9 @@ extern void parse_command_line(int argc, char **argv)
225229
exit(1);
226230
}
227231

228-
if (!params.selected_step ||
229-
(params.selected_step->step_id.job_id == NO_VAL)) {
232+
if ((!params.selected_step ||
233+
(params.selected_step->step_id.job_id == NO_VAL)) &&
234+
!(params.flags & BCAST_FLAG_NO_JOB)) {
230235
if (!(env_val = getenv("SLURM_JOB_ID"))) {
231236
error("Need a job id to run this command. "
232237
"Run from within a Slurm job or use the "
@@ -261,6 +266,16 @@ extern void parse_command_line(int argc, char **argv)
261266
exit(1);
262267
}
263268

269+
if ((params.flags & BCAST_FLAG_NO_JOB) && (params.selected_step)) {
270+
error("--no-allocation/-Z and --jobid/-j options are mutually exclusive");
271+
exit(1);
272+
}
273+
274+
if ((params.flags & BCAST_FLAG_NO_JOB) && (!params.node_list)) {
275+
error("--nodelist/-w is required with --no-allocation/-Z.");
276+
exit(1);
277+
}
278+
264279
if (params.verbose)
265280
_print_options();
266281
}

0 commit comments

Comments
 (0)