job.h revision 94bd732348535de399f8f003e3a1cbc8a81ab839
1ee306e1248866617c96ed9f4263f375588ad838Lennart Poettering/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
1ee306e1248866617c96ed9f4263f375588ad838Lennart Poettering This file is part of systemd.
1ee306e1248866617c96ed9f4263f375588ad838Lennart Poettering Copyright 2010 Lennart Poettering
1ee306e1248866617c96ed9f4263f375588ad838Lennart Poettering systemd is free software; you can redistribute it and/or modify it
1ee306e1248866617c96ed9f4263f375588ad838Lennart Poettering under the terms of the GNU Lesser General Public License as published by
1ee306e1248866617c96ed9f4263f375588ad838Lennart Poettering the Free Software Foundation; either version 2.1 of the License, or
1ee306e1248866617c96ed9f4263f375588ad838Lennart Poettering (at your option) any later version.
1ee306e1248866617c96ed9f4263f375588ad838Lennart Poettering systemd is distributed in the hope that it will be useful, but
1ee306e1248866617c96ed9f4263f375588ad838Lennart Poettering WITHOUT ANY WARRANTY; without even the implied warranty of
1ee306e1248866617c96ed9f4263f375588ad838Lennart Poettering MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
1ee306e1248866617c96ed9f4263f375588ad838Lennart Poettering Lesser General Public License for more details.
1ee306e1248866617c96ed9f4263f375588ad838Lennart Poettering You should have received a copy of the GNU Lesser General Public License
1ee306e1248866617c96ed9f4263f375588ad838Lennart Poettering along with systemd; If not, see <http://www.gnu.org/licenses/>.
1ee306e1248866617c96ed9f4263f375588ad838Lennart Poetteringtypedef struct JobDependency JobDependency;
1ee306e1248866617c96ed9f4263f375588ad838Lennart Poettering/* Be careful when changing the job types! Adjust job_merging_table[] accordingly! */
1ee306e1248866617c96ed9f4263f375588ad838Lennart Poettering JOB_START, /* if a unit does not support being started, we'll just wait until it becomes active */
d3152a09ac5804ec8603daee12f98cf03523cce0Lennart Poettering /* Note that restarts are first treated like JOB_STOP, but
d3152a09ac5804ec8603daee12f98cf03523cce0Lennart Poettering * then instead of finishing are patched to become
e70bc43cdf75b36e7ad3d29e9a6f8ee1461e7d5eLennart Poettering * JOB_START. */
d3152a09ac5804ec8603daee12f98cf03523cce0Lennart Poettering JOB_RESTART, /* If running, stop. Then start unconditionally. */
97e67f1e52ddc0c21a88cfbcab57e83c59ee627dLennart Poettering /* JOB_NOP can enter into a transaction, but as it won't pull in
c2ce6a3d82b717c4c1e6245ad8c6ce1173f502d0Lennart Poettering * any dependencies and it uses the special 'nop_job' slot in Unit,
c2ce6a3d82b717c4c1e6245ad8c6ce1173f502d0Lennart Poettering * it won't have to merge with anything (except possibly into another
c2ce6a3d82b717c4c1e6245ad8c6ce1173f502d0Lennart Poettering * JOB_NOP, previously installed). JOB_NOP is special-cased in
c2ce6a3d82b717c4c1e6245ad8c6ce1173f502d0Lennart Poettering * job_type_is_*() functions so that the transaction can be
adacb9575a09981fcf11279f2f661e3fc21e58ffLennart Poettering * activated. */
adacb9575a09981fcf11279f2f661e3fc21e58ffLennart Poettering JOB_NOP = _JOB_TYPE_MAX_MERGING, /* do nothing */
e70bc43cdf75b36e7ad3d29e9a6f8ee1461e7d5eLennart Poettering /* JOB_TRY_RESTART can never appear in a transaction, because
e70bc43cdf75b36e7ad3d29e9a6f8ee1461e7d5eLennart Poettering * it always collapses into JOB_RESTART or JOB_NOP before entering.
adacb9575a09981fcf11279f2f661e3fc21e58ffLennart Poettering * Thus we never need to merge it with anything. */
d04c1fb8e215600b4950c6778c6c16ddafc14024Lennart Poettering JOB_TRY_RESTART = _JOB_TYPE_MAX_IN_TRANSACTION, /* if running, stop and then start */
d04c1fb8e215600b4950c6778c6c16ddafc14024Lennart Poettering /* Similar to JOB_TRY_RESTART but collapses to JOB_RELOAD or JOB_NOP */
49af9e1368571f4e423cde0fd45ee284451434d1Lennart Poettering /* JOB_RELOAD_OR_START won't enter into a transaction and cannot result
49af9e1368571f4e423cde0fd45ee284451434d1Lennart Poettering * from transaction merging (there's no way for JOB_RELOAD and
49af9e1368571f4e423cde0fd45ee284451434d1Lennart Poettering * JOB_START to meet in one transaction). It can result from a merge
72c3897f77a7352618ea76b880a6764f52d6327bLennart Poettering * during job installation, but then it will immediately collapse into
72c3897f77a7352618ea76b880a6764f52d6327bLennart Poettering * one of the two simpler types. */
72c3897f77a7352618ea76b880a6764f52d6327bLennart Poettering JOB_RELOAD_OR_START, /* if running, reload, otherwise start */
72c3897f77a7352618ea76b880a6764f52d6327bLennart Poettering JOB_FAIL, /* Fail if a conflicting job is already queued */
72c3897f77a7352618ea76b880a6764f52d6327bLennart Poettering JOB_REPLACE, /* Replace an existing conflicting job */
72c3897f77a7352618ea76b880a6764f52d6327bLennart Poettering JOB_REPLACE_IRREVERSIBLY,/* Like JOB_REPLACE + produce irreversible jobs */
72c3897f77a7352618ea76b880a6764f52d6327bLennart Poettering JOB_ISOLATE, /* Start a unit, and stop all others */
72c3897f77a7352618ea76b880a6764f52d6327bLennart Poettering JOB_FLUSH, /* Flush out all other queued jobs when queing this one */
72c3897f77a7352618ea76b880a6764f52d6327bLennart Poettering JOB_IGNORE_DEPENDENCIES, /* Ignore both requirement and ordering dependencies */
72c3897f77a7352618ea76b880a6764f52d6327bLennart Poettering JOB_IGNORE_REQUIREMENTS, /* Ignore requirement dependencies */
72c3897f77a7352618ea76b880a6764f52d6327bLennart Poettering JOB_DONE, /* Job completed successfully */
72c3897f77a7352618ea76b880a6764f52d6327bLennart Poettering JOB_CANCELED, /* Job canceled by a conflicting job installation or by explicit cancel request */
72c3897f77a7352618ea76b880a6764f52d6327bLennart Poettering JOB_DEPENDENCY, /* A required dependency job did not result in JOB_DONE */
72c3897f77a7352618ea76b880a6764f52d6327bLennart Poettering JOB_SKIPPED, /* Negative result of JOB_VERIFY_ACTIVE */
72c3897f77a7352618ea76b880a6764f52d6327bLennart Poettering JOB_INVALID, /* JOB_RELOAD of inactive unit */
72c3897f77a7352618ea76b880a6764f52d6327bLennart Poettering JOB_ASSERT, /* Couldn't start a unit, because an assert didn't hold */
d6ce17c7f02ed3facdb45f65f546e587c2f00950Lennart Poettering JOB_UNSUPPORTED, /* Couldn't start a unit, because the unit type is not supported on the system */
c01ff965b48bb9693dcd77cbc748b5d8676766b0Lennart Poettering /* Encodes that the 'subject' job needs the 'object' job in
c01ff965b48bb9693dcd77cbc748b5d8676766b0Lennart Poettering * some way. This structure is used only while building a transaction. */
717603e391b52983ca1fd218e7333a1b9dfc5c05Lennart Poettering /* Used for graph algs as a "I have been here" marker */
72c3897f77a7352618ea76b880a6764f52d6327bLennart Poettering * This tracks where to send signals, and also which clients
72c3897f77a7352618ea76b880a6764f52d6327bLennart Poettering * are allowed to call DBus methods on the job (other than
72c3897f77a7352618ea76b880a6764f52d6327bLennart Poettering * There can be more than one client, because of job merging.
72c3897f77a7352618ea76b880a6764f52d6327bLennart Poetteringvoid job_dump(Job *j, FILE*f, const char *prefix);
72c3897f77a7352618ea76b880a6764f52d6327bLennart Poetteringint job_serialize(Job *j, FILE *f, FDSet *fds);
d6ce17c7f02ed3facdb45f65f546e587c2f00950Lennart Poetteringint job_deserialize(Job *j, FILE *f, FDSet *fds);
d6ce17c7f02ed3facdb45f65f546e587c2f00950Lennart PoetteringJobDependency* job_dependency_new(Job *subject, Job *object, bool matters, bool conflicts);
72c3897f77a7352618ea76b880a6764f52d6327bLennart Poetteringvoid job_dependency_free(JobDependency *l);
1ee306e1248866617c96ed9f4263f375588ad838Lennart PoetteringJobType job_type_lookup_merge(JobType a, JobType b) _pure_;
1ee306e1248866617c96ed9f4263f375588ad838Lennart Poettering_pure_ static inline bool job_type_is_mergeable(JobType a, JobType b) {
1ee306e1248866617c96ed9f4263f375588ad838Lennart Poettering return job_type_lookup_merge(a, b) >= 0;
if (b == JOB_NOP)
if (a == JOB_NOP)
return a == job_type_lookup_merge(a, b);