[libvirt] [libvirt-java] [PATCH 44/65] events: handle registration for Reboot events

Claudio Bley cbley at av-test.de
Thu Feb 13 15:22:52 UTC 2014


Add RebootListener interface in package org.libvirt.event and
implement addRebootListener methods in classes Domain and Connect.

Add removeRebootListener to Connect class.

Signed-off-by: Claudio Bley <cbley at av-test.de>
---
 src/main/java/org/libvirt/Connect.java             |   41 ++++++++++++++++++++
 src/main/java/org/libvirt/Domain.java              |   17 ++++++++
 .../java/org/libvirt/event/RebootListener.java     |   15 +++++++
 src/main/java/org/libvirt/jna/Libvirt.java         |    4 ++
 4 files changed, 77 insertions(+)
 create mode 100644 src/main/java/org/libvirt/event/RebootListener.java

diff --git a/src/main/java/org/libvirt/Connect.java b/src/main/java/org/libvirt/Connect.java
index 5637337..bbbd000 100644
--- a/src/main/java/org/libvirt/Connect.java
+++ b/src/main/java/org/libvirt/Connect.java
@@ -18,6 +18,7 @@ import org.libvirt.jna.StorageVolPointer;
 import org.libvirt.jna.StreamPointer;
 import org.libvirt.jna.virConnectAuth;
 import org.libvirt.jna.virNodeInfo;
+import org.libvirt.event.*;
 
 import static org.libvirt.Library.libvirt;
 import static org.libvirt.Library.getConstant;
@@ -455,6 +456,46 @@ public class Connect {
         domainEventRegister(null, l);
     }
 
+    void domainEventRegister(Domain domain, final RebootListener cb) throws LibvirtException {
+        if (cb == null)
+            throw new IllegalArgumentException("RebootCallback cannot be null");
+
+        Libvirt.VirConnectDomainEventGenericCallback virCB = new Libvirt.VirConnectDomainEventGenericCallback() {
+                @Override
+                public void eventCallback(ConnectionPointer virConnectPtr,
+                                          DomainPointer virDomainPointer,
+                                          Pointer opaque) {
+                    assert VCP.equals(virConnectPtr);
+
+                    try {
+                        Domain d = Domain.constructIncRef(Connect.this, virDomainPointer);
+                        cb.onReboot(d);
+                    } catch (LibvirtException e) {
+                        throw new RuntimeException("libvirt error in reboot callback", e);
+                    }
+                }
+            };
+
+        domainEventRegister(domain, DomainEventID.REBOOT, virCB, cb);
+    }
+
+    /**
+     * Adds the specified reboot listener to receive reboot events for
+     * domains of this connection.
+     *
+     * @param l   the reboot listener
+     * @throws    LibvirtException on failure
+     *
+     * @see Domain#addRebootListener
+     * @see <a
+     *       href="http://www.libvirt.org/html/libvirt-libvirt.html#virConnectDomainEventRegisterAny"
+     *      >virConnectDomainEventRegisterAny</a>
+     * @since 1.5.2
+     */
+    public void addRebootListener(final RebootListener l) throws LibvirtException {
+        domainEventRegister(null, l);
+    }
+
     /**
      * Removes the specified I/O error listener so that it no longer
      * receives I/O error events.
diff --git a/src/main/java/org/libvirt/Domain.java b/src/main/java/org/libvirt/Domain.java
index f37f299..010fee0 100644
--- a/src/main/java/org/libvirt/Domain.java
+++ b/src/main/java/org/libvirt/Domain.java
@@ -13,6 +13,7 @@ import org.libvirt.jna.virDomainJobInfo;
 import org.libvirt.jna.virDomainMemoryStats;
 import org.libvirt.jna.virSchedParameter;
 import org.libvirt.jna.virVcpuInfo;
+import org.libvirt.event.RebootListener;
 import static org.libvirt.Library.libvirt;
 import static org.libvirt.ErrorHandler.processError;
 import static org.libvirt.ErrorHandler.processErrorIfZero;
@@ -1047,6 +1048,22 @@ public class Domain {
     }
 
     /**
+     * Adds the specified listener to receive reboot events for this domain.
+     *
+     * @param  l   the reboot listener
+     * @throws     LibvirtException on failure
+     *
+     * @see Connect#addRebootListener
+     * @see <a
+     *       href="http://www.libvirt.org/html/libvirt-libvirt.html#virConnectDomainEventRegisterAny"
+     *      >virConnectDomainEventRegisterAny</a>
+     * @since 1.5.2
+     */
+    public void addRebootListener(final RebootListener l) throws LibvirtException {
+        virConnect.domainEventRegister(this, l);
+    }
+
+    /**
      * Revert the domain to a given snapshot.
      *
      * @see <a href=
diff --git a/src/main/java/org/libvirt/event/RebootListener.java b/src/main/java/org/libvirt/event/RebootListener.java
new file mode 100644
index 0000000..1b440c0
--- /dev/null
+++ b/src/main/java/org/libvirt/event/RebootListener.java
@@ -0,0 +1,15 @@
+package org.libvirt.event;
+
+import org.libvirt.Domain;
+
+/**
+ * Interface for receiving domain reboot events.
+ */
+public interface RebootListener extends EventListener {
+    /**
+     * This method gets called upon a domain reboot event.
+     *
+     * @param domain   the domain which was rebooted
+     */
+    void onReboot(Domain domain);
+}
diff --git a/src/main/java/org/libvirt/jna/Libvirt.java b/src/main/java/org/libvirt/jna/Libvirt.java
index 0e36251..913fe08 100644
--- a/src/main/java/org/libvirt/jna/Libvirt.java
+++ b/src/main/java/org/libvirt/jna/Libvirt.java
@@ -85,6 +85,10 @@ public interface Libvirt extends Library {
                            Pointer opaque);
     }
 
+    interface VirConnectDomainEventGenericCallback extends VirDomainEventCallback {
+        void eventCallback(ConnectionPointer virConnectPtr, DomainPointer virDomainPointer, Pointer opaque);
+    }
+
     /**
      * Error callback
      */
-- 
1.7.9.5




More information about the libvir-list mailing list