core: drop "override" flag when building transactions
Now that we don't have RequiresOverridable= and RequisiteOverridable= dependencies anymore, we can get rid of tracking the "override" boolean for jobs in the job engine, as it serves no purpose anymore. While we are at it, fix some error messages we print when invoking functions that take the override parameter.
This commit is contained in:
parent
f32b43bda4
commit
4bd29fe5ce
|
@ -23,6 +23,7 @@
|
|||
|
||||
#include "alloc-util.h"
|
||||
#include "analyze-verify.h"
|
||||
#include "bus-error.h"
|
||||
#include "bus-util.h"
|
||||
#include "log.h"
|
||||
#include "manager.h"
|
||||
|
@ -164,7 +165,6 @@ static int verify_documentation(Unit *u, bool check_man) {
|
|||
|
||||
static int verify_unit(Unit *u, bool check_man) {
|
||||
_cleanup_bus_error_free_ sd_bus_error err = SD_BUS_ERROR_NULL;
|
||||
Job *j;
|
||||
int r, k;
|
||||
|
||||
assert(u);
|
||||
|
@ -173,11 +173,9 @@ static int verify_unit(Unit *u, bool check_man) {
|
|||
unit_dump(u, stdout, "\t");
|
||||
|
||||
log_unit_debug(u, "Creating %s/start job", u->id);
|
||||
r = manager_add_job(u->manager, JOB_START, u, JOB_REPLACE, false, &err, &j);
|
||||
if (sd_bus_error_is_set(&err))
|
||||
log_unit_error(u, "Error: %s: %s", err.name, err.message);
|
||||
r = manager_add_job(u->manager, JOB_START, u, JOB_REPLACE, &err, NULL);
|
||||
if (r < 0)
|
||||
log_unit_error_errno(u, r, "Failed to create %s/start: %m", u->id);
|
||||
log_unit_error_errno(u, r, "Failed to create %s/start: %s", u->id, bus_error_message(&err, r));
|
||||
|
||||
k = verify_socket(u);
|
||||
if (k < 0 && r == 0)
|
||||
|
|
|
@ -728,8 +728,7 @@ static void automount_enter_runnning(Automount *a) {
|
|||
if (!S_ISDIR(st.st_mode) || st.st_dev != a->dev_id)
|
||||
log_unit_info(UNIT(a), "Automount point already active?");
|
||||
else {
|
||||
r = manager_add_job(UNIT(a)->manager, JOB_START, UNIT_TRIGGER(UNIT(a)),
|
||||
JOB_REPLACE, true, &error, NULL);
|
||||
r = manager_add_job(UNIT(a)->manager, JOB_START, UNIT_TRIGGER(UNIT(a)), JOB_REPLACE, &error, NULL);
|
||||
if (r < 0) {
|
||||
log_unit_warning(UNIT(a), "Failed to queue mount startup job: %s", bus_error_message(&error, r));
|
||||
goto fail;
|
||||
|
@ -974,7 +973,7 @@ static int automount_dispatch_io(sd_event_source *s, int fd, uint32_t events, vo
|
|||
break;
|
||||
}
|
||||
|
||||
r = manager_add_job(UNIT(a)->manager, JOB_STOP, UNIT_TRIGGER(UNIT(a)), JOB_REPLACE, true, &error, NULL);
|
||||
r = manager_add_job(UNIT(a)->manager, JOB_STOP, UNIT_TRIGGER(UNIT(a)), JOB_REPLACE, &error, NULL);
|
||||
if (r < 0) {
|
||||
log_unit_warning(UNIT(a), "Failed to queue umount startup job: %s", bus_error_message(&error, r));
|
||||
goto fail;
|
||||
|
|
|
@ -596,7 +596,7 @@ static void busname_enter_running(BusName *n) {
|
|||
goto fail;
|
||||
}
|
||||
|
||||
r = manager_add_job(UNIT(n)->manager, JOB_START, UNIT_DEREF(n->service), JOB_REPLACE, true, &error, NULL);
|
||||
r = manager_add_job(UNIT(n)->manager, JOB_START, UNIT_DEREF(n->service), JOB_REPLACE, &error, NULL);
|
||||
if (r < 0)
|
||||
goto fail;
|
||||
}
|
||||
|
|
|
@ -1008,7 +1008,7 @@ int bus_unit_queue_job(
|
|||
(type == JOB_RELOAD_OR_START && job_type_collapse(type, u) == JOB_START && u->refuse_manual_start))
|
||||
return sd_bus_error_setf(error, BUS_ERROR_ONLY_BY_DEPENDENCY, "Operation refused, unit %s may be requested by dependency only.", u->id);
|
||||
|
||||
r = manager_add_job(u->manager, type, u, mode, true, error, &j);
|
||||
r = manager_add_job(u->manager, type, u, mode, error, &j);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
|
|
|
@ -177,7 +177,7 @@ static int signal_activation_request(sd_bus_message *message, void *userdata, sd
|
|||
goto failed;
|
||||
}
|
||||
|
||||
r = manager_add_job(m, JOB_START, u, JOB_REPLACE, true, &error, NULL);
|
||||
r = manager_add_job(m, JOB_START, u, JOB_REPLACE, &error, NULL);
|
||||
if (r < 0)
|
||||
goto failed;
|
||||
|
||||
|
|
|
@ -68,7 +68,7 @@ int failure_action(
|
|||
log_and_status(m, "Rebooting as result of failure.");
|
||||
|
||||
update_reboot_param_file(reboot_arg);
|
||||
r = manager_add_job_by_name(m, JOB_START, SPECIAL_REBOOT_TARGET, JOB_REPLACE, true, &error, NULL);
|
||||
r = manager_add_job_by_name(m, JOB_START, SPECIAL_REBOOT_TARGET, JOB_REPLACE, &error, NULL);
|
||||
if (r < 0)
|
||||
log_error("Failed to reboot: %s.", bus_error_message(&error, r));
|
||||
|
||||
|
@ -101,7 +101,7 @@ int failure_action(
|
|||
|
||||
log_and_status(m, "Powering off as result of failure.");
|
||||
|
||||
r = manager_add_job_by_name(m, JOB_START, SPECIAL_POWEROFF_TARGET, JOB_REPLACE, true, &error, NULL);
|
||||
r = manager_add_job_by_name(m, JOB_START, SPECIAL_POWEROFF_TARGET, JOB_REPLACE, &error, NULL);
|
||||
if (r < 0)
|
||||
log_error("Failed to poweroff: %s.", bus_error_message(&error, r));
|
||||
|
||||
|
|
|
@ -175,7 +175,6 @@ static void job_merge_into_installed(Job *j, Job *other) {
|
|||
else
|
||||
assert(other->type == JOB_NOP);
|
||||
|
||||
j->override = j->override || other->override;
|
||||
j->irreversible = j->irreversible || other->irreversible;
|
||||
j->ignore_order = j->ignore_order || other->ignore_order;
|
||||
}
|
||||
|
@ -307,12 +306,10 @@ void job_dump(Job *j, FILE*f, const char *prefix) {
|
|||
"%s-> Job %u:\n"
|
||||
"%s\tAction: %s -> %s\n"
|
||||
"%s\tState: %s\n"
|
||||
"%s\tForced: %s\n"
|
||||
"%s\tIrreversible: %s\n",
|
||||
prefix, j->id,
|
||||
prefix, j->unit->id, job_type_to_string(j->type),
|
||||
prefix, job_state_to_string(j->state),
|
||||
prefix, yes_no(j->override),
|
||||
prefix, yes_no(j->irreversible));
|
||||
}
|
||||
|
||||
|
@ -965,7 +962,6 @@ int job_serialize(Job *j, FILE *f, FDSet *fds) {
|
|||
fprintf(f, "job-id=%u\n", j->id);
|
||||
fprintf(f, "job-type=%s\n", job_type_to_string(j->type));
|
||||
fprintf(f, "job-state=%s\n", job_state_to_string(j->state));
|
||||
fprintf(f, "job-override=%s\n", yes_no(j->override));
|
||||
fprintf(f, "job-irreversible=%s\n", yes_no(j->irreversible));
|
||||
fprintf(f, "job-sent-dbus-new-signal=%s\n", yes_no(j->sent_dbus_new_signal));
|
||||
fprintf(f, "job-ignore-order=%s\n", yes_no(j->ignore_order));
|
||||
|
@ -1033,15 +1029,6 @@ int job_deserialize(Job *j, FILE *f, FDSet *fds) {
|
|||
else
|
||||
job_set_state(j, s);
|
||||
|
||||
} else if (streq(l, "job-override")) {
|
||||
int b;
|
||||
|
||||
b = parse_boolean(v);
|
||||
if (b < 0)
|
||||
log_debug("Failed to parse job override flag %s", v);
|
||||
else
|
||||
j->override = j->override || b;
|
||||
|
||||
} else if (streq(l, "job-irreversible")) {
|
||||
int b;
|
||||
|
||||
|
|
|
@ -162,7 +162,6 @@ struct Job {
|
|||
bool installed:1;
|
||||
bool in_run_queue:1;
|
||||
bool matters_to_anchor:1;
|
||||
bool override:1;
|
||||
bool in_dbus_queue:1;
|
||||
bool sent_dbus_new_signal:1;
|
||||
bool ignore_order:1;
|
||||
|
|
|
@ -1744,11 +1744,11 @@ int main(int argc, char *argv[]) {
|
|||
manager_dump_units(m, stdout, "\t");
|
||||
}
|
||||
|
||||
r = manager_add_job(m, JOB_START, target, JOB_ISOLATE, false, &error, &default_unit_job);
|
||||
r = manager_add_job(m, JOB_START, target, JOB_ISOLATE, &error, &default_unit_job);
|
||||
if (r == -EPERM) {
|
||||
log_debug("Default target could not be isolated, starting instead: %s", bus_error_message(&error, r));
|
||||
|
||||
r = manager_add_job(m, JOB_START, target, JOB_REPLACE, false, &error, &default_unit_job);
|
||||
r = manager_add_job(m, JOB_START, target, JOB_REPLACE, &error, &default_unit_job);
|
||||
if (r < 0) {
|
||||
log_emergency("Failed to start default target: %s", bus_error_message(&error, r));
|
||||
error_message = "Failed to start default target";
|
||||
|
|
|
@ -1183,7 +1183,7 @@ int manager_startup(Manager *m, FILE *serialization, FDSet *fds) {
|
|||
return r;
|
||||
}
|
||||
|
||||
int manager_add_job(Manager *m, JobType type, Unit *unit, JobMode mode, bool override, sd_bus_error *e, Job **_ret) {
|
||||
int manager_add_job(Manager *m, JobType type, Unit *unit, JobMode mode, sd_bus_error *e, Job **_ret) {
|
||||
int r;
|
||||
Transaction *tr;
|
||||
|
||||
|
@ -1206,7 +1206,7 @@ int manager_add_job(Manager *m, JobType type, Unit *unit, JobMode mode, bool ove
|
|||
if (!tr)
|
||||
return -ENOMEM;
|
||||
|
||||
r = transaction_add_job_and_dependencies(tr, type, unit, NULL, true, override, false,
|
||||
r = transaction_add_job_and_dependencies(tr, type, unit, NULL, true, false,
|
||||
mode == JOB_IGNORE_DEPENDENCIES || mode == JOB_IGNORE_REQUIREMENTS,
|
||||
mode == JOB_IGNORE_DEPENDENCIES, e);
|
||||
if (r < 0)
|
||||
|
@ -1238,7 +1238,7 @@ tr_abort:
|
|||
return r;
|
||||
}
|
||||
|
||||
int manager_add_job_by_name(Manager *m, JobType type, const char *name, JobMode mode, bool override, sd_bus_error *e, Job **_ret) {
|
||||
int manager_add_job_by_name(Manager *m, JobType type, const char *name, JobMode mode, sd_bus_error *e, Job **_ret) {
|
||||
Unit *unit;
|
||||
int r;
|
||||
|
||||
|
@ -1251,7 +1251,7 @@ int manager_add_job_by_name(Manager *m, JobType type, const char *name, JobMode
|
|||
if (r < 0)
|
||||
return r;
|
||||
|
||||
return manager_add_job(m, type, unit, mode, override, e, _ret);
|
||||
return manager_add_job(m, type, unit, mode, e, _ret);
|
||||
}
|
||||
|
||||
Job *manager_get_job(Manager *m, uint32_t id) {
|
||||
|
@ -1687,7 +1687,7 @@ static int manager_start_target(Manager *m, const char *name, JobMode mode) {
|
|||
|
||||
log_debug("Activating special unit %s", name);
|
||||
|
||||
r = manager_add_job_by_name(m, JOB_START, name, mode, true, &error, NULL);
|
||||
r = manager_add_job_by_name(m, JOB_START, name, mode, &error, NULL);
|
||||
if (r < 0)
|
||||
log_error("Failed to enqueue %s job: %s", name, bus_error_message(&error, r));
|
||||
|
||||
|
|
|
@ -326,8 +326,8 @@ int manager_load_unit_prepare(Manager *m, const char *name, const char *path, sd
|
|||
int manager_load_unit(Manager *m, const char *name, const char *path, sd_bus_error *e, Unit **_ret);
|
||||
int manager_load_unit_from_dbus_path(Manager *m, const char *s, sd_bus_error *e, Unit **_u);
|
||||
|
||||
int manager_add_job(Manager *m, JobType type, Unit *unit, JobMode mode, bool override, sd_bus_error *e, Job **_ret);
|
||||
int manager_add_job_by_name(Manager *m, JobType type, const char *name, JobMode mode, bool override, sd_bus_error *e, Job **_ret);
|
||||
int manager_add_job(Manager *m, JobType type, Unit *unit, JobMode mode, sd_bus_error *e, Job **_ret);
|
||||
int manager_add_job_by_name(Manager *m, JobType type, const char *name, JobMode mode, sd_bus_error *e, Job **_ret);
|
||||
|
||||
void manager_dump_units(Manager *s, FILE *f, const char *prefix);
|
||||
void manager_dump_jobs(Manager *s, FILE *f, const char *prefix);
|
||||
|
|
|
@ -474,8 +474,7 @@ static void path_enter_running(Path *p) {
|
|||
if (unit_stop_pending(UNIT(p)))
|
||||
return;
|
||||
|
||||
r = manager_add_job(UNIT(p)->manager, JOB_START, UNIT_TRIGGER(UNIT(p)),
|
||||
JOB_REPLACE, true, &error, NULL);
|
||||
r = manager_add_job(UNIT(p)->manager, JOB_START, UNIT_TRIGGER(UNIT(p)), JOB_REPLACE, &error, NULL);
|
||||
if (r < 0)
|
||||
goto fail;
|
||||
|
||||
|
|
|
@ -1849,7 +1849,7 @@ static void service_enter_restart(Service *s) {
|
|||
* restarted. We use JOB_RESTART (instead of the more obvious
|
||||
* JOB_START) here so that those dependency jobs will be added
|
||||
* as well. */
|
||||
r = manager_add_job(UNIT(s)->manager, JOB_RESTART, UNIT(s), JOB_FAIL, false, &error, NULL);
|
||||
r = manager_add_job(UNIT(s)->manager, JOB_RESTART, UNIT(s), JOB_FAIL, &error, NULL);
|
||||
if (r < 0)
|
||||
goto fail;
|
||||
|
||||
|
|
|
@ -1921,7 +1921,7 @@ static void socket_enter_running(Socket *s, int cfd) {
|
|||
goto fail;
|
||||
}
|
||||
|
||||
r = manager_add_job(UNIT(s)->manager, JOB_START, UNIT_DEREF(s->service), JOB_REPLACE, true, &error, NULL);
|
||||
r = manager_add_job(UNIT(s)->manager, JOB_START, UNIT_DEREF(s->service), JOB_REPLACE, &error, NULL);
|
||||
if (r < 0)
|
||||
goto fail;
|
||||
}
|
||||
|
@ -1979,7 +1979,7 @@ static void socket_enter_running(Socket *s, int cfd) {
|
|||
cfd = -1;
|
||||
s->n_connections ++;
|
||||
|
||||
r = manager_add_job(UNIT(s)->manager, JOB_START, UNIT(service), JOB_REPLACE, true, &error, NULL);
|
||||
r = manager_add_job(UNIT(s)->manager, JOB_START, UNIT(service), JOB_REPLACE, &error, NULL);
|
||||
if (r < 0)
|
||||
goto fail;
|
||||
|
||||
|
|
|
@ -511,8 +511,7 @@ static void timer_enter_running(Timer *t) {
|
|||
if (unit_stop_pending(UNIT(t)))
|
||||
return;
|
||||
|
||||
r = manager_add_job(UNIT(t)->manager, JOB_START, UNIT_TRIGGER(UNIT(t)),
|
||||
JOB_REPLACE, true, &error, NULL);
|
||||
r = manager_add_job(UNIT(t)->manager, JOB_START, UNIT_TRIGGER(UNIT(t)), JOB_REPLACE, &error, NULL);
|
||||
if (r < 0)
|
||||
goto fail;
|
||||
|
||||
|
|
|
@ -99,9 +99,7 @@ static void transaction_merge_and_delete_job(Transaction *tr, Job *j, Job *other
|
|||
|
||||
j->type = t;
|
||||
j->state = JOB_WAITING;
|
||||
j->override = j->override || other->override;
|
||||
j->irreversible = j->irreversible || other->irreversible;
|
||||
|
||||
j->matters_to_anchor = j->matters_to_anchor || other->matters_to_anchor;
|
||||
|
||||
/* Patch us in as new owner of the JobDependency objects */
|
||||
|
@ -745,7 +743,7 @@ int transaction_activate(Transaction *tr, Manager *m, JobMode mode, sd_bus_error
|
|||
return 0;
|
||||
}
|
||||
|
||||
static Job* transaction_add_one_job(Transaction *tr, JobType type, Unit *unit, bool override, bool *is_new) {
|
||||
static Job* transaction_add_one_job(Transaction *tr, JobType type, Unit *unit, bool *is_new) {
|
||||
Job *j, *f;
|
||||
|
||||
assert(tr);
|
||||
|
@ -774,7 +772,6 @@ static Job* transaction_add_one_job(Transaction *tr, JobType type, Unit *unit, b
|
|||
j->generation = 0;
|
||||
j->marker = NULL;
|
||||
j->matters_to_anchor = false;
|
||||
j->override = override;
|
||||
j->irreversible = tr->irreversible;
|
||||
|
||||
LIST_PREPEND(transaction, f, j);
|
||||
|
@ -833,7 +830,6 @@ int transaction_add_job_and_dependencies(
|
|||
Unit *unit,
|
||||
Job *by,
|
||||
bool matters,
|
||||
bool override,
|
||||
bool conflicts,
|
||||
bool ignore_requirements,
|
||||
bool ignore_order,
|
||||
|
@ -895,7 +891,7 @@ int transaction_add_job_and_dependencies(
|
|||
|
||||
|
||||
/* First add the job. */
|
||||
ret = transaction_add_one_job(tr, type, unit, override, &is_new);
|
||||
ret = transaction_add_one_job(tr, type, unit, &is_new);
|
||||
if (!ret)
|
||||
return -ENOMEM;
|
||||
|
||||
|
@ -918,7 +914,7 @@ int transaction_add_job_and_dependencies(
|
|||
* add all dependencies of everybody following. */
|
||||
if (unit_following_set(ret->unit, &following) > 0) {
|
||||
SET_FOREACH(dep, following, i) {
|
||||
r = transaction_add_job_and_dependencies(tr, type, dep, ret, false, override, false, false, ignore_order, e);
|
||||
r = transaction_add_job_and_dependencies(tr, type, dep, ret, false, false, false, ignore_order, e);
|
||||
if (r < 0) {
|
||||
log_unit_warning(dep, "Cannot add dependency job for, ignoring: %s", bus_error_message(e, r));
|
||||
sd_bus_error_free(e);
|
||||
|
@ -931,7 +927,7 @@ int transaction_add_job_and_dependencies(
|
|||
/* Finally, recursively add in all dependencies. */
|
||||
if (type == JOB_START || type == JOB_RESTART) {
|
||||
SET_FOREACH(dep, ret->unit->dependencies[UNIT_REQUIRES], i) {
|
||||
r = transaction_add_job_and_dependencies(tr, JOB_START, dep, ret, true, override, false, false, ignore_order, e);
|
||||
r = transaction_add_job_and_dependencies(tr, JOB_START, dep, ret, true, false, false, ignore_order, e);
|
||||
if (r < 0) {
|
||||
if (r != -EBADR)
|
||||
goto fail;
|
||||
|
@ -941,7 +937,7 @@ int transaction_add_job_and_dependencies(
|
|||
}
|
||||
|
||||
SET_FOREACH(dep, ret->unit->dependencies[UNIT_BINDS_TO], i) {
|
||||
r = transaction_add_job_and_dependencies(tr, JOB_START, dep, ret, true, override, false, false, ignore_order, e);
|
||||
r = transaction_add_job_and_dependencies(tr, JOB_START, dep, ret, true, false, false, ignore_order, e);
|
||||
if (r < 0) {
|
||||
if (r != -EBADR)
|
||||
goto fail;
|
||||
|
@ -951,7 +947,7 @@ int transaction_add_job_and_dependencies(
|
|||
}
|
||||
|
||||
SET_FOREACH(dep, ret->unit->dependencies[UNIT_WANTS], i) {
|
||||
r = transaction_add_job_and_dependencies(tr, JOB_START, dep, ret, false, false, false, false, ignore_order, e);
|
||||
r = transaction_add_job_and_dependencies(tr, JOB_START, dep, ret, false, false, false, ignore_order, e);
|
||||
if (r < 0) {
|
||||
log_unit_full(dep,
|
||||
r == -EADDRNOTAVAIL ? LOG_DEBUG : LOG_WARNING, r,
|
||||
|
@ -962,7 +958,7 @@ int transaction_add_job_and_dependencies(
|
|||
}
|
||||
|
||||
SET_FOREACH(dep, ret->unit->dependencies[UNIT_REQUISITE], i) {
|
||||
r = transaction_add_job_and_dependencies(tr, JOB_VERIFY_ACTIVE, dep, ret, true, override, false, false, ignore_order, e);
|
||||
r = transaction_add_job_and_dependencies(tr, JOB_VERIFY_ACTIVE, dep, ret, true, false, false, ignore_order, e);
|
||||
if (r < 0) {
|
||||
if (r != -EBADR)
|
||||
goto fail;
|
||||
|
@ -972,7 +968,7 @@ int transaction_add_job_and_dependencies(
|
|||
}
|
||||
|
||||
SET_FOREACH(dep, ret->unit->dependencies[UNIT_CONFLICTS], i) {
|
||||
r = transaction_add_job_and_dependencies(tr, JOB_STOP, dep, ret, true, override, true, false, ignore_order, e);
|
||||
r = transaction_add_job_and_dependencies(tr, JOB_STOP, dep, ret, true, true, false, ignore_order, e);
|
||||
if (r < 0) {
|
||||
if (r != -EBADR)
|
||||
goto fail;
|
||||
|
@ -982,7 +978,7 @@ int transaction_add_job_and_dependencies(
|
|||
}
|
||||
|
||||
SET_FOREACH(dep, ret->unit->dependencies[UNIT_CONFLICTED_BY], i) {
|
||||
r = transaction_add_job_and_dependencies(tr, JOB_STOP, dep, ret, false, override, false, false, ignore_order, e);
|
||||
r = transaction_add_job_and_dependencies(tr, JOB_STOP, dep, ret, false, false, false, ignore_order, e);
|
||||
if (r < 0) {
|
||||
log_unit_warning(dep,
|
||||
"Cannot add dependency job, ignoring: %s",
|
||||
|
@ -1017,7 +1013,7 @@ int transaction_add_job_and_dependencies(
|
|||
if (nt == JOB_NOP)
|
||||
continue;
|
||||
|
||||
r = transaction_add_job_and_dependencies(tr, nt, dep, ret, true, override, false, false, ignore_order, e);
|
||||
r = transaction_add_job_and_dependencies(tr, nt, dep, ret, true, false, false, ignore_order, e);
|
||||
if (r < 0) {
|
||||
if (r != -EBADR)
|
||||
goto fail;
|
||||
|
@ -1030,7 +1026,7 @@ int transaction_add_job_and_dependencies(
|
|||
if (type == JOB_RELOAD) {
|
||||
|
||||
SET_FOREACH(dep, ret->unit->dependencies[UNIT_PROPAGATES_RELOAD_TO], i) {
|
||||
r = transaction_add_job_and_dependencies(tr, JOB_RELOAD, dep, ret, false, override, false, false, ignore_order, e);
|
||||
r = transaction_add_job_and_dependencies(tr, JOB_RELOAD, dep, ret, false, false, false, ignore_order, e);
|
||||
if (r < 0) {
|
||||
log_unit_warning(dep,
|
||||
"Cannot add dependency reload job, ignoring: %s",
|
||||
|
@ -1075,7 +1071,7 @@ int transaction_add_isolate_jobs(Transaction *tr, Manager *m) {
|
|||
if (hashmap_get(tr->jobs, u))
|
||||
continue;
|
||||
|
||||
r = transaction_add_job_and_dependencies(tr, JOB_STOP, u, tr->anchor_job, true, false, false, false, false, NULL);
|
||||
r = transaction_add_job_and_dependencies(tr, JOB_STOP, u, tr->anchor_job, true, false, false, false, NULL);
|
||||
if (r < 0)
|
||||
log_unit_warning_errno(u, r, "Cannot add isolate job, ignoring: %m");
|
||||
}
|
||||
|
|
|
@ -44,7 +44,6 @@ int transaction_add_job_and_dependencies(
|
|||
Unit *unit,
|
||||
Job *by,
|
||||
bool matters,
|
||||
bool override,
|
||||
bool conflicts,
|
||||
bool ignore_requirements,
|
||||
bool ignore_order,
|
||||
|
|
|
@ -1603,6 +1603,8 @@ bool unit_can_reload(Unit *u) {
|
|||
|
||||
static void unit_check_unneeded(Unit *u) {
|
||||
|
||||
_cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL;
|
||||
|
||||
static const UnitDependency needed_dependencies[] = {
|
||||
UNIT_REQUIRED_BY,
|
||||
UNIT_REQUISITE_OF,
|
||||
|
@ -1642,12 +1644,13 @@ static void unit_check_unneeded(Unit *u) {
|
|||
log_unit_info(u, "Unit not needed anymore. Stopping.");
|
||||
|
||||
/* Ok, nobody needs us anymore. Sniff. Then let's commit suicide */
|
||||
r = manager_add_job(u->manager, JOB_STOP, u, JOB_FAIL, true, NULL, NULL);
|
||||
r = manager_add_job(u->manager, JOB_STOP, u, JOB_FAIL, &error, NULL);
|
||||
if (r < 0)
|
||||
log_unit_warning_errno(u, r, "Failed to enqueue stop job, ignoring: %m");
|
||||
log_unit_warning_errno(u, r, "Failed to enqueue stop job, ignoring: %s", bus_error_message(&error, r));
|
||||
}
|
||||
|
||||
static void unit_check_binds_to(Unit *u) {
|
||||
_cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL;
|
||||
bool stop = false;
|
||||
Unit *other;
|
||||
Iterator i;
|
||||
|
@ -1687,9 +1690,9 @@ static void unit_check_binds_to(Unit *u) {
|
|||
log_unit_info(u, "Unit is bound to inactive unit %s. Stopping, too.", other->id);
|
||||
|
||||
/* A unit we need to run is gone. Sniff. Let's stop this. */
|
||||
r = manager_add_job(u->manager, JOB_STOP, u, JOB_FAIL, true, NULL, NULL);
|
||||
r = manager_add_job(u->manager, JOB_STOP, u, JOB_FAIL, &error, NULL);
|
||||
if (r < 0)
|
||||
log_unit_warning_errno(u, r, "Failed to enqueue stop job, ignoring: %m");
|
||||
log_unit_warning_errno(u, r, "Failed to enqueue stop job, ignoring: %s", bus_error_message(&error, r));
|
||||
}
|
||||
|
||||
static void retroactively_start_dependencies(Unit *u) {
|
||||
|
@ -1702,25 +1705,25 @@ static void retroactively_start_dependencies(Unit *u) {
|
|||
SET_FOREACH(other, u->dependencies[UNIT_REQUIRES], i)
|
||||
if (!set_get(u->dependencies[UNIT_AFTER], other) &&
|
||||
!UNIT_IS_ACTIVE_OR_ACTIVATING(unit_active_state(other)))
|
||||
manager_add_job(u->manager, JOB_START, other, JOB_REPLACE, true, NULL, NULL);
|
||||
manager_add_job(u->manager, JOB_START, other, JOB_REPLACE, NULL, NULL);
|
||||
|
||||
SET_FOREACH(other, u->dependencies[UNIT_BINDS_TO], i)
|
||||
if (!set_get(u->dependencies[UNIT_AFTER], other) &&
|
||||
!UNIT_IS_ACTIVE_OR_ACTIVATING(unit_active_state(other)))
|
||||
manager_add_job(u->manager, JOB_START, other, JOB_REPLACE, true, NULL, NULL);
|
||||
manager_add_job(u->manager, JOB_START, other, JOB_REPLACE, NULL, NULL);
|
||||
|
||||
SET_FOREACH(other, u->dependencies[UNIT_WANTS], i)
|
||||
if (!set_get(u->dependencies[UNIT_AFTER], other) &&
|
||||
!UNIT_IS_ACTIVE_OR_ACTIVATING(unit_active_state(other)))
|
||||
manager_add_job(u->manager, JOB_START, other, JOB_FAIL, false, NULL, NULL);
|
||||
manager_add_job(u->manager, JOB_START, other, JOB_FAIL, NULL, NULL);
|
||||
|
||||
SET_FOREACH(other, u->dependencies[UNIT_CONFLICTS], i)
|
||||
if (!UNIT_IS_INACTIVE_OR_DEACTIVATING(unit_active_state(other)))
|
||||
manager_add_job(u->manager, JOB_STOP, other, JOB_REPLACE, true, NULL, NULL);
|
||||
manager_add_job(u->manager, JOB_STOP, other, JOB_REPLACE, NULL, NULL);
|
||||
|
||||
SET_FOREACH(other, u->dependencies[UNIT_CONFLICTED_BY], i)
|
||||
if (!UNIT_IS_INACTIVE_OR_DEACTIVATING(unit_active_state(other)))
|
||||
manager_add_job(u->manager, JOB_STOP, other, JOB_REPLACE, true, NULL, NULL);
|
||||
manager_add_job(u->manager, JOB_STOP, other, JOB_REPLACE, NULL, NULL);
|
||||
}
|
||||
|
||||
static void retroactively_stop_dependencies(Unit *u) {
|
||||
|
@ -1733,7 +1736,7 @@ static void retroactively_stop_dependencies(Unit *u) {
|
|||
/* Pull down units which are bound to us recursively if enabled */
|
||||
SET_FOREACH(other, u->dependencies[UNIT_BOUND_BY], i)
|
||||
if (!UNIT_IS_INACTIVE_OR_DEACTIVATING(unit_active_state(other)))
|
||||
manager_add_job(u->manager, JOB_STOP, other, JOB_REPLACE, true, NULL, NULL);
|
||||
manager_add_job(u->manager, JOB_STOP, other, JOB_REPLACE, NULL, NULL);
|
||||
}
|
||||
|
||||
static void check_unneeded_dependencies(Unit *u) {
|
||||
|
@ -1772,7 +1775,7 @@ void unit_start_on_failure(Unit *u) {
|
|||
SET_FOREACH(other, u->dependencies[UNIT_ON_FAILURE], i) {
|
||||
int r;
|
||||
|
||||
r = manager_add_job(u->manager, JOB_START, other, u->on_failure_job_mode, true, NULL, NULL);
|
||||
r = manager_add_job(u->manager, JOB_START, other, u->on_failure_job_mode, NULL, NULL);
|
||||
if (r < 0)
|
||||
log_unit_error_errno(u, r, "Failed to enqueue OnFailure= job: %m");
|
||||
}
|
||||
|
|
|
@ -52,7 +52,7 @@ int main(int argc, char *argv[]) {
|
|||
manager_dump_units(m, stdout, "\t");
|
||||
|
||||
printf("Test1: (Trivial)\n");
|
||||
r = manager_add_job(m, JOB_START, c, JOB_REPLACE, false, &err, &j);
|
||||
r = manager_add_job(m, JOB_START, c, JOB_REPLACE, &err, &j);
|
||||
if (sd_bus_error_is_set(&err))
|
||||
log_error("error: %s: %s", err.name, err.message);
|
||||
assert_se(r == 0);
|
||||
|
@ -65,15 +65,15 @@ int main(int argc, char *argv[]) {
|
|||
manager_dump_units(m, stdout, "\t");
|
||||
|
||||
printf("Test2: (Cyclic Order, Unfixable)\n");
|
||||
assert_se(manager_add_job(m, JOB_START, d, JOB_REPLACE, false, NULL, &j) == -EDEADLK);
|
||||
assert_se(manager_add_job(m, JOB_START, d, JOB_REPLACE, NULL, &j) == -EDEADLK);
|
||||
manager_dump_jobs(m, stdout, "\t");
|
||||
|
||||
printf("Test3: (Cyclic Order, Fixable, Garbage Collector)\n");
|
||||
assert_se(manager_add_job(m, JOB_START, e, JOB_REPLACE, false, NULL, &j) == 0);
|
||||
assert_se(manager_add_job(m, JOB_START, e, JOB_REPLACE, NULL, &j) == 0);
|
||||
manager_dump_jobs(m, stdout, "\t");
|
||||
|
||||
printf("Test4: (Identical transaction)\n");
|
||||
assert_se(manager_add_job(m, JOB_START, e, JOB_FAIL, false, NULL, &j) == 0);
|
||||
assert_se(manager_add_job(m, JOB_START, e, JOB_FAIL, NULL, &j) == 0);
|
||||
manager_dump_jobs(m, stdout, "\t");
|
||||
|
||||
printf("Load3:\n");
|
||||
|
@ -81,21 +81,21 @@ int main(int argc, char *argv[]) {
|
|||
manager_dump_units(m, stdout, "\t");
|
||||
|
||||
printf("Test5: (Colliding transaction, fail)\n");
|
||||
assert_se(manager_add_job(m, JOB_START, g, JOB_FAIL, false, NULL, &j) == -EDEADLK);
|
||||
assert_se(manager_add_job(m, JOB_START, g, JOB_FAIL, NULL, &j) == -EDEADLK);
|
||||
|
||||
printf("Test6: (Colliding transaction, replace)\n");
|
||||
assert_se(manager_add_job(m, JOB_START, g, JOB_REPLACE, false, NULL, &j) == 0);
|
||||
assert_se(manager_add_job(m, JOB_START, g, JOB_REPLACE, NULL, &j) == 0);
|
||||
manager_dump_jobs(m, stdout, "\t");
|
||||
|
||||
printf("Test7: (Unmergeable job type, fail)\n");
|
||||
assert_se(manager_add_job(m, JOB_STOP, g, JOB_FAIL, false, NULL, &j) == -EDEADLK);
|
||||
assert_se(manager_add_job(m, JOB_STOP, g, JOB_FAIL, NULL, &j) == -EDEADLK);
|
||||
|
||||
printf("Test8: (Mergeable job type, fail)\n");
|
||||
assert_se(manager_add_job(m, JOB_RESTART, g, JOB_FAIL, false, NULL, &j) == 0);
|
||||
assert_se(manager_add_job(m, JOB_RESTART, g, JOB_FAIL, NULL, &j) == 0);
|
||||
manager_dump_jobs(m, stdout, "\t");
|
||||
|
||||
printf("Test9: (Unmergeable job type, replace)\n");
|
||||
assert_se(manager_add_job(m, JOB_STOP, g, JOB_REPLACE, false, NULL, &j) == 0);
|
||||
assert_se(manager_add_job(m, JOB_STOP, g, JOB_REPLACE, NULL, &j) == 0);
|
||||
manager_dump_jobs(m, stdout, "\t");
|
||||
|
||||
printf("Load4:\n");
|
||||
|
@ -103,7 +103,7 @@ int main(int argc, char *argv[]) {
|
|||
manager_dump_units(m, stdout, "\t");
|
||||
|
||||
printf("Test10: (Unmergeable job type of auxiliary job, fail)\n");
|
||||
assert_se(manager_add_job(m, JOB_START, h, JOB_FAIL, false, NULL, &j) == 0);
|
||||
assert_se(manager_add_job(m, JOB_START, h, JOB_FAIL, NULL, &j) == 0);
|
||||
manager_dump_jobs(m, stdout, "\t");
|
||||
|
||||
manager_free(m);
|
||||
|
|
Loading…
Reference in New Issue