fix impact minimizing code
This commit is contained in:
parent
9f04bd5251
commit
c20cae324d
8
main.c
8
main.c
|
@ -42,10 +42,10 @@ int main(int argc, char *argv[]) {
|
||||||
printf("→ By jobs:\n");
|
printf("→ By jobs:\n");
|
||||||
manager_dump_jobs(m, stdout, "\t");
|
manager_dump_jobs(m, stdout, "\t");
|
||||||
|
|
||||||
/* if ((r = manager_loop(m)) < 0) { */
|
if ((r = manager_loop(m)) < 0) {
|
||||||
/* log_error("Failed to run mainloop: %s", strerror(-r)); */
|
log_error("Failed to run mainloop: %s", strerror(-r));
|
||||||
/* goto finish; */
|
goto finish;
|
||||||
/* } */
|
}
|
||||||
|
|
||||||
retval = 0;
|
retval = 0;
|
||||||
|
|
||||||
|
|
20
manager.c
20
manager.c
|
@ -563,6 +563,7 @@ static void transaction_minimize_impact(Manager *m) {
|
||||||
|
|
||||||
HASHMAP_FOREACH(j, m->transaction_jobs, i) {
|
HASHMAP_FOREACH(j, m->transaction_jobs, i) {
|
||||||
LIST_FOREACH(transaction, j, j) {
|
LIST_FOREACH(transaction, j, j) {
|
||||||
|
bool stops_running_service, changes_existing_job;
|
||||||
|
|
||||||
/* If it matters, we shouldn't drop it */
|
/* If it matters, we shouldn't drop it */
|
||||||
if (j->matters_to_anchor)
|
if (j->matters_to_anchor)
|
||||||
|
@ -571,12 +572,25 @@ static void transaction_minimize_impact(Manager *m) {
|
||||||
/* Would this stop a running service?
|
/* Would this stop a running service?
|
||||||
* Would this change an existing job?
|
* Would this change an existing job?
|
||||||
* If so, let's drop this entry */
|
* If so, let's drop this entry */
|
||||||
if ((j->type != JOB_STOP || UNIT_IS_INACTIVE_OR_DEACTIVATING(unit_active_state(j->unit))) &&
|
|
||||||
(!j->unit->meta.job || job_type_is_conflicting(j->type, j->unit->meta.job->state)))
|
stops_running_service =
|
||||||
|
j->type == JOB_STOP && UNIT_IS_ACTIVE_OR_ACTIVATING(unit_active_state(j->unit));
|
||||||
|
|
||||||
|
changes_existing_job =
|
||||||
|
j->unit->meta.job && job_type_is_conflicting(j->type, j->unit->meta.job->state);
|
||||||
|
|
||||||
|
if (!stops_running_service && !changes_existing_job)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
if (stops_running_service)
|
||||||
|
log_debug("%s/%s would stop a running service.", unit_id(j->unit), job_type_to_string(j->type));
|
||||||
|
|
||||||
|
if (changes_existing_job)
|
||||||
|
log_debug("%s/%s would change existing job.", unit_id(j->unit), job_type_to_string(j->type));
|
||||||
|
|
||||||
/* Ok, let's get rid of this */
|
/* Ok, let's get rid of this */
|
||||||
log_debug("Deleting %s/%s to minimize impact", unit_id(j->unit), job_type_to_string(j->type));
|
log_debug("Deleting %s/%s to minimize impact.", unit_id(j->unit), job_type_to_string(j->type));
|
||||||
|
|
||||||
transaction_delete_job(m, j);
|
transaction_delete_job(m, j);
|
||||||
again = true;
|
again = true;
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in New Issue