mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-22 05:35:25 +00:00
storage: Add new events for *PoolBuild() and *PoolDelete().
This commit adds new events for two methods and operations: *PoolBuild() and *PoolDelete(). Using the event-test and the commands set below we have the following outputs: $ sudo ./event-test Registering event callbacks myStoragePoolEventCallback EVENT: Storage pool test Defined 0 myStoragePoolEventCallback EVENT: Storage pool test Created 0 myStoragePoolEventCallback EVENT: Storage pool test Started 0 myStoragePoolEventCallback EVENT: Storage pool test Stopped 0 myStoragePoolEventCallback EVENT: Storage pool test Deleted 0 myStoragePoolEventCallback EVENT: Storage pool test Undefined 0 Another terminal: $ sudo virsh pool-define test.xml Pool test defined from test.xml $ sudo virsh pool-build test Pool test built $ sudo virsh pool-start test Pool test started $ sudo virsh pool-destroy test Pool test destroyed $ sudo virsh pool-delete test Pool test deleted $ sudo virsh pool-undefine test Pool test has been undefined This commits can be a solution for RHBZ #1475227. Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1475227 Signed-off-by: Julio Faracco <jcfaracco@gmail.com> Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
This commit is contained in:
parent
0dde16be73
commit
b06521928c
@ -356,6 +356,10 @@ storagePoolEventToString(int event)
|
||||
return "Started";
|
||||
case VIR_STORAGE_POOL_EVENT_STOPPED:
|
||||
return "Stopped";
|
||||
case VIR_STORAGE_POOL_EVENT_CREATED:
|
||||
return "Created";
|
||||
case VIR_STORAGE_POOL_EVENT_DELETED:
|
||||
return "Deleted";
|
||||
case VIR_STORAGE_POOL_EVENT_LAST:
|
||||
break;
|
||||
}
|
||||
|
@ -465,6 +465,8 @@ typedef enum {
|
||||
VIR_STORAGE_POOL_EVENT_UNDEFINED = 1,
|
||||
VIR_STORAGE_POOL_EVENT_STARTED = 2,
|
||||
VIR_STORAGE_POOL_EVENT_STOPPED = 3,
|
||||
VIR_STORAGE_POOL_EVENT_CREATED = 4,
|
||||
VIR_STORAGE_POOL_EVENT_DELETED = 5,
|
||||
|
||||
# ifdef VIR_ENUM_SENTINELS
|
||||
VIR_STORAGE_POOL_EVENT_LAST
|
||||
|
@ -956,6 +956,7 @@ storagePoolBuild(virStoragePoolPtr pool,
|
||||
{
|
||||
virStoragePoolObjPtr obj;
|
||||
virStorageBackendPtr backend;
|
||||
virObjectEventPtr event = NULL;
|
||||
int ret = -1;
|
||||
|
||||
if (!(obj = virStoragePoolObjFromStoragePool(pool)))
|
||||
@ -977,9 +978,17 @@ storagePoolBuild(virStoragePoolPtr pool,
|
||||
if (backend->buildPool &&
|
||||
backend->buildPool(pool->conn, obj, flags) < 0)
|
||||
goto cleanup;
|
||||
|
||||
event = virStoragePoolEventLifecycleNew(obj->def->name,
|
||||
obj->def->uuid,
|
||||
VIR_STORAGE_POOL_EVENT_CREATED,
|
||||
0);
|
||||
|
||||
ret = 0;
|
||||
|
||||
cleanup:
|
||||
if (event)
|
||||
virObjectEventStateQueue(driver->storageEventState, event);
|
||||
virStoragePoolObjUnlock(obj);
|
||||
return ret;
|
||||
}
|
||||
@ -1059,6 +1068,7 @@ storagePoolDelete(virStoragePoolPtr pool,
|
||||
{
|
||||
virStoragePoolObjPtr obj;
|
||||
virStorageBackendPtr backend;
|
||||
virObjectEventPtr event = NULL;
|
||||
char *stateFile = NULL;
|
||||
int ret = -1;
|
||||
|
||||
@ -1103,9 +1113,16 @@ storagePoolDelete(virStoragePoolPtr pool,
|
||||
if (backend->deletePool(pool->conn, obj, flags) < 0)
|
||||
goto cleanup;
|
||||
|
||||
event = virStoragePoolEventLifecycleNew(obj->def->name,
|
||||
obj->def->uuid,
|
||||
VIR_STORAGE_POOL_EVENT_DELETED,
|
||||
0);
|
||||
|
||||
ret = 0;
|
||||
|
||||
cleanup:
|
||||
if (event)
|
||||
virObjectEventStateQueue(driver->storageEventState, event);
|
||||
virStoragePoolObjUnlock(obj);
|
||||
return ret;
|
||||
}
|
||||
|
@ -4584,13 +4584,20 @@ testStoragePoolBuild(virStoragePoolPtr pool,
|
||||
{
|
||||
testDriverPtr privconn = pool->conn->privateData;
|
||||
virStoragePoolObjPtr obj;
|
||||
virObjectEventPtr event = NULL;
|
||||
|
||||
virCheckFlags(0, -1);
|
||||
|
||||
if (!(obj = testStoragePoolObjFindInactiveByName(privconn, pool->name)))
|
||||
return -1;
|
||||
|
||||
event = virStoragePoolEventLifecycleNew(pool->name, pool->uuid,
|
||||
VIR_STORAGE_POOL_EVENT_CREATED,
|
||||
0);
|
||||
|
||||
virStoragePoolObjUnlock(obj);
|
||||
|
||||
testObjectEventQueue(privconn, event);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -4675,12 +4682,19 @@ testStoragePoolDelete(virStoragePoolPtr pool,
|
||||
{
|
||||
testDriverPtr privconn = pool->conn->privateData;
|
||||
virStoragePoolObjPtr obj;
|
||||
virObjectEventPtr event = NULL;
|
||||
|
||||
virCheckFlags(0, -1);
|
||||
|
||||
if (!(obj = testStoragePoolObjFindInactiveByName(privconn, pool->name)))
|
||||
return -1;
|
||||
|
||||
event = virStoragePoolEventLifecycleNew(pool->name, pool->uuid,
|
||||
VIR_STORAGE_POOL_EVENT_DELETED,
|
||||
0);
|
||||
|
||||
testObjectEventQueue(privconn, event);
|
||||
|
||||
virStoragePoolObjUnlock(obj);
|
||||
return 0;
|
||||
}
|
||||
|
@ -167,6 +167,10 @@ storagePoolLifecycleCb(virConnectPtr conn ATTRIBUTE_UNUSED,
|
||||
counter->defineEvents++;
|
||||
else if (event == VIR_STORAGE_POOL_EVENT_UNDEFINED)
|
||||
counter->undefineEvents++;
|
||||
else if (event == VIR_STORAGE_POOL_EVENT_CREATED)
|
||||
counter->createdEvents++;
|
||||
else if (event == VIR_STORAGE_POOL_EVENT_DELETED)
|
||||
counter->deletedEvents++;
|
||||
}
|
||||
|
||||
static void
|
||||
@ -722,6 +726,69 @@ testStoragePoolStartStopEvent(const void *data)
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int
|
||||
testStoragePoolBuild(const void *data)
|
||||
{
|
||||
const objecteventTest *test = data;
|
||||
lifecycleEventCounter counter;
|
||||
int id;
|
||||
int ret = 0;
|
||||
|
||||
lifecycleEventCounter_reset(&counter);
|
||||
|
||||
id = virConnectStoragePoolEventRegisterAny(test->conn, NULL,
|
||||
VIR_STORAGE_POOL_EVENT_ID_LIFECYCLE,
|
||||
VIR_STORAGE_POOL_EVENT_CALLBACK(&storagePoolLifecycleCb),
|
||||
&counter, NULL);
|
||||
|
||||
virStoragePoolBuild(test->pool, 0);
|
||||
|
||||
if (virEventRunDefaultImpl() < 0) {
|
||||
ret = -1;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
if (counter.createdEvents != 1) {
|
||||
ret = -1;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
cleanup:
|
||||
virConnectStoragePoolEventDeregisterAny(test->conn, id);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int
|
||||
testStoragePoolDelete(const void *data)
|
||||
{
|
||||
const objecteventTest *test = data;
|
||||
lifecycleEventCounter counter;
|
||||
int id;
|
||||
int ret = 0;
|
||||
|
||||
lifecycleEventCounter_reset(&counter);
|
||||
|
||||
id = virConnectStoragePoolEventRegisterAny(test->conn, NULL,
|
||||
VIR_STORAGE_POOL_EVENT_ID_LIFECYCLE,
|
||||
VIR_STORAGE_POOL_EVENT_CALLBACK(&storagePoolLifecycleCb),
|
||||
&counter, NULL);
|
||||
|
||||
virStoragePoolDelete(test->pool, 0);
|
||||
|
||||
if (virEventRunDefaultImpl() < 0) {
|
||||
ret = -1;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
if (counter.deletedEvents != 1) {
|
||||
ret = -1;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
cleanup:
|
||||
virConnectStoragePoolEventDeregisterAny(test->conn, id);
|
||||
return ret;
|
||||
}
|
||||
static int
|
||||
testNodeDeviceCreateXML(const void *data)
|
||||
{
|
||||
@ -831,6 +898,13 @@ mymain(void)
|
||||
if (virTestRun("Storage pool start stop events ",
|
||||
testStoragePoolStartStopEvent, &test) < 0)
|
||||
ret = EXIT_FAILURE;
|
||||
/* Storage pool build and delete events */
|
||||
if (virTestRun("Storage pool build event ",
|
||||
testStoragePoolBuild, &test) < 0)
|
||||
ret = EXIT_FAILURE;
|
||||
if (virTestRun("Storage pool delete event ",
|
||||
testStoragePoolDelete, &test) < 0)
|
||||
ret = EXIT_FAILURE;
|
||||
|
||||
/* Node device event tests */
|
||||
if (virTestRun("Node device createXML add event ",
|
||||
|
@ -1952,7 +1952,9 @@ VIR_ENUM_IMPL(virshPoolEvent,
|
||||
N_("Defined"),
|
||||
N_("Undefined"),
|
||||
N_("Started"),
|
||||
N_("Stopped"))
|
||||
N_("Stopped"),
|
||||
N_("Created"),
|
||||
N_("Deleted"))
|
||||
|
||||
static const char *
|
||||
virshPoolEventToString(int event)
|
||||
|
Loading…
Reference in New Issue
Block a user