[libvirt] [PATCH] storage: Add new events for *PoolBuild() and *PoolDelete().

Julio Faracco posted 1 patch 6 years, 7 months ago
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/libvirt tags/patchew/1504969789-4811-1-git-send-email-jcfaracco@gmail.com
examples/object-events/event-test.c |  4 ++++
include/libvirt/libvirt-storage.h   |  2 ++
src/storage/storage_driver.c        | 17 +++++++++++++++++
src/test/test_driver.c              | 14 ++++++++++++++
tools/virsh-pool.c                  |  4 +++-
5 files changed, 40 insertions(+), 1 deletion(-)
[libvirt] [PATCH] storage: Add new events for *PoolBuild() and *PoolDelete().
Posted by Julio Faracco 6 years, 7 months ago
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>
---
 examples/object-events/event-test.c |  4 ++++
 include/libvirt/libvirt-storage.h   |  2 ++
 src/storage/storage_driver.c        | 17 +++++++++++++++++
 src/test/test_driver.c              | 14 ++++++++++++++
 tools/virsh-pool.c                  |  4 +++-
 5 files changed, 40 insertions(+), 1 deletion(-)

diff --git a/examples/object-events/event-test.c b/examples/object-events/event-test.c
index 78d2008..a144638 100644
--- a/examples/object-events/event-test.c
+++ b/examples/object-events/event-test.c
@@ -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;
     }
diff --git a/include/libvirt/libvirt-storage.h b/include/libvirt/libvirt-storage.h
index 4517f71..736e2e3 100644
--- a/include/libvirt/libvirt-storage.h
+++ b/include/libvirt/libvirt-storage.h
@@ -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
diff --git a/src/storage/storage_driver.c b/src/storage/storage_driver.c
index 7cf5943..5e50415 100644
--- a/src/storage/storage_driver.c
+++ b/src/storage/storage_driver.c
@@ -959,6 +959,7 @@ storagePoolBuild(virStoragePoolPtr pool,
 {
     virStoragePoolObjPtr obj;
     virStorageBackendPtr backend;
+    virObjectEventPtr event = NULL;
     int ret = -1;
 
     if (!(obj = virStoragePoolObjFromStoragePool(pool)))
@@ -980,9 +981,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;
 }
@@ -1062,6 +1071,7 @@ storagePoolDelete(virStoragePoolPtr pool,
 {
     virStoragePoolObjPtr obj;
     virStorageBackendPtr backend;
+    virObjectEventPtr event = NULL;
     char *stateFile = NULL;
     int ret = -1;
 
@@ -1106,9 +1116,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;
 }
diff --git a/src/test/test_driver.c b/src/test/test_driver.c
index aa38f54..0a2cde7 100644
--- a/src/test/test_driver.c
+++ b/src/test/test_driver.c
@@ -4562,13 +4562,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;
 }
 
@@ -4653,12 +4660,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;
 }
diff --git a/tools/virsh-pool.c b/tools/virsh-pool.c
index ba9281f..558461b 100644
--- a/tools/virsh-pool.c
+++ b/tools/virsh-pool.c
@@ -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)
-- 
2.7.4

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH] storage: Add new events for *PoolBuild() and *PoolDelete().
Posted by Michal Privoznik 6 years, 7 months ago
On 09/09/2017 05:09 PM, Julio Faracco wrote:
> 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>
> ---
>  examples/object-events/event-test.c |  4 ++++
>  include/libvirt/libvirt-storage.h   |  2 ++
>  src/storage/storage_driver.c        | 17 +++++++++++++++++
>  src/test/test_driver.c              | 14 ++++++++++++++
>  tools/virsh-pool.c                  |  4 +++-
>  5 files changed, 40 insertions(+), 1 deletion(-)

Looking good. Before pushing I'm adding two test cases to objecteventtest.

ACKed and pushed.

Michal

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list