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>
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;
}
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
{
virStoragePoolObjPtr obj;
virStorageBackendPtr backend;
+ virObjectEventPtr event = NULL;
int ret = -1;
if (!(obj = virStoragePoolObjFromStoragePool(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;
}
{
virStoragePoolObjPtr obj;
virStorageBackendPtr backend;
+ virObjectEventPtr event = NULL;
char *stateFile = NULL;
int ret = -1;
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;
}
{
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;
}
{
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;
}
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
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)
{
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 ",
N_("Defined"),
N_("Undefined"),
N_("Started"),
- N_("Stopped"))
+ N_("Stopped"),
+ N_("Created"),
+ N_("Deleted"))
static const char *
virshPoolEventToString(int event)