<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>restart</on_crash>
+ <on_lockfailure>poweroff</on_lockfailure>
...</pre>
<p>
domain will be restarted with the same configuration</dd>
</dl>
+ <p>
+ The <code>on_lockfailure</code> element (<span class="since">since
+ 0.10.3</span>) may be used to configure what action should be
+ taken when a lock manager loses resource locks. The following
+ actions are recognized by libvirt, although not all of them need
+ to be supported by individual lock managers. When no action is
+ specified, each lock manager will take its default action.
+ </p>
+ <dl>
+ <dt><code>poweroff</code></dt>
+ <dd>The domain will be forcefully powered off.</dd>
+ <dt><code>restart</code></dt>
+ <dd>The domain will be powered off and started up again to
+ reacquire its locks.</dd>
+ <dt><code>pause</code></dt>
+ <dd>The domain will be paused so that it can be manually resumed
+ when lock issues are solved.</dd>
+ <dt><code>ignore</code></dt>
+ <dd>Keep the domain running as if nothing happened.</dd>
+ </dl>
+
<h3><a name="elementsPowerManagement">Power Management</a></h3>
<p>
<ref name="crashOptions"/>
</element>
</optional>
+ <optional>
+ <element name="on_lockfailure">
+ <ref name="lockfailureOptions"/>
+ </element>
+ </optional>
</interleave>
</define>
<!--
<value>coredump-restart</value>
</choice>
</define>
+ <!--
+ Options when resource locks are lost:
+ poweroff: power off the domain
+ restart: power off the domain and start it up again to reacquire the
+ locks
+ pause: pause the execution of the domain so that it can be manually
+ resumed when lock issues are solved
+ ignore: keep the domain running
+ -->
+ <define name="lockfailureOptions">
+ <choice>
+ <value>poweroff</value>
+ <value>restart</value>
+ <value>pause</value>
+ <value>ignore</value>
+ </choice>
+ </define>
<!--
Control ACPI sleep states (dis)allowed for the domain
For each of the states the following rules apply:
"coredump-destroy",
"coredump-restart")
+VIR_ENUM_IMPL(virDomainLockFailure, VIR_DOMAIN_LOCK_FAILURE_LAST,
+ "default",
+ "poweroff",
+ "restart",
+ "pause",
+ "ignore")
+
VIR_ENUM_IMPL(virDomainPMState, VIR_DOMAIN_PM_STATE_LAST,
"default",
"yes",
virDomainLifecycleCrashTypeFromString) < 0)
goto error;
+ if (virDomainEventActionParseXML(ctxt, "on_lockfailure",
+ "string(./on_lockfailure[1])",
+ &def->onLockFailure,
+ VIR_DOMAIN_LOCK_FAILURE_DEFAULT,
+ virDomainLockFailureTypeFromString) < 0)
+ goto error;
+
if (virDomainPMStateParseXML(ctxt,
"string(./pm/suspend-to-mem/@enabled)",
&def->pm.s3) < 0)
"on_crash",
virDomainLifecycleCrashTypeToString) < 0)
goto cleanup;
+ if (def->onLockFailure != VIR_DOMAIN_LOCK_FAILURE_DEFAULT &&
+ virDomainEventActionDefFormat(buf, def->onLockFailure,
+ "on_lockfailure",
+ virDomainLockFailureTypeToString) < 0)
+ goto cleanup;
if (def->pm.s3 || def->pm.s4) {
virBufferAddLit(buf, " <pm>\n");
VIR_DOMAIN_LIFECYCLE_CRASH_LAST
};
+typedef enum {
+ VIR_DOMAIN_LOCK_FAILURE_DEFAULT,
+ VIR_DOMAIN_LOCK_FAILURE_POWEROFF,
+ VIR_DOMAIN_LOCK_FAILURE_RESTART,
+ VIR_DOMAIN_LOCK_FAILURE_PAUSE,
+ VIR_DOMAIN_LOCK_FAILURE_IGNORE,
+
+ VIR_DOMAIN_LOCK_FAILURE_LAST
+} virDomainLockFailureAction;
+
+VIR_ENUM_DECL(virDomainLockFailure)
+
enum virDomainPMState {
VIR_DOMAIN_PM_STATE_DEFAULT = 0,
VIR_DOMAIN_PM_STATE_ENABLED,
int onPoweroff;
int onCrash;
+ int onLockFailure; /* enum virDomainLockFailureAction */
+
struct {
/* These options are actually type of enum virDomainPMState */
int s3;
virDomainLifecycleTypeToString;
virDomainLiveConfigHelperMethod;
virDomainLoadAllConfigs;
+virDomainLockFailureTypeFromString;
+virDomainLockFailureTypeToString;
virDomainMemballoonModelTypeFromString;
virDomainMemballoonModelTypeToString;
virDomainMemDumpTypeFromString;