Pass source VM UUID (if known) to backend

Some backends (not yet implemented) which talk to management
layers will have mappings for what VMs can control what other
VMs.  So, the source VM UUID of the original request needs to
be sent along with the target VM UUID to the management layer
for arbitration.

Signed-off-by: Lon Hohberger <lon@users.sourceforge.net>
This commit is contained in:
Lon Hohberger 2010-01-13 13:52:55 -05:00
parent c8f8fc2900
commit 2635e075b9
7 changed files with 37 additions and 31 deletions

View File

@ -1,6 +1,6 @@
/* */ /* */
#define PLUGIN_VERSION_LISTENER ((double)0.1) #define PLUGIN_VERSION_LISTENER ((double)0.2)
#define PLUGIN_VERSION_BACKEND ((double)0.1) #define PLUGIN_VERSION_BACKEND ((double)0.2)
#define LISTENER_VER_SYM listener_plugin_version #define LISTENER_VER_SYM listener_plugin_version
#define BACKEND_VER_SYM backend_plugin_version #define BACKEND_VER_SYM backend_plugin_version
@ -26,18 +26,18 @@ typedef int (*fence_null_callback)(const char *vm_name,
/* Turn the VM 'off'. Returns 0 to caller if successful or /* Turn the VM 'off'. Returns 0 to caller if successful or
nonzero if unsuccessful. */ nonzero if unsuccessful. */
typedef int (*fence_off_callback)(const char *vm_name, uint32_t seqno, typedef int (*fence_off_callback)(const char *vm_name, const char *src,
void *priv); uint32_t seqno, void *priv);
/* Turn the VM 'on'. Returns 0 to caller if successful or /* Turn the VM 'on'. Returns 0 to caller if successful or
nonzero if unsuccessful. */ nonzero if unsuccessful. */
typedef int (*fence_on_callback)(const char *vm_name, uint32_t seqno, typedef int (*fence_on_callback)(const char *vm_name, const char *src,
void *priv); uint32_t seqno, void *priv);
/* Reboot a VM. Returns 0 to caller if successful or /* Reboot a VM. Returns 0 to caller if successful or
nonzero if unsuccessful. */ nonzero if unsuccessful. */
typedef int (*fence_reboot_callback)(const char *vm_name, uint32_t seqno, typedef int (*fence_reboot_callback)(const char *vm_name, const char *src,
void *priv); uint32_t seqno, void *priv);
/* Get status of a VM. Returns 0 to caller if VM is alive or /* Get status of a VM. Returns 0 to caller if VM is alive or
nonzero if VM is not alive. */ nonzero if VM is not alive. */

View File

@ -602,7 +602,8 @@ checkpoint_null(const char *vm_name, void *priv)
static int static int
checkpoint_off(const char *vm_name, uint32_t seqno, void *priv) checkpoint_off(const char *vm_name, const char *src,
uint32_t seqno, void *priv)
{ {
VALIDATE(priv); VALIDATE(priv);
printf("[CKPT] OFF operation on %s seq %d\n", vm_name, seqno); printf("[CKPT] OFF operation on %s seq %d\n", vm_name, seqno);
@ -612,7 +613,8 @@ checkpoint_off(const char *vm_name, uint32_t seqno, void *priv)
static int static int
checkpoint_on(const char *vm_name, uint32_t seqno, void *priv) checkpoint_on(const char *vm_name, const char *src,
uint32_t seqno, void *priv)
{ {
VALIDATE(priv); VALIDATE(priv);
printf("[CKPT] ON operation on %s seq %d\n", vm_name, seqno); printf("[CKPT] ON operation on %s seq %d\n", vm_name, seqno);
@ -642,7 +644,8 @@ checkpoint_status(const char *vm_name, void *priv)
static int static int
checkpoint_reboot(const char *vm_name, uint32_t seqno, void *priv) checkpoint_reboot(const char *vm_name, const char *src,
uint32_t seqno, void *priv)
{ {
VALIDATE(priv); VALIDATE(priv);
printf("[CKPT] REBOOT operation on %s seq %d\n", vm_name, seqno); printf("[CKPT] REBOOT operation on %s seq %d\n", vm_name, seqno);

View File

@ -176,7 +176,7 @@ lq_null(const char *vm_name, void *priv)
static int static int
lq_off(const char *vm_name, uint32_t seqno, void *priv) lq_off(const char *vm_name, const char *src, uint32_t seqno, void *priv)
{ {
VALIDATE(priv); VALIDATE(priv);
printf("[libvirt-qpid] OFF operation on %s\n", vm_name); printf("[libvirt-qpid] OFF operation on %s\n", vm_name);
@ -188,7 +188,7 @@ lq_off(const char *vm_name, uint32_t seqno, void *priv)
static int static int
lq_on(const char *vm_name, uint32_t seqno, void *priv) lq_on(const char *vm_name, const char *src, uint32_t seqno, void *priv)
{ {
VALIDATE(priv); VALIDATE(priv);
printf("[libvirt-qpid] ON operation on %s\n", vm_name); printf("[libvirt-qpid] ON operation on %s\n", vm_name);
@ -218,15 +218,15 @@ lq_status(const char *vm_name, void *priv)
static int static int
lq_reboot(const char *vm_name, uint32_t seqno, void *priv) lq_reboot(const char *vm_name, const char *src, uint32_t seqno, void *priv)
{ {
VALIDATE(priv); VALIDATE(priv);
printf("[libvirt-qpid] REBOOT operation on %s\n", vm_name); printf("[libvirt-qpid] REBOOT operation on %s\n", vm_name);
if (lq_off(vm_name, seqno, priv) != 0) if (lq_off(vm_name, src, seqno, priv) != 0)
return 1; return 1;
sleep(1); sleep(1);
lq_on(vm_name, seqno, priv); lq_on(vm_name, src, seqno, priv);
return 1; return 1;
} }

View File

@ -149,7 +149,8 @@ libvirt_null(const char *vm_name, void *priv)
static int static int
libvirt_off(const char *vm_name, uint32_t seqno, void *priv) libvirt_off(const char *vm_name, const char *src,
uint32_t seqno, void *priv)
{ {
struct libvirt_info *info = (struct libvirt_info *)priv; struct libvirt_info *info = (struct libvirt_info *)priv;
virDomainPtr vdp; virDomainPtr vdp;
@ -198,7 +199,8 @@ libvirt_off(const char *vm_name, uint32_t seqno, void *priv)
static int static int
libvirt_on(const char *vm_name, uint32_t seqno, void *priv) libvirt_on(const char *vm_name, const char *src,
uint32_t seqno, void *priv)
{ {
struct libvirt_info *info = (struct libvirt_info *)priv; struct libvirt_info *info = (struct libvirt_info *)priv;
virDomainPtr vdp; virDomainPtr vdp;
@ -288,7 +290,8 @@ libvirt_status(const char *vm_name, void *priv)
static int static int
libvirt_reboot(const char *vm_name, uint32_t seqno, void *priv) libvirt_reboot(const char *vm_name, const char *src,
uint32_t seqno, void *priv)
{ {
struct libvirt_info *info = (struct libvirt_info *)priv; struct libvirt_info *info = (struct libvirt_info *)priv;
virDomainPtr vdp, nvdp; virDomainPtr vdp, nvdp;

View File

@ -250,15 +250,15 @@ do_fence_request_tcp(fence_req_t *req, mcast_info *info)
response = info->cb->null((char *)req->domain, info->priv); response = info->cb->null((char *)req->domain, info->priv);
break; break;
case FENCE_ON: case FENCE_ON:
response = info->cb->on((char *)req->domain, req->seqno, response = info->cb->on((char *)req->domain, NULL, req->seqno,
info->priv); info->priv);
break; break;
case FENCE_OFF: case FENCE_OFF:
response = info->cb->off((char *)req->domain, req->seqno, response = info->cb->off((char *)req->domain, NULL, req->seqno,
info->priv); info->priv);
break; break;
case FENCE_REBOOT: case FENCE_REBOOT:
response = info->cb->reboot((char *)req->domain, req->seqno, response = info->cb->reboot((char *)req->domain, NULL, req->seqno,
info->priv); info->priv);
break; break;
case FENCE_STATUS: case FENCE_STATUS:

View File

@ -61,7 +61,7 @@ null_null(const char *vm_name, void *priv)
static int static int
null_off(const char *vm_name, uint32_t seqno, void *priv) null_off(const char *vm_name, const char *src, uint32_t seqno, void *priv)
{ {
VALIDATE(priv); VALIDATE(priv);
printf("[Null] OFF operation on %s\n", vm_name); printf("[Null] OFF operation on %s\n", vm_name);
@ -71,7 +71,7 @@ null_off(const char *vm_name, uint32_t seqno, void *priv)
static int static int
null_on(const char *vm_name, uint32_t seqno, void *priv) null_on(const char *vm_name, const char *src, uint32_t seqno, void *priv)
{ {
VALIDATE(priv); VALIDATE(priv);
printf("[Null] ON operation on %s\n", vm_name); printf("[Null] ON operation on %s\n", vm_name);
@ -103,7 +103,7 @@ null_status(const char *vm_name, void *priv)
static int static int
null_reboot(const char *vm_name, uint32_t seqno, void *priv) null_reboot(const char *vm_name, const char *src, uint32_t seqno, void *priv)
{ {
VALIDATE(priv); VALIDATE(priv);
printf("[Null] REBOOT operation on %s\n", vm_name); printf("[Null] REBOOT operation on %s\n", vm_name);

View File

@ -178,8 +178,8 @@ do_fence_request(int fd, const char *src, serial_req_t *req, serial_info *info)
response = RESP_PERM; response = RESP_PERM;
break; break;
} }
response = info->cb->on((char *)req->domain, req->seqno, response = info->cb->on((char *)req->domain, src,
info->priv); req->seqno, info->priv);
break; break;
case FENCE_OFF: case FENCE_OFF:
if (static_map_check(info->maps, src, if (static_map_check(info->maps, src,
@ -187,8 +187,8 @@ do_fence_request(int fd, const char *src, serial_req_t *req, serial_info *info)
response = RESP_PERM; response = RESP_PERM;
break; break;
} }
response = info->cb->off((char *)req->domain, req->seqno, response = info->cb->off((char *)req->domain, src,
info->priv); req->seqno, info->priv);
break; break;
case FENCE_REBOOT: case FENCE_REBOOT:
if (static_map_check(info->maps, src, if (static_map_check(info->maps, src,
@ -196,8 +196,8 @@ do_fence_request(int fd, const char *src, serial_req_t *req, serial_info *info)
response = RESP_PERM; response = RESP_PERM;
break; break;
} }
response = info->cb->reboot((char *)req->domain, req->seqno, response = info->cb->reboot((char *)req->domain, src,
info->priv); req->seqno, info->priv);
break; break;
case FENCE_STATUS: case FENCE_STATUS:
response = info->cb->status((char *)req->domain, info->priv); response = info->cb->status((char *)req->domain, info->priv);