confd: when disabling containers, delete in background

Instead of potentially blocking sysrepo, which has a 5 second timeout,
we move 'container delete' jobs to be run by the execd queue.

Fixes #479

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
This commit is contained in:
Joachim Wiberg
2024-06-25 19:08:22 +02:00
parent 0edc2d5b70
commit afbe5ca20b
+18 -4
View File
@@ -28,9 +28,9 @@ static int add(const char *name, struct lyd_node *cif)
struct lyd_node *node, *nets, *caps; struct lyd_node *node, *nets, *caps;
FILE *fp, *ap; FILE *fp, *ap;
fp = fopenf("w", "%s/%s.sh", INBOX_QUEUE, name); fp = fopenf("w", "%s/S01-%s.sh", INBOX_QUEUE, name);
if (!fp) { if (!fp) {
ERRNO("Failed adding job %s.sh to job queue" INBOX_QUEUE, name); ERRNO("Failed adding job S01-%s.sh to job queue" INBOX_QUEUE, name);
return SR_ERR_SYS; return SR_ERR_SYS;
} }
@@ -187,6 +187,7 @@ static int del(const char *name)
INBOX_QUEUE, INBOX_QUEUE,
ACTIVE_QUEUE, ACTIVE_QUEUE,
}; };
FILE *fp;
/* Remove any pending download/create job first */ /* Remove any pending download/create job first */
for (size_t i = 0; i < NELEMS(queue); i++) { for (size_t i = 0; i < NELEMS(queue); i++) {
@@ -196,8 +197,21 @@ static int del(const char *name)
erase(fn); erase(fn);
} }
return systemf("container delete %s", name) || /* Disable service and schedule for deletion. */
systemf("initctl -bnq disable container@%s.conf", name); systemf("initctl -bnq disable container@%s.conf", name);
fp = fopenf("w", "%s/K01-%s.sh", INBOX_QUEUE, name);
if (!fp) {
ERRNO("Failed adding job 00-delete-%s.sh to job queue" INBOX_QUEUE, name);
return SR_ERR_SYS;
}
fprintf(fp, "#!/bin/sh\n"
"container delete %s\n", name);
fchmod(fileno(fp), 0700);
fclose(fp);
return SR_ERR_OK;
} }
static int change(sr_session_ctx_t *session, uint32_t sub_id, const char *module, static int change(sr_session_ctx_t *session, uint32_t sub_id, const char *module,