[Libvirt-cim] [PATCH 2/2] ComputerSystem: Reboot/Shutdown state changes as jobs
Eduardo Lima (Etrunko)
eblima at linux.vnet.ibm.com
Thu Feb 23 13:29:19 UTC 2012
On 02/20/2012 05:43 PM, Eduardo Lima (Etrunko) wrote:
> From: "Eduardo Lima (Etrunko)" <eblima at br.ibm.com>
>
> For Reboot and Shutdown, th RequestStateChange method returns immediately with
> return code 0 (successful) even though the state change is still not completed.
>
> According to the DMTF specification DSP1052 (Computer System Profile) the
> RequestStateChange() method should return 0x1000 and a corresponding job
> reference in the return parameters which can be polled for completion.
>
> Signed-off-by: Eduardo Lima (Etrunko) <eblima at br.ibm.com>
> ---
> schema/ComputerSystem.mof | 9 ++
> src/Virt_ComputerSystem.c | 300 +++++++++++++++++++++++++++++++++++++++++++--
> 2 files changed, 299 insertions(+), 10 deletions(-)
>
> diff --git a/schema/ComputerSystem.mof b/schema/ComputerSystem.mof
> index 10cb8c4..886c085 100644
> --- a/schema/ComputerSystem.mof
> +++ b/schema/ComputerSystem.mof
> @@ -1,5 +1,14 @@
> // Copyright IBM Corp. 2007
>
> +class Xen_ComputerSystemStateChangeJob : CIM_ConcreteJob {
> +};
> +
> +class KVM_ComputerSystemStateChangeJob : CIM_ConcreteJob {
> +};
> +
> +class LXC_ComputerSystemStateChangeJob : CIM_ConcreteJob {
> +};
> +
> [Description (
> "A class derived from CIM_ComputerSystem to represent "
> "the Xen virtual machines/domains running on the system."),
> diff --git a/src/Virt_ComputerSystem.c b/src/Virt_ComputerSystem.c
> index e6c7e55..dee4ef7 100644
> --- a/src/Virt_ComputerSystem.c
> +++ b/src/Virt_ComputerSystem.c
> @@ -30,23 +30,40 @@
> #include <cmpift.h>
> #include <cmpimacs.h>
>
> +#include <uuid.h>
> #include <libvirt/libvirt.h>
> +#include <libvirt/virterror.h>
>
> -#include "cs_util.h"
> #include <libcmpiutil/libcmpiutil.h>
> -#include "misc_util.h"
> -#include "infostore.h"
> -#include "device_parsing.h"
> #include <libcmpiutil/std_invokemethod.h>
> #include <libcmpiutil/std_instance.h>
> #include <libcmpiutil/std_indication.h>
>
> +#include "cs_util.h"
> +#include "misc_util.h"
> +#include "infostore.h"
> +#include "device_parsing.h"
> +#include "svpc_types.h"
> +
> #include "Virt_ComputerSystem.h"
> #include "Virt_HostSystem.h"
> #include "Virt_VirtualSystemSnapshotService.h"
>
> +
> const static CMPIBroker *_BROKER;
>
> +typedef struct _state_change_job state_change_job_t;
> +struct _state_change_job {
> + char uuid[VIR_UUID_STRING_BUFLEN];
> + CMPIContext *context;
> + CMPIObjectPath *obj_path;
> + char *dom_name;
> + uint16_t dom_state;
> + uint16_t status; /* job status */
> +};
> +
> +static bool events_registered = false;
> +
> /* Set the "Name" property of an instance from a domain */
> static int set_name_from_dom(virDomainPtr dom, CMPIInstance *instance)
> {
> @@ -1189,19 +1206,20 @@ static CMPIStatus __state_change(const char *name,
> s = state_change_enable(dom, &info);
> else if (state == CIM_STATE_DISABLED)
> s = state_change_disable(dom, &info);
> - else if (state == CIM_STATE_SHUTDOWN)
> - s = state_change_shutdown(dom, &info);
> else if (state == CIM_STATE_PAUSED)
> s = state_change_pause(dom, &info);
> - else if (state == CIM_STATE_REBOOT)
> - s = state_change_reboot(dom, &info);
> else if (state == CIM_STATE_RESET)
> s = state_change_reset(dom, &info);
> + else if (state == CIM_STATE_SHUTDOWN || state == CIM_STATE_REBOOT)
> + s.rc = CIM_SVPC_RETURN_JOB_STARTED;
> else
> cu_statusf(_BROKER, &s,
> CMPI_RC_ERR_NOT_SUPPORTED,
> "State not supported");
>
> + if (s.rc != CMPI_RC_OK || s.rc != CIM_SVPC_RETURN_JOB_STARTED)
> + goto out;
> +
This block is wrong, should be && instead of ||.
Best regards, Eduardo
--
Eduardo de Barros Lima
Software Engineer, Open Virtualization
Linux Technology Center - IBM/Brazil
eblima at br.ibm.com
More information about the Libvirt-cim
mailing list