mirror of
https://github.com/kernelkit/infix.git
synced 2026-07-22 01:13:00 +02:00
confd: optimize, skip dagger generation when no change
Save a few CPU cycles by skipping a new dagger generation when no interfaces have been modified/added/deleted. Uses d->next_fp as the sentinel: NULL means no claim was made for this transaction. dagger_evolve() and dagger_abandon() now NULL it after fclose, so subsequent unclaimed transactions also get the clean early return. Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
This commit is contained in:
@@ -124,8 +124,12 @@ int dagger_abandon(struct dagger *d)
|
||||
{
|
||||
int exitcode;
|
||||
|
||||
if (!d->next_fp)
|
||||
return 0;
|
||||
|
||||
fprintf(d->next_fp, "%d\n", d->next);
|
||||
fclose(d->next_fp);
|
||||
d->next_fp = NULL;
|
||||
|
||||
exitcode = systemf("dagger -C %s abandon", d->path);
|
||||
DEBUG("dagger(%d->%d): abandon: exitcode=%d\n",
|
||||
@@ -134,12 +138,13 @@ int dagger_abandon(struct dagger *d)
|
||||
return exitcode;
|
||||
}
|
||||
|
||||
int dagger_evolve(struct dagger *d)
|
||||
static int dagger_evolve(struct dagger *d)
|
||||
{
|
||||
int exitcode;
|
||||
|
||||
fprintf(d->next_fp, "%d\n", d->next);
|
||||
fclose(d->next_fp);
|
||||
d->next_fp = NULL;
|
||||
|
||||
exitcode = systemf("dagger -C %s evolve", d->path);
|
||||
DEBUG("dagger(%d->%d): evolve: exitcode=%d\n",
|
||||
@@ -163,6 +168,9 @@ int dagger_evolve_or_abandon(struct dagger *d)
|
||||
{
|
||||
int exitcode, err;
|
||||
|
||||
if (!d->next_fp)
|
||||
return 0;
|
||||
|
||||
exitcode = dagger_evolve(d);
|
||||
dagger_prune(d);
|
||||
if (!exitcode)
|
||||
|
||||
@@ -24,7 +24,6 @@ FILE *dagger_fopen_current(struct dagger *d, const char *action, const char *nod
|
||||
int dagger_add_dep(const struct dagger *d, const char *depender, const char *dependee);
|
||||
int dagger_add_node(struct dagger *d, const char *node);
|
||||
int dagger_abandon(struct dagger *d);
|
||||
int dagger_evolve(struct dagger *d);
|
||||
int dagger_evolve_or_abandon(struct dagger *d);
|
||||
|
||||
int dagger_is_bootstrap(struct dagger *d);
|
||||
|
||||
@@ -774,7 +774,8 @@ static sr_error_t ifchange_post(sr_session_ctx_t *session, struct dagger *net,
|
||||
return err ? SR_ERR_INTERNAL : SR_ERR_OK;
|
||||
}
|
||||
|
||||
int interfaces_change(sr_session_ctx_t *session, struct lyd_node *config, struct lyd_node *diff, sr_event_t event, struct confd *confd)
|
||||
int interfaces_change(sr_session_ctx_t *session, struct lyd_node *config, struct lyd_node *diff,
|
||||
sr_event_t event, struct confd *confd)
|
||||
{
|
||||
struct lyd_node *cifs, *difs, *cif, *dif;
|
||||
sr_error_t err;
|
||||
@@ -794,12 +795,18 @@ int interfaces_change(sr_session_ctx_t *session, struct lyd_node *config, struct
|
||||
return SR_ERR_OK;
|
||||
}
|
||||
|
||||
difs = lydx_get_descendant(diff, "interfaces", "interface", NULL);
|
||||
if (!difs) {
|
||||
/* No interface changes, skip to prevent another dagger generation */
|
||||
return SR_ERR_OK;
|
||||
}
|
||||
|
||||
err = dagger_claim(&confd->netdag, "/run/net");
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
cifs = lydx_get_descendant(config, "interfaces", "interface", NULL);
|
||||
difs = lydx_get_descendant(diff, "interfaces", "interface", NULL);
|
||||
|
||||
err = netdag_init(session, &confd->netdag, cifs, difs);
|
||||
if (err)
|
||||
goto err_out;
|
||||
|
||||
Reference in New Issue
Block a user