[libvirt] [PATCH] QoS: make tc filters match all traffic
by Antoni S. Puimedon
Up until now the traffic control filters for the vNIC QoS were
matching only ip traffic. For egress traffic that was unnoticed
because the unmatched traffic would just go to the default htb class
and be shaped anyway. For ingress, though, since the policing of the
rate is done by the filter itself.
The problem is solved by changing protocol to all and making anything
match the filter.
Bug-Url: https://bugzilla.redhat.com/1084444
Signed-off-by: Antoni S. Puimedon <asegurap(a)redhat.com>
---
src/util/virnetdevbandwidth.c | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/src/util/virnetdevbandwidth.c b/src/util/virnetdevbandwidth.c
index b06ed4c..1e00116 100644
--- a/src/util/virnetdevbandwidth.c
+++ b/src/util/virnetdevbandwidth.c
@@ -193,7 +193,7 @@ virNetDevBandwidthSet(const char *ifname,
virCommandFree(cmd);
cmd = virCommandNew(TC);
virCommandAddArgList(cmd, "filter", "add", "dev", ifname, "parent",
- "1:0", "protocol", "ip", "handle", "1", "fw",
+ "1:0", "protocol", "all", "handle", "1", "fw",
"flowid", "1", NULL);
if (virCommandRun(cmd, NULL) < 0)
@@ -221,9 +221,10 @@ virNetDevBandwidthSet(const char *ifname,
virCommandFree(cmd);
cmd = virCommandNew(TC);
+ /* Set filter to match all ingress traffic */
virCommandAddArgList(cmd, "filter", "add", "dev", ifname, "parent",
- "ffff:", "protocol", "ip", "u32", "match", "ip",
- "src", "0.0.0.0/0", "police", "rate", average,
+ "ffff:", "protocol", "all", "u32", "match", "u32",
+ "0", "0", "police", "rate", average,
"burst", burst, "mtu", "64kb", "drop", "flowid",
":1", NULL);
--
1.9.0
10 years, 7 months
[libvirt] [PATCH] maint: Correctly detect wether "gluster" cli tool is accessible
by Peter Krempa
The configure definition previously always defined the GLUSTER_CLI macro
and thus the code needing it wasn't compiled out if the tool wasn't
accessible.
---
configure.ac | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/configure.ac b/configure.ac
index e68f5f6..fa07cfd 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1938,9 +1938,11 @@ AM_CONDITIONAL([WITH_STORAGE_GLUSTER], [test "$with_storage_gluster" = "yes"])
if test "$with_storage_fs" = "yes" ||
test "$with_storage_gluster" = "yes"; then
- AC_PATH_PROG([GLUSTER_CLI], [gluster], [], [$PATH:/sbin:/usr/sbin])
- AC_DEFINE_UNQUOTED([GLUSTER_CLI], ["$GLUSTER_CLI"],
- [Location or name of the gluster command line tool])
+ AC_PATH_PROG([GLUSTER_CLI], [gluster], [no], [$PATH:/sbin:/usr/sbin])
+ if test "x$GLUSTER_CLI" != "xno"; then
+ AC_DEFINE_UNQUOTED([GLUSTER_CLI], ["$GLUSTER_CLI"],
+ [Location or name of the gluster command line tool])
+ fi
fi
LIBPARTED_CFLAGS=
--
1.9.1
10 years, 7 months
[libvirt] [PATCH] -Added autocloseable to connect class (set close() return type to void so to adapt it to the autocloseable interface)
by phate867@gmail.com
From: pasquale <pasquale@pasquale-VPCEB1A4E>
-Added the following bindings:
--virDomainGetCpuStats
--virNodeGetCpuStats
--virDomainShutdownFlags
--virDomainDestroyFlags
-Added following classes
--org/libvirt/CPUStatistic giving cpu stats in user friendly form
--org/libvirt/jna/VirUnion binding
--org/libvirt/jna/virDomainCPUStats type
--org/libvirt/jna/virNodeCPUStats type
--org/libvirt/jna/virTypedParameter biding
---
src/main/java/org/libvirt/CPUStatistic.java | 61 +++
src/main/java/org/libvirt/Connect.java | 137 +++++-
src/main/java/org/libvirt/Device.java | 57 ++-
src/main/java/org/libvirt/Domain.java | 501 +++++++++++++++------
.../java/org/libvirt/DomainInterfaceStats.java | 2 +-
src/main/java/org/libvirt/DomainSnapshot.java | 31 +-
src/main/java/org/libvirt/Error.java | 409 ++++++-----------
src/main/java/org/libvirt/ErrorHandler.java | 54 +--
src/main/java/org/libvirt/Interface.java | 65 +--
src/main/java/org/libvirt/Library.java | 4 +-
src/main/java/org/libvirt/Network.java | 61 ++-
src/main/java/org/libvirt/NetworkFilter.java | 43 +-
src/main/java/org/libvirt/Secret.java | 67 ++-
src/main/java/org/libvirt/StoragePool.java | 106 +++--
src/main/java/org/libvirt/StorageVol.java | 68 +--
src/main/java/org/libvirt/Stream.java | 71 ++-
src/main/java/org/libvirt/jna/Libvirt.java | 42 +-
src/main/java/org/libvirt/jna/VirUnion.java | 14 +
src/main/java/org/libvirt/jna/virConnectAuth.java | 4 +-
.../java/org/libvirt/jna/virConnectCredential.java | 4 +-
.../java/org/libvirt/jna/virDomainBlockInfo.java | 4 +-
.../java/org/libvirt/jna/virDomainBlockStats.java | 4 +-
.../java/org/libvirt/jna/virDomainCPUStats.java | 21 +
src/main/java/org/libvirt/jna/virDomainInfo.java | 4 +-
.../org/libvirt/jna/virDomainInterfaceStats.java | 4 +-
.../java/org/libvirt/jna/virDomainJobInfo.java | 4 +-
.../java/org/libvirt/jna/virDomainMemoryStats.java | 4 +-
src/main/java/org/libvirt/jna/virError.java | 4 +-
src/main/java/org/libvirt/jna/virNodeCPUStats.java | 19 +
src/main/java/org/libvirt/jna/virNodeInfo.java | 4 +-
.../java/org/libvirt/jna/virSchedParameter.java | 4 +-
.../java/org/libvirt/jna/virStoragePoolInfo.java | 4 +-
.../java/org/libvirt/jna/virStorageVolInfo.java | 4 +-
.../java/org/libvirt/jna/virTypedParameter.java | 22 +
src/main/java/org/libvirt/jna/virVcpuInfo.java | 4 +-
35 files changed, 1194 insertions(+), 717 deletions(-)
create mode 100644 src/main/java/org/libvirt/CPUStatistic.java
create mode 100644 src/main/java/org/libvirt/jna/VirUnion.java
create mode 100644 src/main/java/org/libvirt/jna/virDomainCPUStats.java
create mode 100644 src/main/java/org/libvirt/jna/virNodeCPUStats.java
create mode 100644 src/main/java/org/libvirt/jna/virTypedParameter.java
diff --git a/src/main/java/org/libvirt/CPUStatistic.java b/src/main/java/org/libvirt/CPUStatistic.java
new file mode 100644
index 0000000..4cd6f09
--- /dev/null
+++ b/src/main/java/org/libvirt/CPUStatistic.java
@@ -0,0 +1,61 @@
+package org.libvirt;
+
+import java.nio.charset.Charset;
+import org.libvirt.jna.virNodeCPUStats;
+import org.libvirt.jna.virTypedParameter;
+
+public class CPUStatistic {
+ public String tag;
+ public long val;
+
+ //valid for host cpu stats
+ public static final int KERNEL_H = 0;
+ public static final int USER_H = 1;
+ public static final int IDLE_H = 2;
+ public static final int IOWAIT_H = 3;
+
+ //valid for guest cpu stats
+ public static final int CPU_D = 0;
+ public static final int USER_D = 1;
+ public static final int SYSTEM_D = 2;
+
+ private String createStringFromBytes(byte[] b){
+ Charset ch = Charset.forName("UTF-8");
+ int i = 0;
+ while ((i<b.length) && (b[i]!=0))
+ i++;
+
+ return new String(b,0,i,ch);
+ }
+
+ public CPUStatistic(virNodeCPUStats stat){
+ tag = createStringFromBytes(stat.tag);
+ val = stat.val;
+ }
+
+ public CPUStatistic(virTypedParameter stat){
+ tag = createStringFromBytes(stat.field);
+ val = stat.value.l;
+ }
+
+ public String getTag() {
+ return tag;
+ }
+
+ public long getValue() {
+ return val;
+ }
+
+ public void setTag(String tag) {
+ this.tag = tag;
+ }
+
+ public void setValue(long val) {
+ this.val = val;
+ }
+
+ @Override
+ public String toString() {
+ return String.format("tag:%s%nval:%d%n", tag, val);
+ }
+}
diff --git a/src/main/java/org/libvirt/Connect.java b/src/main/java/org/libvirt/Connect.java
index fedc60e..07285f9 100644
--- a/src/main/java/org/libvirt/Connect.java
+++ b/src/main/java/org/libvirt/Connect.java
@@ -14,15 +14,15 @@ import org.libvirt.jna.StoragePoolPointer;
import org.libvirt.jna.StorageVolPointer;
import org.libvirt.jna.StreamPointer;
import org.libvirt.jna.virConnectAuth;
+import org.libvirt.jna.virNodeCPUStats;
import org.libvirt.jna.virNodeInfo;
import static org.libvirt.Library.libvirt;
-import static org.libvirt.ErrorHandler.processError;
-import static org.libvirt.ErrorHandler.processErrorIfZero;
import com.sun.jna.Memory;
import com.sun.jna.NativeLong;
import com.sun.jna.Pointer;
+import com.sun.jna.ptr.IntByReference;
import com.sun.jna.ptr.LongByReference;
/**
@@ -31,7 +31,7 @@ import com.sun.jna.ptr.LongByReference;
*
* @author stoty
*/
-public class Connect {
+public class Connect implements AutoCloseable{
/**
* Get the version of a connection.
@@ -82,6 +82,7 @@ public class Connect {
*/
public static void setErrorCallback(Libvirt.VirErrorCallback callback) throws LibvirtException {
Libvirt.INSTANCE.virSetErrorFunc(null, callback);
+ ErrorHandler.processError(Libvirt.INSTANCE);
}
/**
@@ -121,6 +122,7 @@ public class Connect {
VCP = libvirt.virConnectOpen(uri);
// Check for an error
processError(VCP);
+ ErrorHandler.processError(Libvirt.INSTANCE);
}
/**
@@ -141,6 +143,7 @@ public class Connect {
}
// Check for an error
processError(VCP);
+ ErrorHandler.processError(Libvirt.INSTANCE);
}
/**
@@ -173,6 +176,7 @@ public class Connect {
VCP = libvirt.virConnectOpenAuth(uri, vAuth, flags);
// Check for an error
processError(VCP);
+ ErrorHandler.processError(Libvirt.INSTANCE);
}
/**
@@ -195,7 +199,7 @@ public class Connect {
* @throws LibvirtException
* @return number of remaining references (>= 0)
*/
- public int close() throws LibvirtException {
+ public void close() throws LibvirtException {
int success = 0;
if (VCP != null) {
success = libvirt.virConnectClose(VCP);
@@ -205,7 +209,8 @@ public class Connect {
// it's called with a null virConnectPointer
VCP = null;
}
- return processError(success);
+
+ processError(success);
}
/**
@@ -219,7 +224,8 @@ public class Connect {
* @throws LibvirtException
*/
public CPUCompareResult compareCPU(String xmlDesc) throws LibvirtException {
- int rawResult = processError(libvirt.virConnectCompareCPU(VCP, xmlDesc, 0));
+ int rawResult = libvirt.virConnectCompareCPU(VCP, xmlDesc, 0);
+ processError();
return CPUCompareResult.get(rawResult);
}
@@ -306,11 +312,13 @@ public class Connect {
* Documentation</a>
* @param callbackID
* the callback to deregister
- * @return <em>ignore</em> (always 0)
+ * @return 0 on success, -1 on failure
* @throws LibvirtException
*/
public int domainEventDeregisterAny(int callbackID) throws LibvirtException {
- return processError(libvirt.virConnectDomainEventDeregisterAny(VCP, callbackID));
+ int returnValue = libvirt.virConnectDomainEventDeregisterAny(VCP, callbackID);
+ processError();
+ return returnValue;
}
/**
@@ -475,6 +483,41 @@ public class Connect {
Library.free(ptr);
}
}
+
+ /**
+ * This functions gives a % of the load on the host cpu system.
+ * In the case of a multicore processor it gives a load average.
+ * In order to do so it makes two sequential measurements, according
+ * to the interval parameter.
+ *
+ *
+ * @param interval the interval,in ms, between the two measurations.
+ * @return
+ * @throws LibvirtException
+ */
+ public float getCPUOverallUsage(long interval) throws LibvirtException{
+ float result = 0;
+ CPUStatistic[] st1 = getCPUStats(-1, 0);
+ try {
+ Thread.sleep(interval);
+ CPUStatistic[] st2 = getCPUStats(-1, 0);
+
+ for(int i=0;i<st2.length;i++)
+ st2[i].val -= st1[i].val;
+
+ long sum = 0;
+ for(int i=0;i<st2.length;i++)
+ sum +=st2[i].val;
+
+ result = 100.0f - (st2[CPUStatistic.IDLE_H].val*100.0f/sum);
+
+ } catch (InterruptedException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+
+ return result;
+ }
/**
* NUMA Support
@@ -492,7 +535,10 @@ public class Connect {
* Returns the free memory for the connection
*/
public long getFreeMemory() throws LibvirtException {
- return processErrorIfZero(libvirt.virNodeGetFreeMemory(VCP));
+ long returnValue = 0;
+ returnValue = libvirt.virNodeGetFreeMemory(VCP);
+ if (returnValue == 0) processError();
+ return returnValue;
}
/**
@@ -632,11 +678,13 @@ public class Connect {
* @see <a
* href="http://www.libvirt.org/html/libvirt-libvirt.html#virConnectIsEncrypted">Libvirt
* Documentation</a>
- * @return 1 if encrypted, 0 if not encrypted
+ * @return 1 if encrypted, 0 if not encrypted, -1 on error
* @throws LibvirtException
*/
public int isEncrypted() throws LibvirtException {
- return processError(libvirt.virConnectIsEncrypted(VCP));
+ int returnValue = libvirt.virConnectIsEncrypted(VCP);
+ processError();
+ return returnValue;
}
/**
@@ -645,11 +693,13 @@ public class Connect {
* @see <a
* href="http://www.libvirt.org/html/libvirt-libvirt.html#virConnectIsSecure">Libvirt
* Documentation</a>
- * @return 1 if secure, 0 if not secure
+ * @return 1 if secure, 0 if not secure, -1 on error
* @throws LibvirtException
*/
public int isSecure() throws LibvirtException {
- return processError(libvirt.virConnectIsSecure(VCP));
+ int returnValue = libvirt.virConnectIsSecure(VCP);
+ processError();
+ return returnValue;
}
/**
@@ -1019,6 +1069,7 @@ public class Connect {
processError(libvirt.virNodeGetInfo(VCP, vInfo));
return new NodeInfo(vInfo);
}
+
/**
* Provides the number of inactive domains.
@@ -1130,6 +1181,65 @@ public class Connect {
}
/**
+ * call the error handling logic. Should be called after every libvirt call
+ *
+ * @throws LibvirtException
+ */
+ protected void processError() throws LibvirtException {
+ ErrorHandler.processError(libvirt);
+ }
+
+ public CPUStatistic[] getCPUStats(int number,long flags) throws LibvirtException{
+ CPUStatistic[] stats = null;
+
+ IntByReference nParams = new IntByReference();
+
+ int result = libvirt.virNodeGetCPUStats(
+ VCP, number, null, nParams, flags);
+ processError();
+
+ if(result == 0){
+ virNodeCPUStats[] params = new virNodeCPUStats[nParams.getValue()];
+ result = libvirt.virNodeGetCPUStats(VCP, number , params, nParams, flags);
+ processError();
+
+ if(result >= 0){
+ stats = new CPUStatistic[params.length];
+ for(int i=0;i<params.length;i++)
+ stats[i] = new CPUStatistic(params[i]);
+ }
+ }
+
+ return stats;
+ }
+
+ /**
+ * Calls {@link #processError()} when the given libvirt return code
+ * indicates an error.
+ *
+ * @param ret libvirt return code, indicating error if negative.
+ * @return {@code ret}
+ * @throws LibvirtException
+ */
+ protected final int processError(int ret) throws LibvirtException {
+ if (ret < 0) processError();
+ return ret;
+ }
+
+ /**
+ * Calls {@link #processError()} if {@code arg} is null.
+ *
+ * @param arg An arbitrary object returned by libvirt.
+ * @return {@code arg}
+ * @throws LibvirtException
+ */
+ protected final <T> T processError(T arg) throws LibvirtException {
+ if (arg == null) processError();
+ return arg;
+ }
+
+
+ /**
* Restores a domain saved to disk by Domain.save().
*
* @param from
@@ -1200,6 +1310,7 @@ public class Connect {
public void setConnectionErrorCallback(Libvirt.VirErrorCallback callback) throws LibvirtException {
libvirt.virConnSetErrorFunc(VCP, null, callback);
+ processError();
}
/**
diff --git a/src/main/java/org/libvirt/Device.java b/src/main/java/org/libvirt/Device.java
index a3b20b8..fe49ce9 100644
--- a/src/main/java/org/libvirt/Device.java
+++ b/src/main/java/org/libvirt/Device.java
@@ -2,11 +2,6 @@ package org.libvirt;
import org.libvirt.jna.DevicePointer;
import static org.libvirt.Library.libvirt;
-import static org.libvirt.ErrorHandler.processError;
-
-import com.sun.jna.Pointer;
-
-import com.sun.jna.Pointer;
/**
* A device which is attached to a node
@@ -46,7 +41,8 @@ public class Device {
public int destroy() throws LibvirtException {
int success = 0;
if (VDP != null) {
- success = processError(libvirt.virNodeDeviceDestroy(VDP));
+ success = libvirt.virNodeDeviceDestroy(VDP);
+ processError();
VDP = null;
}
@@ -60,7 +56,9 @@ public class Device {
* @throws LibvirtException
*/
public int detach() throws LibvirtException {
- return processError(libvirt.virNodeDeviceDettach(VDP));
+ int num = libvirt.virNodeDeviceDettach(VDP);
+ processError();
+ return num;
}
@Override
@@ -78,7 +76,8 @@ public class Device {
public int free() throws LibvirtException {
int success = 0;
if (VDP != null) {
- success = processError(libvirt.virNodeDeviceFree(VDP));
+ success = libvirt.virNodeDeviceFree(VDP);
+ processError();
VDP = null;
}
@@ -91,7 +90,9 @@ public class Device {
* @throws LibvirtException
*/
public String getName() throws LibvirtException {
- return processError(libvirt.virNodeDeviceGetName(VDP));
+ String name = libvirt.virNodeDeviceGetName(VDP);
+ processError();
+ return name;
}
/**
@@ -100,7 +101,9 @@ public class Device {
* @throws LibvirtException
*/
public int getNumberOfCapabilities() throws LibvirtException {
- return processError(libvirt.virNodeDeviceNumOfCaps(VDP));
+ int num = libvirt.virNodeDeviceNumOfCaps(VDP);
+ processError();
+ return num;
}
/**
@@ -109,7 +112,9 @@ public class Device {
* @throws LibvirtException
*/
public String getParent() throws LibvirtException {
- return processError(libvirt.virNodeDeviceGetParent(VDP));
+ String parent = libvirt.virNodeDeviceGetParent(VDP);
+ processError();
+ return parent;
}
/**
@@ -118,7 +123,9 @@ public class Device {
* @throws LibvirtException
*/
public String getXMLDescription() throws LibvirtException {
- return processError(libvirt.virNodeDeviceGetXMLDesc(VDP));
+ String desc = libvirt.virNodeDeviceGetXMLDesc(VDP);
+ processError();
+ return desc;
}
/**
@@ -128,15 +135,21 @@ public class Device {
*/
public String[] listCapabilities() throws LibvirtException {
int maxCaps = getNumberOfCapabilities();
+ String[] names = new String[maxCaps];
if (maxCaps > 0) {
- Pointer[] ptrs = new Pointer[maxCaps];
- int got = processError(libvirt.virNodeDeviceListCaps(VDP, ptrs, maxCaps));
-
- return Library.toStringArray(ptrs, got);
- } else {
- return Library.NO_STRINGS;
+ libvirt.virNodeDeviceListCaps(VDP, names, maxCaps);
+ processError();
}
+ return names;
+ }
+
+ /**
+ * Error handling logic to throw errors. Must be called after every libvirt
+ * call.
+ */
+ protected void processError() throws LibvirtException {
+ virConnect.processError();
}
/**
@@ -145,7 +158,9 @@ public class Device {
* @throws LibvirtException
*/
public int reAttach() throws LibvirtException {
- return processError(libvirt.virNodeDeviceReAttach(VDP));
+ int num = libvirt.virNodeDeviceReAttach(VDP);
+ processError();
+ return num;
}
/**
@@ -155,6 +170,8 @@ public class Device {
* @throws LibvirtException
*/
public int reset() throws LibvirtException {
- return processError(libvirt.virNodeDeviceReset(VDP));
+ int num = libvirt.virNodeDeviceReset(VDP);
+ processError();
+ return num;
}
}
diff --git a/src/main/java/org/libvirt/Domain.java b/src/main/java/org/libvirt/Domain.java
index a217733..b515b4b 100644
--- a/src/main/java/org/libvirt/Domain.java
+++ b/src/main/java/org/libvirt/Domain.java
@@ -3,7 +3,6 @@ package org.libvirt;
import org.libvirt.jna.DomainPointer;
import org.libvirt.jna.DomainSnapshotPointer;
import org.libvirt.jna.Libvirt;
-import org.libvirt.jna.SizeT;
import org.libvirt.jna.virDomainBlockInfo;
import org.libvirt.jna.virDomainBlockStats;
import org.libvirt.jna.virDomainInfo;
@@ -11,10 +10,10 @@ import org.libvirt.jna.virDomainInterfaceStats;
import org.libvirt.jna.virDomainJobInfo;
import org.libvirt.jna.virDomainMemoryStats;
import org.libvirt.jna.virSchedParameter;
+import org.libvirt.jna.virTypedParameter;
import org.libvirt.jna.virVcpuInfo;
+
import static org.libvirt.Library.libvirt;
-import static org.libvirt.ErrorHandler.processError;
-import static org.libvirt.ErrorHandler.processErrorIfZero;
import com.sun.jna.Native;
import com.sun.jna.NativeLong;
@@ -33,25 +32,25 @@ public class Domain {
public static final int BYTES = 1;
}
- static final class CreateFlags {
- static final int VIR_DOMAIN_NONE = 0;
- static final int VIR_DOMAIN_SNAPSHOT_CREATE_REDEFINE = (1 << 0); /* Restore or alter
+ public static final class CreateFlags {
+ public static final int VIR_DOMAIN_NONE = 0;
+ public static final int VIR_DOMAIN_SNAPSHOT_CREATE_REDEFINE = (1 << 0); /* Restore or alter
metadata */
- static final int VIR_DOMAIN_SNAPSHOT_CREATE_CURRENT = (1 << 1); /* With redefine, make
+ public static final int VIR_DOMAIN_SNAPSHOT_CREATE_CURRENT = (1 << 1); /* With redefine, make
snapshot current */
- static final int VIR_DOMAIN_SNAPSHOT_CREATE_NO_METADATA = (1 << 2); /* Make snapshot without
+ public static final int VIR_DOMAIN_SNAPSHOT_CREATE_NO_METADATA = (1 << 2); /* Make snapshot without
remembering it */
- static final int VIR_DOMAIN_SNAPSHOT_CREATE_HALT = (1 << 3); /* Stop running guest
+ public static final int VIR_DOMAIN_SNAPSHOT_CREATE_HALT = (1 << 3); /* Stop running guest
after snapshot */
- static final int VIR_DOMAIN_SNAPSHOT_CREATE_DISK_ONLY = (1 << 4); /* disk snapshot, not
+ public static final int VIR_DOMAIN_SNAPSHOT_CREATE_DISK_ONLY = (1 << 4); /* disk snapshot, not
system checkpoint */
- static final int VIR_DOMAIN_SNAPSHOT_CREATE_REUSE_EXT = (1 << 5); /* reuse any existing
+ public static final int VIR_DOMAIN_SNAPSHOT_CREATE_REUSE_EXT = (1 << 5); /* reuse any existing
external files */
- static final int VIR_DOMAIN_SNAPSHOT_CREATE_QUIESCE = (1 << 6); /* use guest agent to
+ public static final int VIR_DOMAIN_SNAPSHOT_CREATE_QUIESCE = (1 << 6); /* use guest agent to
quiesce all mounted
file systems within
the domain */
- static final int VIR_DOMAIN_SNAPSHOT_CREATE_ATOMIC = (1 << 7); /* atomically avoid
+ public static final int VIR_DOMAIN_SNAPSHOT_CREATE_ATOMIC = (1 << 7); /* atomically avoid
partial changes */
}
@@ -72,6 +71,19 @@ public class Domain {
* when supported */
static final int VIR_MIGRATE_UNSAFE = (1 << 9); /* force migration even if it is considered unsafe */
}
+
+ public static final class ShutdownFlags{
+ static final long SHUTDOWN_DEFAULT = 0; //hypervisor choice
+ static final long SHUTDOWN_ACPI_POWER_BTN = 1; //send acpi api event
+ static final long SHUTDOWN_GUEST_AGENT = 2; //use guest agent
+ static final long SHUTDOWN_INITCTL = 4; //use init ctl
+ static final long DOMAIN_SHUTDOWN_SIGNAL = 8; //send a signal
+ }
+
+ public static final class DestroyFlags{
+ public static final long DESTROY_DEFAULT = 0; //Default behavior - could lead to data loss!!
+ public static final long DESTROY_GRACEFUL = 1; //only SIGTERM, no SIGKILL
+ }
static final class XMLFlags {
/**
@@ -162,11 +174,13 @@ public class Domain {
* @see <a
* href="http://www.libvirt.org/html/libvirt-libvirt.html#virDomainAbortJob">Libvirt
* Documentation</a>
- * @return <em>ignore</em> (always 0)
+ * @return 0 in case of success and -1 in case of failure.
* @throws LibvirtException
*/
public int abortJob() throws LibvirtException {
- return processError(libvirt.virDomainAbortJob(VDP));
+ int returnValue = libvirt.virDomainAbortJob(VDP);
+ processError();
+ return returnValue;
}
/**
@@ -180,7 +194,8 @@ public class Domain {
* @throws LibvirtException
*/
public void attachDevice(String xmlDesc) throws LibvirtException {
- processError(libvirt.virDomainAttachDevice(VDP, xmlDesc));
+ libvirt.virDomainAttachDevice(VDP, xmlDesc);
+ processError();
}
/**
@@ -196,7 +211,8 @@ public class Domain {
* @throws LibvirtException
*/
public void attachDeviceFlags(String xmlDesc, int flags) throws LibvirtException {
- processError(libvirt.virDomainAttachDeviceFlags(VDP, xmlDesc, flags));
+ libvirt.virDomainAttachDeviceFlags(VDP, xmlDesc, flags);
+ processError();
}
/**
@@ -205,13 +221,14 @@ public class Domain {
*
* @param path
* the path to the block device
- * @return the info
+ * @return the info, or null if an error
* @throws LibvirtException
*/
public DomainBlockInfo blockInfo(String path) throws LibvirtException {
virDomainBlockInfo info = new virDomainBlockInfo();
- processError(libvirt.virDomainGetBlockInfo(VDP, path, info, 0));
- return new DomainBlockInfo(info);
+ int success = libvirt.virDomainGetBlockInfo(VDP, path, info, 0);
+ processError();
+ return success == 0 ? new DomainBlockInfo(info) : null;
}
/**
@@ -231,8 +248,9 @@ public class Domain {
*/
public DomainBlockStats blockStats(String path) throws LibvirtException {
virDomainBlockStats stats = new virDomainBlockStats();
- processError(libvirt.virDomainBlockStats(VDP, path, stats, new SizeT(stats.size())));
- return new DomainBlockStats(stats);
+ int success = libvirt.virDomainBlockStats(VDP, path, stats, stats.size());
+ processError();
+ return success == 0 ? new DomainBlockStats(stats) : null;
}
/**
@@ -247,7 +265,8 @@ public class Domain {
* @throws LibvirtException
*/
public void blockResize(String disk, long size, int flags) throws LibvirtException {
- processError(libvirt.virDomainBlockResize(VDP, disk, size, flags));
+ int returnValue = libvirt.virDomainBlockResize(VDP, disk, size, flags);
+ processError();
}
@@ -262,7 +281,8 @@ public class Domain {
* @throws LibvirtException
*/
public void coreDump(String to, int flags) throws LibvirtException {
- processError(libvirt.virDomainCoreDump(VDP, to, flags));
+ libvirt.virDomainCoreDump(VDP, to, flags);
+ processError();
}
/**
@@ -277,11 +297,12 @@ public class Domain {
* Launches this defined domain. If the call succeed the domain moves from
* the defined to the running domains pools.
*
- * @return <em>ignore</em> (always 0)
* @throws LibvirtException
*/
public int create() throws LibvirtException {
- return processError(libvirt.virDomainCreate(VDP));
+ int returnValue = libvirt.virDomainCreate(VDP);
+ processError();
+ return returnValue;
}
/**
@@ -289,11 +310,12 @@ public class Domain {
* If the call succeed the domain moves from
* the defined to the running domains pools.
*
- * @return <em>ignore</em> (always 0)
* @throws LibvirtException
*/
public int create(int flags) throws LibvirtException {
- return processError(libvirt.virDomainCreateWithFlags(VDP, flags));
+ int returnValue = libvirt.virDomainCreateWithFlags(VDP, flags);
+ processError();
+ return returnValue;
}
/**
@@ -305,7 +327,13 @@ public class Domain {
* @throws LibvirtException
*/
public void destroy() throws LibvirtException {
- processError(libvirt.virDomainDestroy(VDP));
+ libvirt.virDomainDestroy(VDP);
+ processError();
+ }
+
+ public void destroyWithFlags(long flags) throws LibvirtException{
+ libvirt.virDomainDestroyFlags(VDP, flags);
+ processError();
}
/**
@@ -319,7 +347,8 @@ public class Domain {
* @throws LibvirtException
*/
public void detachDevice(String xmlDesc) throws LibvirtException {
- processError(libvirt.virDomainDetachDevice(VDP, xmlDesc));
+ libvirt.virDomainDetachDevice(VDP, xmlDesc);
+ processError();
}
/**
@@ -333,12 +362,13 @@ public class Domain {
* @throws LibvirtException
*/
public void detachDeviceFlags(String xmlDesc, int flags) throws LibvirtException {
- processError(libvirt.virDomainDetachDeviceFlags(VDP, xmlDesc, flags));
+ libvirt.virDomainDetachDeviceFlags(VDP, xmlDesc, flags);
+ processError();
}
@Override
protected void finalize() throws LibvirtException {
- free();
+ close();
}
/**
@@ -346,12 +376,13 @@ public class Domain {
* structure is freed and should not be used thereafter.
*
* @throws LibvirtException
- * @return number of references left (>= 0)
+ * @return number of references left (>= 0) for success, -1 for failure.
*/
- public int free() throws LibvirtException {
+ public int close() throws LibvirtException {
int success = 0;
if (VDP != null) {
- success = processError(libvirt.virDomainFree(VDP));
+ success = libvirt.virDomainFree(VDP);
+ processError();
VDP = null;
}
@@ -359,7 +390,7 @@ public class Domain {
}
/**
- * Provides a boolean value indicating whether the domain is configured to
+ * Provides a boolean value indicating whether the network is configured to
* be automatically started when the host machine boots.
*
* @return the result
@@ -367,7 +398,8 @@ public class Domain {
*/
public boolean getAutostart() throws LibvirtException {
IntByReference autoStart = new IntByReference();
- processError(libvirt.virDomainGetAutostart(VDP, autoStart));
+ libvirt.virDomainGetAutostart(VDP, autoStart);
+ processError();
return autoStart.getValue() != 0 ? true : false;
}
@@ -379,6 +411,47 @@ public class Domain {
public Connect getConnect() {
return virConnect;
}
+
+ /**
+ * This functions gives a % of the load on the host cpu system.
+ * In the case of a multicore processor it gives a load average.
+ * In order to do so it makes two sequential measurements, according
+ * to the interval parameter.
+ *
+ *
+ * @param interval the interval,in ms, between the two measurations.
+ * @return
+ * @throws LibvirtException
+ */
+ public float getCPUOverallUsage(long interval) throws LibvirtException{
+ float result = 0;
+ CPUStatistic[] h1 = getConnect().getCPUStats(-1, 0);
+ CPUStatistic[] d1 = getCPUStats(-1, 0);
+ try {
+ Thread.sleep(interval);
+ CPUStatistic[] h2 = getConnect().getCPUStats(-1, 0);
+ CPUStatistic[] d2 = getCPUStats(-1, 0);
+
+ for(int i=0;i<h2.length;i++)
+ h2[i].val -= h1[i].val;
+
+ for(int i=0;i<d2.length;i++)
+ d2[i].val -= d1[i].val;
+
+ long sum = 0;
+ for(int i=0;i<h2.length;i++)
+ sum +=h2[i].val;
+
+
+ result = d2[CPUStatistic.CPU_D].val*100.0f/sum;
+
+ } catch (InterruptedException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+
+ return result;
+ }
/**
* Gets the hypervisor ID number for the domain
@@ -387,7 +460,9 @@ public class Domain {
* @throws LibvirtException
*/
public int getID() throws LibvirtException {
- return processError(libvirt.virDomainGetID(VDP));
+ int returnValue = libvirt.virDomainGetID(VDP);
+ processError();
+ return returnValue;
}
/**
@@ -403,9 +478,14 @@ public class Domain {
* @throws LibvirtException
*/
public DomainInfo getInfo() throws LibvirtException {
+ DomainInfo returnValue = null;
virDomainInfo vInfo = new virDomainInfo();
- processError(libvirt.virDomainGetInfo(VDP, vInfo));
- return new DomainInfo(vInfo);
+ int success = libvirt.virDomainGetInfo(VDP, vInfo);
+ processError();
+ if (success == 0) {
+ returnValue = new DomainInfo(vInfo);
+ }
+ return returnValue;
}
/**
@@ -419,9 +499,14 @@ public class Domain {
* @throws LibvirtException
*/
public DomainJobInfo getJobInfo() throws LibvirtException {
+ DomainJobInfo returnValue = null;
virDomainJobInfo vInfo = new virDomainJobInfo();
- processError(libvirt.virDomainGetJobInfo(VDP, vInfo));
- return new DomainJobInfo(vInfo);
+ int success = libvirt.virDomainGetJobInfo(VDP, vInfo);
+ processError();
+ if (success == 0) {
+ returnValue = new DomainJobInfo(vInfo);
+ }
+ return returnValue;
}
/**
@@ -431,9 +516,9 @@ public class Domain {
* @throws LibvirtException
*/
public long getMaxMemory() throws LibvirtException {
- // the memory size in kibibytes (blocks of 1024 bytes), or 0 in case of error.
NativeLong returnValue = libvirt.virDomainGetMaxMemory(VDP);
- return processErrorIfZero(returnValue.longValue());
+ processError();
+ return returnValue.longValue();
}
/**
@@ -446,17 +531,21 @@ public class Domain {
* @throws LibvirtException
*/
public int getMaxVcpus() throws LibvirtException {
- return processError(libvirt.virDomainGetMaxVcpus(VDP));
+ int returnValue = libvirt.virDomainGetMaxVcpus(VDP);
+ processError();
+ return returnValue;
}
/**
* Gets the public name for this domain
*
- * @return the name, null if there is no name
- * @throws LibvirtException <em>never</em>
+ * @return the name
+ * @throws LibvirtException
*/
public String getName() throws LibvirtException {
- return libvirt.virDomainGetName(VDP);
+ String returnValue = libvirt.virDomainGetName(VDP);
+ processError();
+ return returnValue;
}
/**
@@ -466,7 +555,8 @@ public class Domain {
* @throws LibvirtException
*/
public String getOSType() throws LibvirtException {
- Pointer ptr = processError(libvirt.virDomainGetOSType(VDP));
+ Pointer ptr = libvirt.virDomainGetOSType(VDP);
+ processError();
try {
return Library.getString(ptr);
} finally {
@@ -482,25 +572,22 @@ public class Domain {
*/
public SchedParameter[] getSchedulerParameters() throws LibvirtException {
IntByReference nParams = new IntByReference();
- Library.free(processError(libvirt.virDomainGetSchedulerType(VDP, nParams)));
-
- int n = nParams.getValue();
-
- if (n > 0) {
- virSchedParameter[] nativeParams = new virSchedParameter[n];
-
- processError(libvirt.virDomainGetSchedulerParameters(VDP, nativeParams, nParams));
- n = nParams.getValue();
-
- SchedParameter[] returnValue = new SchedParameter[n];
-
- for (int x = 0; x < n; x++) {
+ SchedParameter[] returnValue = new SchedParameter[0];
+ Pointer pScheduler = libvirt.virDomainGetSchedulerType(VDP, nParams);
+ processError();
+ if (pScheduler != null) {
+ String scheduler = Library.getString(pScheduler);
+ Library.free(pScheduler);
+ virSchedParameter[] nativeParams = new virSchedParameter[nParams.getValue()];
+ returnValue = new SchedParameter[nParams.getValue()];
+ libvirt.virDomainGetSchedulerParameters(VDP, nativeParams, nParams);
+ processError();
+ for (int x = 0; x < nParams.getValue(); x++) {
returnValue[x] = SchedParameter.create(nativeParams[x]);
}
- return returnValue;
- } else {
- return new SchedParameter[] {};
}
+
+ return returnValue;
}
// getSchedulerType
@@ -513,13 +600,14 @@ public class Domain {
* @return the type of the scheduler
* @throws LibvirtException
*/
- public String getSchedulerType() throws LibvirtException {
- Pointer pScheduler = processError(libvirt.virDomainGetSchedulerType(VDP, null));
- try {
- return Library.getString(pScheduler);
- } finally {
- Library.free(pScheduler);
- }
+ public String[] getSchedulerType() throws LibvirtException {
+ IntByReference nParams = new IntByReference();
+ Pointer pScheduler = libvirt.virDomainGetSchedulerType(VDP, nParams);
+ processError();
+ String[] array = new String[1];
+ array[0] = Library.getString(pScheduler);
+ Library.free(pScheduler);
+ return array;
}
/**
@@ -531,8 +619,13 @@ public class Domain {
*/
public int[] getUUID() throws LibvirtException {
byte[] bytes = new byte[Libvirt.VIR_UUID_BUFLEN];
- processError(libvirt.virDomainGetUUID(VDP, bytes));
- return Connect.convertUUIDBytes(bytes);
+ int success = libvirt.virDomainGetUUID(VDP, bytes);
+ processError();
+ int[] returnValue = new int[0];
+ if (success == 0) {
+ returnValue = Connect.convertUUIDBytes(bytes);
+ }
+ return returnValue;
}
/**
@@ -544,8 +637,13 @@ public class Domain {
*/
public String getUUIDString() throws LibvirtException {
byte[] bytes = new byte[Libvirt.VIR_UUID_STRING_BUFLEN];
- processError(libvirt.virDomainGetUUIDString(VDP, bytes));
- return Native.toString(bytes);
+ int success = libvirt.virDomainGetUUIDString(VDP, bytes);
+ processError();
+ String returnValue = null;
+ if (success == 0) {
+ returnValue = Native.toString(bytes);
+ }
+ return returnValue;
}
/**
@@ -565,7 +663,8 @@ public class Domain {
virVcpuInfo[] infos = new virVcpuInfo[cpuCount];
returnValue = new int[cpuCount * maplength];
byte[] cpumaps = new byte[cpuCount * maplength];
- processError(libvirt.virDomainGetVcpus(VDP, infos, cpuCount, cpumaps, maplength));
+ libvirt.virDomainGetVcpus(VDP, infos, cpuCount, cpumaps, maplength);
+ processError();
for (int x = 0; x < cpuCount * maplength; x++) {
returnValue[x] = cpumaps[x];
}
@@ -583,12 +682,37 @@ public class Domain {
int cpuCount = getMaxVcpus();
VcpuInfo[] returnValue = new VcpuInfo[cpuCount];
virVcpuInfo[] infos = new virVcpuInfo[cpuCount];
- processError(libvirt.virDomainGetVcpus(VDP, infos, cpuCount, null, 0));
+ libvirt.virDomainGetVcpus(VDP, infos, cpuCount, null, 0);
+ processError();
for (int x = 0; x < cpuCount; x++) {
returnValue[x] = new VcpuInfo(infos[x]);
}
return returnValue;
}
+
+ public CPUStatistic[] getCPUStats(int number, long flags) throws LibvirtException{
+
+ CPUStatistic[] stats = null;
+
+ int result = libvirt.virDomainGetCPUStats(VDP,
+ null, 0, -1, 1, 0);
+ processError();
+
+ if(result >0){
+
+ virTypedParameter[] params = new virTypedParameter[result];
+ result = libvirt.virDomainGetCPUStats(VDP, params, result,
+ number, 1, flags);
+ processError();
+ if(result > 0){
+ stats = new CPUStatistic[params.length];
+ for(int i=0;i<params.length;i++)
+ stats[i] = new CPUStatistic(params[i]);
+ }
+ }
+
+ return stats;
+ }
/**
* Provides an XML description of the domain. The description may be reused
@@ -602,7 +726,8 @@ public class Domain {
* Description format </a>
*/
public String getXMLDesc(int flags) throws LibvirtException {
- Pointer ptr = processError(libvirt.virDomainGetXMLDesc(VDP, flags));
+ Pointer ptr = libvirt.virDomainGetXMLDesc(VDP, flags);
+ processError();
try {
return Library.getString(ptr);
} finally {
@@ -615,11 +740,13 @@ public class Domain {
*
* @see <a href="http://www.libvirt.org/html/libvirt-libvirt.html#virDomainHasCurrentSnapshot>Libvi
* r t Documentation</a>
- * @return 1 if running, 0 if inactive
+ * @return 1 if running, 0 if inactive, -1 on error
* @throws LibvirtException
*/
public int hasCurrentSnapshot() throws LibvirtException {
- return processError(libvirt.virDomainHasCurrentSnapshot(VDP, 0));
+ int returnValue = libvirt.virDomainHasCurrentSnapshot(VDP, 0);
+ processError();
+ return returnValue;
}
/**
@@ -632,7 +759,9 @@ public class Domain {
* @throws LibvirtException
*/
public int hasManagedSaveImage() throws LibvirtException {
- return processError(libvirt.virDomainHasManagedSaveImage(VDP, 0));
+ int returnValue = libvirt.virDomainHasManagedSaveImage(VDP, 0);
+ processError();
+ return returnValue;
}
/**
@@ -650,7 +779,8 @@ public class Domain {
*/
public DomainInterfaceStats interfaceStats(String path) throws LibvirtException {
virDomainInterfaceStats stats = new virDomainInterfaceStats();
- processError(libvirt.virDomainInterfaceStats(VDP, path, stats, new SizeT(stats.size())));
+ libvirt.virDomainInterfaceStats(VDP, path, stats, stats.size());
+ processError();
return new DomainInterfaceStats(stats);
}
@@ -660,11 +790,13 @@ public class Domain {
* @see <a
* href="http://www.libvirt.org/html/libvirt-libvirt.html#virDomainIsActive">Libvirt
* Documentation</a>
- * @return 1 if running, 0 if inactive
+ * @return 1 if running, 0 if inactive, -1 on error
* @throws LibvirtException
*/
public int isActive() throws LibvirtException {
- return processError(libvirt.virDomainIsActive(VDP));
+ int returnValue = libvirt.virDomainIsActive(VDP);
+ processError();
+ return returnValue;
}
/**
@@ -674,11 +806,13 @@ public class Domain {
* @see <a
* href="http://www.libvirt.org/html/libvirt-libvirt.html#virDomainIsPersistent">Libvirt
* Documentation</a>
- * @return 1 if persistent, 0 if transient
+ * @return 1 if persistent, 0 if transient, -1 on error
* @throws LibvirtException
*/
public int isPersistent() throws LibvirtException {
- return processError(libvirt.virDomainIsPersistent(VDP));
+ int returnValue = libvirt.virDomainIsPersistent(VDP);
+ processError();
+ return returnValue;
}
/**
@@ -687,11 +821,13 @@ public class Domain {
* @see <a
* href="http://www.libvirt.org/html/libvirt-libvirt.html#virDomainManagedSave">Libvirt
* Documentation</a>
- * @return always 0
+ * @return 0 in case of success or -1 in case of failure
* @throws LibvirtException
*/
public int managedSave() throws LibvirtException {
- return processError(libvirt.virDomainManagedSave(VDP, 0));
+ int returnValue = libvirt.virDomainManagedSave(VDP, 0);
+ processError();
+ return returnValue;
}
/**
@@ -700,11 +836,13 @@ public class Domain {
* @see <a
* href="http://www.libvirt.org/html/libvirt-libvirt.html#virDomainManagedSaveRemove">Libvirt
* Documentation</a>
- * @return always 0
+ * @return 0 in case of success, and -1 in case of error
* @throws LibvirtException
*/
public int managedSaveRemove() throws LibvirtException {
- return processError(libvirt.virDomainManagedSaveRemove(VDP, 0));
+ int returnValue = libvirt.virDomainManagedSaveRemove(VDP, 0);
+ processError();
+ return returnValue;
}
/**
@@ -712,19 +850,37 @@ public class Domain {
*
* @param number
* the number of stats to retrieve
- * @return the collection of stats
+ * @return the collection of stats, or null if an error occurs.
* @throws LibvirtException
*/
public MemoryStatistic[] memoryStats(int number) throws LibvirtException {
virDomainMemoryStats[] stats = new virDomainMemoryStats[number];
MemoryStatistic[] returnStats = null;
- int result = processError(libvirt.virDomainMemoryStats(VDP, stats, number, 0));
- returnStats = new MemoryStatistic[result];
- for (int x = 0; x < result; x++) {
- returnStats[x] = new MemoryStatistic(stats[x]);
+ int result = libvirt.virDomainMemoryStats(VDP, stats, number, 0);
+ processError();
+ if (result >= 0) {
+ returnStats = new MemoryStatistic[result];
+ for (int x = 0; x < result; x++) {
+ returnStats[x] = new MemoryStatistic(stats[x]);
+ }
}
return returnStats;
}
+
+ //TODO
+ /*public CPUStatistic[] cpuStats(int number) throws LibvirtException{
+ virDomainCPUStats[] stats = new virDomainCPUStats[number];
+ CPUStatistic[] returnStats = null;
+ int result = libvirt.virDomainGetVcpus(VDP, stats, number,null, 0);
+ processError();
+ if (result >= 0) {
+ returnStats = new CPUStatistic[result];
+ for (int x = 0; x < result; x++) {
+ returnStats[x] = new CPUStatistic(stats[x]);
+ }
+ }
+ return returnStats;
+ }*/
/**
* Migrate this domain object from its current host to the destination host
@@ -795,8 +951,8 @@ public class Domain {
* @throws LibvirtException if the migration fails
*/
public Domain migrate(Connect dconn, long flags, String dxml, String dname, String uri, long bandwidth) throws LibvirtException {
- DomainPointer newPtr =
- processError(libvirt.virDomainMigrate2(VDP, dconn.VCP, dxml, new NativeLong(flags), dname, uri, new NativeLong(bandwidth)));
+ DomainPointer newPtr = libvirt.virDomainMigrate2(VDP, dconn.VCP, dxml, new NativeLong(flags), dname, uri, new NativeLong(bandwidth));
+ processError();
return new Domain(dconn, newPtr);
}
@@ -839,13 +995,14 @@ public class Domain {
* (optional) dest hostname/URI as seen from the source host
* @param bandwidth
* optional) specify migration bandwidth limit in Mbps
- * @return the new domain object if the migration was successful. Note that
- * the new domain object exists in the scope of the destination
- * connection (dconn).
+ * @return the new domain object if the migration was successful, or NULL in
+ * case of error. Note that the new domain object exists in the
+ * scope of the destination connection (dconn).
* @throws LibvirtException
*/
public Domain migrate(Connect dconn, long flags, String dname, String uri, long bandwidth) throws LibvirtException {
- DomainPointer newPtr = processError(libvirt.virDomainMigrate(VDP, dconn.VCP, new NativeLong(flags), dname, uri, new NativeLong(bandwidth)));
+ DomainPointer newPtr = libvirt.virDomainMigrate(VDP, dconn.VCP, new NativeLong(flags), dname, uri, new NativeLong(bandwidth));
+ processError();
return new Domain(dconn, newPtr);
}
@@ -858,11 +1015,13 @@ public class Domain {
* Documentation</a>
* @param downtime
* the time to be down
- * @return always 0
+ * @return 0 in case of success, -1 otherwise.
* @throws LibvirtException
*/
public int migrateSetMaxDowntime(long downtime) throws LibvirtException {
- return processError(libvirt.virDomainMigrateSetMaxDowntime(VDP, downtime, 0));
+ int returnValue = libvirt.virDomainMigrateSetMaxDowntime(VDP, downtime, 0);
+ processError();
+ return returnValue;
}
/**
@@ -896,9 +1055,9 @@ public class Domain {
* @throws LibvirtException
*/
public int migrateToURI(String dconnuri, String miguri, String dxml, long flags, String dname, long bandwidth) throws LibvirtException {
- return processError(libvirt.virDomainMigrateToURI2(VDP, dconnuri, miguri,
- dxml, new NativeLong(flags),
- dname, new NativeLong(bandwidth)));
+ int returnValue = libvirt.virDomainMigrateToURI2(VDP, dconnuri, miguri, dxml, new NativeLong(flags), dname, new NativeLong(bandwidth));
+ processError();
+ return returnValue;
}
/**
@@ -921,7 +1080,9 @@ public class Domain {
* @throws LibvirtException
*/
public int migrateToURI(String uri, long flags, String dname, long bandwidth) throws LibvirtException {
- return processError(libvirt.virDomainMigrateToURI(VDP, uri, new NativeLong(flags), dname, new NativeLong(bandwidth)));
+ int returnValue = libvirt.virDomainMigrateToURI(VDP, uri, new NativeLong(flags), dname, new NativeLong(bandwidth));
+ processError();
+ return returnValue;
}
/**
@@ -943,7 +1104,16 @@ public class Domain {
for (int x = 0; x < cpumap.length; x++) {
packedMap[x] = (byte) cpumap[x];
}
- processError(libvirt.virDomainPinVcpu(VDP, vcpu, packedMap, cpumap.length));
+ libvirt.virDomainPinVcpu(VDP, vcpu, packedMap, cpumap.length);
+ processError();
+ }
+
+ /**
+ * Error handling logic to throw errors. Must be called after every libvirt
+ * call.
+ */
+ protected void processError() throws LibvirtException {
+ virConnect.processError();
}
/**
@@ -956,7 +1126,8 @@ public class Domain {
* @throws LibvirtException
*/
public void reboot(int flags) throws LibvirtException {
- processError(libvirt.virDomainReboot(VDP, flags));
+ libvirt.virDomainReboot(VDP, flags);
+ processError();
}
/**
@@ -967,7 +1138,8 @@ public class Domain {
* @throws LibvirtException
*/
public void resume() throws LibvirtException {
- processError(libvirt.virDomainResume(VDP));
+ libvirt.virDomainResume(VDP);
+ processError();
}
/**
@@ -978,11 +1150,13 @@ public class Domain {
* >Libvirt Documentation</>
* @param snapshot
* the snapshot to revert to
- * @return 0 if the creation is successful
+ * @return 0 if the creation is successful, -1 on error.
* @throws LibvirtException
*/
public int revertToSnapshot(DomainSnapshot snapshot) throws LibvirtException {
- return processError(libvirt.virDomainRevertToSnapshot(snapshot.VDSP, 0));
+ int returnCode = libvirt.virDomainRevertToSnapshot(snapshot.VDSP, 0);
+ processError();
+ return returnCode;
}
/**
@@ -996,7 +1170,8 @@ public class Domain {
* @throws LibvirtException
*/
public void save(String to) throws LibvirtException {
- processError(libvirt.virDomainSave(VDP, to));
+ libvirt.virDomainSave(VDP, to);
+ processError();
}
/**
@@ -1008,7 +1183,8 @@ public class Domain {
*/
public void setAutostart(boolean autostart) throws LibvirtException {
int autoValue = autostart ? 1 : 0;
- processError(libvirt.virDomainSetAutostart(VDP, autoValue));
+ libvirt.virDomainSetAutostart(VDP, autoValue);
+ processError();
}
/**
@@ -1020,7 +1196,8 @@ public class Domain {
* @throws LibvirtException
*/
public void setMaxMemory(long memory) throws LibvirtException {
- processError(libvirt.virDomainSetMaxMemory(VDP, new NativeLong(memory)));
+ libvirt.virDomainSetMaxMemory(VDP, new NativeLong(memory));
+ processError();
}
/**
@@ -1033,7 +1210,8 @@ public class Domain {
* @throws LibvirtException
*/
public void setMemory(long memory) throws LibvirtException {
- processError(libvirt.virDomainSetMemory(VDP, new NativeLong(memory)));
+ libvirt.virDomainSetMemory(VDP, new NativeLong(memory));
+ processError();
}
/**
@@ -1048,7 +1226,8 @@ public class Domain {
for (int x = 0; x < params.length; x++) {
input[x] = SchedParameter.toNative(params[x]);
}
- processError(libvirt.virDomainSetSchedulerParameters(VDP, input, params.length));
+ libvirt.virDomainSetSchedulerParameters(VDP, input, params.length);
+ processError();
}
/**
@@ -1062,7 +1241,8 @@ public class Domain {
* @throws LibvirtException
*/
public void setVcpus(int nvcpus) throws LibvirtException {
- processError(libvirt.virDomainSetVcpus(VDP, nvcpus));
+ libvirt.virDomainSetVcpus(VDP, nvcpus);
+ processError();
}
/**
@@ -1074,7 +1254,19 @@ public class Domain {
* @throws LibvirtException
*/
public void shutdown() throws LibvirtException {
- processError(libvirt.virDomainShutdown(VDP));
+ libvirt.virDomainShutdown(VDP);
+ processError();
+ }
+
+ /**
+ * Shuts down this domain with selected shutdown flag.
+ * Please use Domain static flags under the inner class SHUTDOWNFlags
+ * @param flag
+ * @throws LibvirtException
+ */
+ public void shutdown(long flag) throws LibvirtException{
+ libvirt.virDomainShutdownFlags(VDP, flag);
+ processError();
}
/**
@@ -1088,12 +1280,17 @@ public class Domain {
* string containing an XML description of the domain
* @param flags
* flags for creating the snapshot, see the virDomainSnapshotCreateFlags for the flag options
- * @return the snapshot
+ * @return the snapshot, or null on Error
* @throws LibvirtException
*/
public DomainSnapshot snapshotCreateXML(String xmlDesc, int flags) throws LibvirtException {
- DomainSnapshotPointer ptr = processError(libvirt.virDomainSnapshotCreateXML(VDP, xmlDesc, flags));
- return new DomainSnapshot(virConnect, ptr);
+ DomainSnapshotPointer ptr = libvirt.virDomainSnapshotCreateXML(VDP, xmlDesc, flags);
+ processError();
+ DomainSnapshot returnValue = null;
+ if (ptr != null) {
+ returnValue = new DomainSnapshot(virConnect, ptr);
+ }
+ return returnValue;
}
/**
@@ -1103,7 +1300,7 @@ public class Domain {
* This is just a convenience method, it has the same effect
* as calling {@code snapshotCreateXML(xmlDesc, 0);}.
*
- * @see #snapshotCreateXML(String, int)
+ * @see #snapshotCreateXML(int)
* @see <a
* href="http://www.libvirt.org/html/libvirt-libvirt.html#virDomainSnapshotCreateXML">Libvirt
* Documentation</a>
@@ -1122,12 +1319,17 @@ public class Domain {
* @see <a
* href="http://www.libvirt.org/html/libvirt-libvirt.html#virDomainSnapshotCurrent">Libvirt
* Documentation</a>
- * @return the snapshot
+ * @return the snapshot, or null on Error
* @throws LibvirtException
*/
public DomainSnapshot snapshotCurrent() throws LibvirtException {
- DomainSnapshotPointer ptr = processError(libvirt.virDomainSnapshotCurrent(VDP, 0));
- return new DomainSnapshot(virConnect, ptr);
+ DomainSnapshotPointer ptr = libvirt.virDomainSnapshotCurrent(VDP, 0);
+ processError();
+ DomainSnapshot returnValue = null;
+ if (ptr != null) {
+ returnValue = new DomainSnapshot(virConnect, ptr);
+ }
+ return returnValue;
}
/**
@@ -1140,15 +1342,16 @@ public class Domain {
* @throws LibvirtException
*/
public String[] snapshotListNames(int flags) throws LibvirtException {
+ String[] returnValue = null;
int num = snapshotNum();
- if (num > 0) {
- Pointer[] ptrs = new Pointer[num];
- int got = processError(libvirt.virDomainSnapshotListNames(VDP, ptrs, num, flags));
-
- return Library.toStringArray(ptrs, got);
- } else {
- return Library.NO_STRINGS;
+ if (num >= 0) {
+ returnValue = new String[num];
+ if (num > 0) {
+ libvirt.virDomainSnapshotListNames(VDP, returnValue, num, flags);
+ processError();
+ }
}
+ return returnValue;
}
/**
@@ -1176,12 +1379,17 @@ public class Domain {
* Documentation</a>
* @param name
* the name
- * @return The located snapshot
+ * @return The located snapshot, or null if an error
* @throws LibvirtException
*/
public DomainSnapshot snapshotLookupByName(String name) throws LibvirtException {
- DomainSnapshotPointer ptr = processError(libvirt.virDomainSnapshotLookupByName(VDP, name, 0));
- return new DomainSnapshot(virConnect, ptr);
+ DomainSnapshotPointer ptr = libvirt.virDomainSnapshotLookupByName(VDP, name, 0);
+ processError();
+ DomainSnapshot returnValue = null;
+ if (ptr != null) {
+ returnValue = new DomainSnapshot(virConnect, ptr);
+ }
+ return returnValue;
}
/**
@@ -1192,7 +1400,9 @@ public class Domain {
* Documentation</a>
*/
public int snapshotNum() throws LibvirtException {
- return processError(libvirt.virDomainSnapshotNum(VDP, 0));
+ int returnValue = libvirt.virDomainSnapshotNum(VDP, 0);
+ processError();
+ return returnValue;
}
/**
@@ -1204,7 +1414,8 @@ public class Domain {
* @throws LibvirtException
*/
public void suspend() throws LibvirtException {
- processError(libvirt.virDomainSuspend(VDP));
+ libvirt.virDomainSuspend(VDP);
+ processError();
}
/**
@@ -1213,7 +1424,8 @@ public class Domain {
* @throws LibvirtException
*/
public void undefine() throws LibvirtException {
- processError(libvirt.virDomainUndefine(VDP));
+ libvirt.virDomainUndefine(VDP);
+ processError();
}
/**
@@ -1225,7 +1437,8 @@ public class Domain {
* @throws LibvirtException
*/
public void undefine(int flags) throws LibvirtException {
- processError(libvirt.virDomainUndefineFlags(VDP, flags));
+ libvirt.virDomainUndefineFlags(VDP, flags);
+ processError();
}
/**
@@ -1236,11 +1449,13 @@ public class Domain {
* the xml to update with
* @param flags
* controls the update
- * @return always 0
+ * @return 0 in case of success, -1 in case of failure.
* @throws LibvirtException
*/
public int updateDeviceFlags(String xml, int flags) throws LibvirtException {
- return processError(libvirt.virDomainUpdateDeviceFlags(VDP, xml, flags));
+ int returnValue = libvirt.virDomainUpdateDeviceFlags(VDP, xml, flags);
+ processError();
+ return returnValue;
}
}
diff --git a/src/main/java/org/libvirt/DomainInterfaceStats.java b/src/main/java/org/libvirt/DomainInterfaceStats.java
index eab5c44..0e948d5 100644
--- a/src/main/java/org/libvirt/DomainInterfaceStats.java
+++ b/src/main/java/org/libvirt/DomainInterfaceStats.java
@@ -3,7 +3,7 @@ package org.libvirt;
import org.libvirt.jna.virDomainInterfaceStats;
/**
- * The Domain.interfaceStats method returns the network counters in this object.
+ * The Domain.interfaceStats method returns th network counters in this object
*
* @author stoty
*
diff --git a/src/main/java/org/libvirt/DomainSnapshot.java b/src/main/java/org/libvirt/DomainSnapshot.java
index 3013117..b58fd20 100644
--- a/src/main/java/org/libvirt/DomainSnapshot.java
+++ b/src/main/java/org/libvirt/DomainSnapshot.java
@@ -2,9 +2,6 @@ package org.libvirt;
import org.libvirt.jna.DomainSnapshotPointer;
import static org.libvirt.Library.libvirt;
-import static org.libvirt.ErrorHandler.processError;
-
-import com.sun.jna.Pointer;
public class DomainSnapshot {
@@ -30,14 +27,15 @@ public class DomainSnapshot {
* href="http://www.libvirt.org/html/libvirt-libvirt.html#virDomainSnapshotDelete">Libvirt
* Documentation</a>
* @param flags
- * controls the deletion
- * @return <em>ignore</em> (always 0)
+ * controls teh deletion
+ * @return 0 if the selected snapshot(s) were successfully deleted, -1 on error.
* @throws LibvirtException
*/
public int delete(int flags) throws LibvirtException {
int success = 0;
if (VDSP != null) {
- success = processError(libvirt.virDomainSnapshotDelete(VDSP, flags));
+ success = libvirt.virDomainSnapshotDelete(VDSP, flags);
+ processError();
VDSP = null;
}
@@ -54,12 +52,13 @@ public class DomainSnapshot {
* exist.
*
* @throws LibvirtException
- * @return 0 on success
+ * @return 0 on success, or -1 on error.
*/
public int free() throws LibvirtException {
int success = 0;
if (VDSP != null) {
- success = processError(libvirt.virDomainSnapshotFree(VDSP));
+ success = libvirt.virDomainSnapshotFree(VDSP);
+ processError();
VDSP = null;
}
@@ -73,12 +72,16 @@ public class DomainSnapshot {
* @return the XML document
*/
public String getXMLDesc() throws LibvirtException {
- Pointer p = processError(libvirt.virDomainSnapshotGetXMLDesc(VDSP, 0));
+ String returnValue = libvirt.virDomainSnapshotGetXMLDesc(VDSP, 0);
+ processError();
+ return returnValue;
+ }
- try {
- return Library.getString(p);
- } finally {
- Library.free(p);
- }
+ /**
+ * Error handling logic to throw errors. Must be called after every libvirt
+ * call.
+ */
+ protected void processError() throws LibvirtException {
+ virConnect.processError();
}
}
diff --git a/src/main/java/org/libvirt/Error.java b/src/main/java/org/libvirt/Error.java
index 15dd870..114e758 100644
--- a/src/main/java/org/libvirt/Error.java
+++ b/src/main/java/org/libvirt/Error.java
@@ -28,104 +28,54 @@ public class Error implements Serializable {
}
public static enum ErrorDomain {
- VIR_FROM_NONE,
- /** Error at Xen hypervisor layer */
- VIR_FROM_XEN,
- /** Error at connection with xend daemon */
- VIR_FROM_XEND,
- /** Error at connection with xen store */
- VIR_FROM_XENSTORE,
- /** Error in the S-Expression code */
- VIR_FROM_SEXPR,
- /** Error in the XML code */
- VIR_FROM_XML,
- /** Error when operating on a domain */
- VIR_FROM_DOM,
- /** Error in the XML-RPC code */
- VIR_FROM_RPC,
- /** Error in the proxy code */
- VIR_FROM_PROXY,
- /** Error in the configuration file handling */
- VIR_FROM_CONF,
- /** Error at the QEMU daemon */
- VIR_FROM_QEMU,
- /** Error when operating on a network */
- VIR_FROM_NET,
- /** Error from test driver */
- VIR_FROM_TEST,
- /** Error from remote driver */
- VIR_FROM_REMOTE,
- /** Error from OpenVZ driver */
- VIR_FROM_OPENVZ,
- /** Error at Xen XM layer */
- VIR_FROM_XENXM,
- /** Error in the Linux Stats code */
- VIR_FROM_STATS_LINUX,
- /** Error from Linux Container driver */
- VIR_FROM_LXC,
- /** Error from storage driver */
- VIR_FROM_STORAGE,
- /** Error from network config */
- VIR_FROM_NETWORK,
- /** Error from domain config */
- VIR_FROM_DOMAIN,
- /** Error at the UML driver */
- VIR_FROM_UML,
- /** Error from node device monitor */
- VIR_FROM_NODEDEV,
- /** Error from xen inotify layer */
- VIR_FROM_XEN_INOTIFY,
- /** Error from security framework */
- VIR_FROM_SECURITY,
- /** Error from VirtualBox driver */
- VIR_FROM_VBOX,
- /** Error when operating on an interface */
- VIR_FROM_INTERFACE,
- /** Error from OpenNebula driver */
- VIR_FROM_ONE,
- /** Error from ESX driver */
- VIR_FROM_ESX,
- /** Error from IBM power hypervisor */
- VIR_FROM_PHYP,
- /** Error from secret storage */
- VIR_FROM_SECRET,
- /** Error from CPU driver */
- VIR_FROM_CPU,
- /** Error from XenAPI */
- VIR_FROM_XENAPI,
- /** Error from network filter driver */
- VIR_FROM_NWFILTER,
- /** Error from Synchronous hooks */
- VIR_FROM_HOOK,
- /** Error from domain snapshot */
- VIR_FROM_DOMAIN_SNAPSHOT,
- /** Error from auditing subsystem */
- VIR_FROM_AUDIT,
- /** Error from sysinfo/SMBIOS */
- VIR_FROM_SYSINFO,
- /** Error from I/O streams */
- VIR_FROM_STREAMS,
- /** Error from VMware driver */
- VIR_FROM_VMWARE,
- /** Error from event loop impl */
- VIR_FROM_EVENT,
- /** Error from libxenlight driver */
- VIR_FROM_LIBXL,
- /** Error from lock manager */
- VIR_FROM_LOCKING,
- /** Error from Hyper-V driver */
- VIR_FROM_HYPERV,
- /** Error from capabilities */
- VIR_FROM_CAPABILITIES,
- /** Error from URI handling */
- VIR_FROM_URI,
- /** Error from auth handling */
- VIR_FROM_AUTH,
- /** Error from DBus */
- VIR_FROM_DBUS,
-
- /** unknown error domain */
- VIR_FROM_UNKNOWN; // must be the last entry!
+ VIR_FROM_NONE, VIR_FROM_XEN, /* Error at Xen hypervisor layer */
+ VIR_FROM_XEND, /* Error at connection with xend daemon */
+ VIR_FROM_XENSTORE, /* Error at connection with xen store */
+ VIR_FROM_SEXPR, /* Error in the S-Expression code */
+ VIR_FROM_XML, /* Error in the XML code */
+ VIR_FROM_DOM, /* Error when operating on a domain */
+ VIR_FROM_RPC, /* Error in the XML-RPC code */
+ VIR_FROM_PROXY, /* Error in the proxy code */
+ VIR_FROM_CONF, /* Error in the configuration file handling */
+ VIR_FROM_QEMU, /* Error at the QEMU daemon */
+ VIR_FROM_NET, /* Error when operating on a network */
+ VIR_FROM_TEST, /* Error from test driver */
+ VIR_FROM_REMOTE, /* Error from remote driver */
+ VIR_FROM_OPENVZ, /* Error from OpenVZ driver */
+ VIR_FROM_XENXM, /* Error at Xen XM layer */
+ VIR_FROM_STATS_LINUX, /* Error in the Linux Stats code */
+ VIR_FROM_LXC, /* Error from Linux Container driver */
+ VIR_FROM_STORAGE, /* Error from storage driver */
+ VIR_FROM_NETWORK, /* Error from network config */
+ VIR_FROM_DOMAIN, /* Error from domain config */
+ VIR_FROM_UML, /* Error at the UML driver */
+ VIR_FROM_NODEDEV, /* Error from node device monitor */
+ VIR_FROM_XEN_INOTIFY, /* Error from xen inotify layer */
+ VIR_FROM_SECURITY, /* Error from security framework */
+ VIR_FROM_VBOX, /* Error from VirtualBox driver */
+ VIR_FROM_INTERFACE, /* Error when operating on an interface */
+ VIR_FROM_ONE, /* Error from OpenNebula driver */
+ VIR_FROM_ESX, /* Error from ESX driver */
+ VIR_FROM_PHYP, /* Error from IBM power hypervisor */
+ VIR_FROM_SECRET, /* Error from secret storage */
+ VIR_FROM_CPU, /* Error from CPU driver */
+ VIR_FROM_XENAPI, /* Error from XenAPI */
+ VIR_FROM_NWFILTER, /* Error from network filter driver */
+ VIR_FROM_HOOK, /* Error from Synchronous hooks */
+ VIR_FROM_DOMAIN_SNAPSHOT, /* Error from domain snapshot */
+ VIR_FROM_AUDIT, /* Error from auditing subsystem */
+ VIR_FROM_SYSINFO, /* Error from sysinfo/SMBIOS */
+ VIR_FROM_STREAMS, /* Error from I/O streams */
+ VIR_FROM_VMWARE, /* Error from VMware driver */
+ VIR_FROM_EVENT, /* Error from event loop impl */
+ VIR_FROM_LIBXL, /* Error from libxenlight driver */
+ VIR_FROM_LOCKING, /* Error from lock manager */
+ VIR_FROM_HYPERV, /* Error from Hyper-V driver */
+ VIR_FROM_CAPABILITIES, /* Error from capabilities */
+ VIR_FROM_URI, /* Error from URI handling */
+ VIR_FROM_AUTH, /* Error from auth handling */
+ VIR_FROM_DBUS, /* Error from DBus */
+ VIR_FROM_UNKNOWN; /* unknown error domain (must be the last entry!) */
protected static final ErrorDomain wrap(int value) {
return safeElementAt(value, values());
@@ -151,170 +101,93 @@ public class Error implements Serializable {
}
public static enum ErrorNumber {
- VIR_ERR_OK,
- /** internal error */
- VIR_ERR_INTERNAL_ERROR,
- /** memory allocation failure */
- VIR_ERR_NO_MEMORY,
- /** no support for this function */
- VIR_ERR_NO_SUPPORT,
- /** could not resolve hostname */
- VIR_ERR_UNKNOWN_HOST,
- /** can't connect to hypervisor */
- VIR_ERR_NO_CONNECT,
- /** invalid connection object */
- VIR_ERR_INVALID_CONN,
- /** invalid domain object */
- VIR_ERR_INVALID_DOMAIN,
- /** invalid function argument */
- VIR_ERR_INVALID_ARG,
- /** a command to hypervisor failed */
- VIR_ERR_OPERATION_FAILED,
- /** a HTTP GET command to failed */
- VIR_ERR_GET_FAILED,
- /** a HTTP POST command to failed */
- VIR_ERR_POST_FAILED,
- /** unexpected HTTP error code */
- VIR_ERR_HTTP_ERROR,
- /** failure to serialize an S-Expr */
- VIR_ERR_SEXPR_SERIAL,
- /** could not open Xen hypervisor control */
- VIR_ERR_NO_XEN,
- /** failure doing an hypervisor call */
- VIR_ERR_XEN_CALL,
- /** unknown OS type */
- VIR_ERR_OS_TYPE,
- /** missing kernel information */
- VIR_ERR_NO_KERNEL,
- /** missing root device information */
- VIR_ERR_NO_ROOT,
- /** missing source device information */
- VIR_ERR_NO_SOURCE,
- /** missing target device information */
- VIR_ERR_NO_TARGET,
- /** missing domain name information */
- VIR_ERR_NO_NAME,
- /** missing domain OS information */
- VIR_ERR_NO_OS,
- /** missing domain devices information */
- VIR_ERR_NO_DEVICE,
- /** could not open Xen Store control */
- VIR_ERR_NO_XENSTORE,
- /** too many drivers registered */
- VIR_ERR_DRIVER_FULL,
- /** not supported by the drivers (DEPRECATED) */
- VIR_ERR_CALL_FAILED,
- /** an XML description is not well formed or broken */
- VIR_ERR_XML_ERROR,
- /** the domain already exist */
- VIR_ERR_DOM_EXIST,
- /** operation forbidden on read-only connections */
- VIR_ERR_OPERATION_DENIED,
- /** failed to open a conf file */
- VIR_ERR_OPEN_FAILED,
- /** failed to read a conf file */
- VIR_ERR_READ_FAILED,
- /** failed to parse a conf file */
- VIR_ERR_PARSE_FAILED,
- /** failed to parse the syntax of a conf file */
- VIR_ERR_CONF_SYNTAX,
- /** failed to write a conf file */
- VIR_ERR_WRITE_FAILED,
- /** detail of an XML error */
- VIR_ERR_XML_DETAIL,
- /** invalid network object */
- VIR_ERR_INVALID_NETWORK,
- /** the network already exist */
- VIR_ERR_NETWORK_EXIST,
- /** general system call failure */
- VIR_ERR_SYSTEM_ERROR,
- /** some sort of RPC error */
- VIR_ERR_RPC,
- /** error from a GNUTLS call */
- VIR_ERR_GNUTLS_ERROR,
- /** failed to start network */
- VIR_WAR_NO_NETWORK,
- /** domain not found or unexpectedly disappeared */
- VIR_ERR_NO_DOMAIN,
- /** network not found */
- VIR_ERR_NO_NETWORK,
- /** invalid MAC address */
- VIR_ERR_INVALID_MAC,
- /** authentication failed */
- VIR_ERR_AUTH_FAILED,
- /** invalid storage pool object */
- VIR_ERR_INVALID_STORAGE_POOL,
- /** invalid storage vol object */
- VIR_ERR_INVALID_STORAGE_VOL,
- /** failed to start storage */
- VIR_WAR_NO_STORAGE,
- /** storage pool not found */
- VIR_ERR_NO_STORAGE_POOL,
- /** storage pool not found */
- VIR_ERR_NO_STORAGE_VOL,
- /** failed to start node driver */
- VIR_WAR_NO_NODE,
- /** invalid node device object */
- VIR_ERR_INVALID_NODE_DEVICE,
- /** node device not found */
- VIR_ERR_NO_NODE_DEVICE,
- /** security model not found */
- VIR_ERR_NO_SECURITY_MODEL,
- /** operation is not applicable at this time */
- VIR_ERR_OPERATION_INVALID,
- /** failed to start interface driver */
- VIR_WAR_NO_INTERFACE,
- /** interface driver not running */
- VIR_ERR_NO_INTERFACE,
- /** invalid interface object */
- VIR_ERR_INVALID_INTERFACE,
- /** more than one matching interface found */
- VIR_ERR_MULTIPLE_INTERFACES,
- /** failed to start secret storage */
- VIR_WAR_NO_SECRET,
- /** invalid secret */
- VIR_ERR_INVALID_SECRET,
- /** secret not found */
- VIR_ERR_NO_SECRET,
- /** unsupported configuration construct */
- VIR_ERR_CONFIG_UNSUPPORTED,
- /** timeout occurred during operation */
- VIR_ERR_OPERATION_TIMEOUT,
- /** a migration worked, but making the VM persist on the dest
- * host failed */
- VIR_ERR_MIGRATE_PERSIST_FAILED,
- /** a synchronous hook script failed */
- VIR_ERR_HOOK_SCRIPT_FAILED,
- /** invalid domain snapshot */
- VIR_ERR_INVALID_DOMAIN_SNAPSHOT,
- /** domain snapshot not found */
- VIR_ERR_NO_DOMAIN_SNAPSHOT,
- /** stream pointer not valid */
- VIR_ERR_INVALID_STREAM,
- /** valid API use but unsupported by the given driver */
- VIR_ERR_ARGUMENT_UNSUPPORTED,
- /** storage pool probe failed */
- VIR_ERR_STORAGE_PROBE_FAILED,
- /** storage pool already built */
- VIR_ERR_STORAGE_POOL_BUILT,
- /** force was not requested for a risky domain snapshot
- revert */
- VIR_ERR_SNAPSHOT_REVERT_RISKY,
- /** operation on a domain was canceled/aborted by user */
- VIR_ERR_OPERATION_ABORTED,
- /** authentication cancelled */
- VIR_ERR_AUTH_CANCELLED,
- /** The metadata is not present */
- VIR_ERR_NO_DOMAIN_METADATA,
- /** Migration is not safe */
- VIR_ERR_MIGRATE_UNSAFE,
- /** integer overflow */
- VIR_ERR_OVERFLOW,
- /** action prevented by block copy job */
- VIR_ERR_BLOCK_COPY_ACTIVE,
-
- /** unknown error */
- VIR_ERR_UNKNOWN; // must be the last entry!
+ VIR_ERR_OK, VIR_ERR_INTERNAL_ERROR, /* internal error */
+ VIR_ERR_NO_MEMORY, /* memory allocation failure */
+ VIR_ERR_NO_SUPPORT, /* no support for this function */
+ VIR_ERR_UNKNOWN_HOST, /* could not resolve hostname */
+ VIR_ERR_NO_CONNECT, /* can't connect to hypervisor */
+ VIR_ERR_INVALID_CONN, /* invalid connection object */
+ VIR_ERR_INVALID_DOMAIN, /* invalid domain object */
+ VIR_ERR_INVALID_ARG, /* invalid function argument */
+ VIR_ERR_OPERATION_FAILED, /* a command to hypervisor failed */
+ VIR_ERR_GET_FAILED, /* a HTTP GET command to failed */
+ VIR_ERR_POST_FAILED, /* a HTTP POST command to failed */
+ VIR_ERR_HTTP_ERROR, /* unexpected HTTP error code */
+ VIR_ERR_SEXPR_SERIAL, /* failure to serialize an S-Expr */
+ VIR_ERR_NO_XEN, /* could not open Xen hypervisor control */
+ VIR_ERR_XEN_CALL, /* failure doing an hypervisor call */
+ VIR_ERR_OS_TYPE, /* unknown OS type */
+ VIR_ERR_NO_KERNEL, /* missing kernel information */
+ VIR_ERR_NO_ROOT, /* missing root device information */
+ VIR_ERR_NO_SOURCE, /* missing source device information */
+ VIR_ERR_NO_TARGET, /* missing target device information */
+ VIR_ERR_NO_NAME, /* missing domain name information */
+ VIR_ERR_NO_OS, /* missing domain OS information */
+ VIR_ERR_NO_DEVICE, /* missing domain devices information */
+ VIR_ERR_NO_XENSTORE, /* could not open Xen Store control */
+ VIR_ERR_DRIVER_FULL, /* too many drivers registered */
+ VIR_ERR_CALL_FAILED, /* not supported by the drivers (DEPRECATED) */
+ VIR_ERR_XML_ERROR, /* an XML description is not well formed or broken */
+ VIR_ERR_DOM_EXIST, /* the domain already exist */
+ VIR_ERR_OPERATION_DENIED, /*
+ * operation forbidden on read-only
+ * connections
+ */
+ VIR_ERR_OPEN_FAILED, /* failed to open a conf file */
+ VIR_ERR_READ_FAILED, /* failed to read a conf file */
+ VIR_ERR_PARSE_FAILED, /* failed to parse a conf file */
+ VIR_ERR_CONF_SYNTAX, /* failed to parse the syntax of a conf file */
+ VIR_ERR_WRITE_FAILED, /* failed to write a conf file */
+ VIR_ERR_XML_DETAIL, /* detail of an XML error */
+ VIR_ERR_INVALID_NETWORK, /* invalid network object */
+ VIR_ERR_NETWORK_EXIST, /* the network already exist */
+ VIR_ERR_SYSTEM_ERROR, /* general system call failure */
+ VIR_ERR_RPC, /* some sort of RPC error */
+ VIR_ERR_GNUTLS_ERROR, /* error from a GNUTLS call */
+ VIR_WAR_NO_NETWORK, /* failed to start network */
+ VIR_ERR_NO_DOMAIN, /* domain not found or unexpectedly disappeared */
+ VIR_ERR_NO_NETWORK, /* network not found */
+ VIR_ERR_INVALID_MAC, /* invalid MAC address */
+ VIR_ERR_AUTH_FAILED, /* authentication failed */
+ VIR_ERR_INVALID_STORAGE_POOL, /* invalid storage pool object */
+ VIR_ERR_INVALID_STORAGE_VOL, /* invalid storage vol object */
+ VIR_WAR_NO_STORAGE, /* failed to start storage */
+ VIR_ERR_NO_STORAGE_POOL, /* storage pool not found */
+ VIR_ERR_NO_STORAGE_VOL, /* storage pool not found */
+ VIR_WAR_NO_NODE, /* failed to start node driver */
+ VIR_ERR_INVALID_NODE_DEVICE, /* invalid node device object */
+ VIR_ERR_NO_NODE_DEVICE, /* node device not found */
+ VIR_ERR_NO_SECURITY_MODEL, /* security model not found */
+ VIR_ERR_OPERATION_INVALID, /* operation is not applicable at this time */
+ VIR_WAR_NO_INTERFACE, /* failed to start interface driver */
+ VIR_ERR_NO_INTERFACE, /* interface driver not running */
+ VIR_ERR_INVALID_INTERFACE, /* invalid interface object */
+ VIR_ERR_MULTIPLE_INTERFACES, /* more than one matching interface found */
+ VIR_WAR_NO_SECRET, /* failed to start secret storage */
+ VIR_ERR_INVALID_SECRET, /* invalid secret */
+ VIR_ERR_NO_SECRET, /* secret not found */
+ VIR_ERR_CONFIG_UNSUPPORTED, /* unsupported configuration construct */
+ VIR_ERR_OPERATION_TIMEOUT, /* timeout occurred during operation */
+ VIR_ERR_MIGRATE_PERSIST_FAILED, /* a migration worked, but making the
+ VM persist on the dest host failed */
+ VIR_ERR_HOOK_SCRIPT_FAILED, /* a synchronous hook script failed */
+ VIR_ERR_INVALID_DOMAIN_SNAPSHOT, /* invalid domain snapshot */
+ VIR_ERR_NO_DOMAIN_SNAPSHOT, /* domain snapshot not found */
+ VIR_ERR_INVALID_STREAM, /* stream pointer not valid */
+ VIR_ERR_ARGUMENT_UNSUPPORTED, /* valid API use but unsupported by
+ the given driver */
+ VIR_ERR_STORAGE_PROBE_FAILED, /* storage pool probe failed */
+ VIR_ERR_STORAGE_POOL_BUILT, /* storage pool already built */
+ VIR_ERR_SNAPSHOT_REVERT_RISKY, /* force was not requested for a
+ risky domain snapshot revert */
+ VIR_ERR_OPERATION_ABORTED, /* operation on a domain was
+ canceled/aborted by user */
+ VIR_ERR_AUTH_CANCELLED, /* authentication cancelled */
+ VIR_ERR_NO_DOMAIN_METADATA, /* The metadata is not present */
+ VIR_ERR_MIGRATE_UNSAFE, /* Migration is not safe */
+ VIR_ERR_OVERFLOW, /* integer overflow */
+ VIR_ERR_BLOCK_COPY_ACTIVE, /* action prevented by block copy job */
+ VIR_ERR_UNKNOWN; /* unknown error (must be the last entry!) */
protected static final ErrorNumber wrap(int value) {
return safeElementAt(value, values());
@@ -340,9 +213,9 @@ public class Error implements Serializable {
private NetworkPointer VNP; /* Deprecated */
public Error(virError vError) {
- code = ErrorNumber.wrap(vError.code);
- domain = ErrorDomain.wrap(vError.domain);
- level = ErrorLevel.wrap(vError.level);
+ code = code.wrap(vError.code);
+ domain = domain.wrap(vError.domain);
+ level = level.wrap(vError.level);
message = vError.message;
str1 = vError.str1;
str2 = vError.str2;
@@ -355,9 +228,9 @@ public class Error implements Serializable {
}
/**
- * Gets the error code
+ * Gets he error code
*
- * @return a VirErrorNumber
+ * @return a VirErroNumber
*/
public ErrorNumber getCode() {
return code;
@@ -421,7 +294,7 @@ public class Error implements Serializable {
}
/**
- * Returns a human-readable informative error message
+ * Returns human-readable informative error messag
*
* @return error message
*/
diff --git a/src/main/java/org/libvirt/ErrorHandler.java b/src/main/java/org/libvirt/ErrorHandler.java
index c2e7337..434c85d 100644
--- a/src/main/java/org/libvirt/ErrorHandler.java
+++ b/src/main/java/org/libvirt/ErrorHandler.java
@@ -3,11 +3,6 @@ package org.libvirt;
import org.libvirt.jna.Libvirt;
import org.libvirt.jna.virError;
-import static org.libvirt.Library.libvirt;
-
-import com.sun.jna.Pointer;
-import com.sun.jna.PointerType;
-
/**
* Utility class which processes the last error from the libvirt library. It
* turns errors into Libvirt Exceptions.
@@ -16,7 +11,14 @@ import com.sun.jna.PointerType;
*/
public class ErrorHandler {
- private static final void processError() throws LibvirtException {
+ /**
+ * Look for the latest error from libvirt not tied to a connection
+ *
+ * @param libvirt
+ * the active connection
+ * @throws LibvirtException
+ */
+ public static void processError(Libvirt libvirt) throws LibvirtException {
virError vError = libvirt.virGetLastError();
if (vError != null) {
Error error = new Error(vError);
@@ -28,44 +30,4 @@ public class ErrorHandler {
}
}
}
-
- /**
- * Calls {@link #processError()} when the given libvirt return code
- * indicates an error.
- *
- * @param ret libvirt return code, indicating error if -1.
- * @return {@code ret}
- * @throws LibvirtException
- */
- static final int processError(int ret) throws LibvirtException {
- if (ret == -1) processError();
- return ret;
- }
-
- /**
- * Calls {@link #processError()} if {@code arg} is null.
- *
- * @param arg An arbitrary object returned by libvirt.
- * @return {@code arg}
- * @throws LibvirtException
- */
- static final <T extends PointerType> T processError(T arg) throws LibvirtException {
- if (arg == null) processError();
- return arg;
- }
-
- static final Pointer processError(Pointer arg) throws LibvirtException {
- if (arg == null) processError();
- return arg;
- }
-
- static final String processError(String str) throws LibvirtException {
- if (str == null) processError();
- return str;
- }
-
- static final long processErrorIfZero(long ret) throws LibvirtException {
- if (ret == 0) processError();
- return ret;
- }
}
diff --git a/src/main/java/org/libvirt/Interface.java b/src/main/java/org/libvirt/Interface.java
index e0ddc3f..7782fb9 100644
--- a/src/main/java/org/libvirt/Interface.java
+++ b/src/main/java/org/libvirt/Interface.java
@@ -2,7 +2,6 @@ package org.libvirt;
import org.libvirt.jna.InterfacePointer;
import static org.libvirt.Library.libvirt;
-import static org.libvirt.ErrorHandler.processError;
import com.sun.jna.Pointer;
@@ -41,37 +40,27 @@ public class Interface {
}
/**
- * Activate an interface (i.e. call "ifup").
- * <p>
- * If there was an open network config transaction at the time
- * this interface was defined (that is, if
- * virInterfaceChangeBegin() had been called), the interface will
- * be brought back down (and then undefined) if
- * virInterfaceChangeRollback() is called.
+ * Create and start a defined network. If the call succeed the network moves
+ * from the defined to the running networks pools.
*
* @throws LibvirtException
*/
public int create() throws LibvirtException {
- return processError(libvirt.virInterfaceCreate(VIP));
+ int returnValue = libvirt.virInterfaceCreate(VIP);
+ processError();
+ return returnValue;
}
/**
- * Deactivate an interface (i.e. call "ifdown").
- * <p>
- * This does not remove the interface from the config, and does
- * not free the associated virInterfacePtr object.
- * <p>
- * If there is an open network config transaction at the time this
- * interface is destroyed (that is, if virInterfaceChangeBegin()
- * had been called), and if the interface is later undefined and
- * then virInterfaceChangeRollback() is called, the restoral of
- * the interface definition will also bring the interface back
- * up.
+ * Destroy the network object. The running instance is shutdown if not down
+ * already and all resources used by it are given back to the hypervisor.
*
* @throws LibvirtException
*/
public int destroy() throws LibvirtException {
- return processError(libvirt.virInterfaceDestroy(VIP));
+ int returnValue = libvirt.virInterfaceDestroy(VIP);
+ processError();
+ return returnValue;
}
@Override
@@ -84,12 +73,13 @@ public class Interface {
* structure is freed and should not be used thereafter.
*
* @throws LibvirtException
- * @return number of references left (>= 0)
+ * @return number of references left (>= 0) for success, -1 for failure.
*/
public int free() throws LibvirtException {
int success = 0;
if (VIP != null) {
- success = processError(libvirt.virInterfaceFree(VIP));
+ success = libvirt.virInterfaceFree(VIP);
+ processError();
VIP = null;
}
@@ -102,7 +92,9 @@ public class Interface {
* @throws LibvirtException
*/
public String getMACString() throws LibvirtException {
- return processError(libvirt.virInterfaceGetMACString(VIP));
+ String name = libvirt.virInterfaceGetMACString(VIP);
+ processError();
+ return name;
}
/**
@@ -111,7 +103,9 @@ public class Interface {
* @throws LibvirtException
*/
public String getName() throws LibvirtException {
- return processError(libvirt.virInterfaceGetName(VIP));
+ String name = libvirt.virInterfaceGetName(VIP);
+ processError();
+ return name;
}
/**
@@ -120,7 +114,8 @@ public class Interface {
* @throws LibvirtException
*/
public String getXMLDescription(int flags) throws LibvirtException {
- Pointer xml = processError(libvirt.virInterfaceGetXMLDesc(VIP, flags));
+ Pointer xml = libvirt.virInterfaceGetXMLDesc(VIP, flags);
+ processError();
try {
return Library.getString(xml);
} finally {
@@ -134,11 +129,21 @@ public class Interface {
* @see <a
* href="http://www.libvirt.org/html/libvirt-libvirt.html#virInterfaceIsActive">Libvirt
* Documentation</a>
- * @return 1 if running, 0 if inactive
+ * @return 1 if running, 0 if inactive, -1 on error
* @throws LibvirtException
*/
public int isActive() throws LibvirtException {
- return processError(libvirt.virInterfaceIsActive(VIP));
+ int returnValue = libvirt.virInterfaceIsActive(VIP);
+ processError();
+ return returnValue;
+ }
+
+ /**
+ * Error handling logic to throw errors. Must be called after every libvirt
+ * call.
+ */
+ protected void processError() throws LibvirtException {
+ virConnect.processError();
}
/**
@@ -148,6 +153,8 @@ public class Interface {
* @throws LibvirtException
*/
public int undefine() throws LibvirtException {
- return processError(libvirt.virInterfaceUndefine(VIP));
+ int returnValue = libvirt.virInterfaceUndefine(VIP);
+ processError();
+ return returnValue;
}
}
diff --git a/src/main/java/org/libvirt/Library.java b/src/main/java/org/libvirt/Library.java
index 6f12c37..0136095 100644
--- a/src/main/java/org/libvirt/Library.java
+++ b/src/main/java/org/libvirt/Library.java
@@ -1,7 +1,6 @@
package org.libvirt;
import org.libvirt.jna.Libvirt;
-import static org.libvirt.ErrorHandler.processError;
import com.sun.jna.Native;
import com.sun.jna.Pointer;
@@ -24,9 +23,10 @@ final class Library {
// Load the native part
static {
+ Libvirt.INSTANCE.virInitialize();
libvirt = Libvirt.INSTANCE;
try {
- processError(libvirt.virInitialize());
+ ErrorHandler.processError(Libvirt.INSTANCE);
} catch (Exception e) {
e.printStackTrace();
}
diff --git a/src/main/java/org/libvirt/Network.java b/src/main/java/org/libvirt/Network.java
index 2a77028..2244c5d 100644
--- a/src/main/java/org/libvirt/Network.java
+++ b/src/main/java/org/libvirt/Network.java
@@ -3,7 +3,6 @@ package org.libvirt;
import org.libvirt.jna.Libvirt;
import org.libvirt.jna.NetworkPointer;
import static org.libvirt.Library.libvirt;
-import static org.libvirt.ErrorHandler.processError;
import com.sun.jna.Native;
import com.sun.jna.Pointer;
@@ -44,7 +43,8 @@ public class Network {
* @throws LibvirtException
*/
public void create() throws LibvirtException {
- processError(libvirt.virNetworkCreate(VNP));
+ libvirt.virNetworkCreate(VNP);
+ processError();
}
/**
@@ -56,7 +56,8 @@ public class Network {
* @throws LibvirtException
*/
public void destroy() throws LibvirtException {
- processError(libvirt.virNetworkDestroy(VNP));
+ libvirt.virNetworkDestroy(VNP);
+ processError();
}
@Override
@@ -70,12 +71,13 @@ public class Network {
* return an error.
*
* @throws LibvirtException
- * @return number of references left (>= 0)
+ * @return number of references left (>= 0) for success, -1 for failure.
*/
public int free() throws LibvirtException {
int success = 0;
if (VNP != null) {
- success = processError(libvirt.virNetworkFree(VNP));
+ success = libvirt.virNetworkFree(VNP);
+ processError();
VNP = null;
}
@@ -91,7 +93,8 @@ public class Network {
*/
public boolean getAutostart() throws LibvirtException {
IntByReference autoStart = new IntByReference();
- processError(libvirt.virNetworkGetAutostart(VNP, autoStart));
+ libvirt.virNetworkGetAutostart(VNP, autoStart);
+ processError();
return (autoStart.getValue() != 0) ? true : false;
}
@@ -103,7 +106,8 @@ public class Network {
* @throws LibvirtException
*/
public String getBridgeName() throws LibvirtException {
- final Pointer ptr = processError(libvirt.virNetworkGetBridgeName(VNP));
+ final Pointer ptr = libvirt.virNetworkGetBridgeName(VNP);
+ processError();
try {
return Library.getString(ptr);
} finally {
@@ -127,7 +131,9 @@ public class Network {
* @throws LibvirtException
*/
public String getName() throws LibvirtException {
- return processError(libvirt.virNetworkGetName(VNP));
+ String returnValue = libvirt.virNetworkGetName(VNP);
+ processError();
+ return returnValue;
}
/**
@@ -139,8 +145,13 @@ public class Network {
*/
public int[] getUUID() throws LibvirtException {
byte[] bytes = new byte[Libvirt.VIR_UUID_BUFLEN];
- processError(libvirt.virNetworkGetUUID(VNP, bytes));
- return Connect.convertUUIDBytes(bytes);
+ int success = libvirt.virNetworkGetUUID(VNP, bytes);
+ processError();
+ int[] returnValue = new int[0];
+ if (success == 0) {
+ returnValue = Connect.convertUUIDBytes(bytes);
+ }
+ return returnValue;
}
/**
@@ -152,8 +163,13 @@ public class Network {
*/
public String getUUIDString() throws LibvirtException {
byte[] bytes = new byte[Libvirt.VIR_UUID_STRING_BUFLEN];
- processError(libvirt.virNetworkGetUUIDString(VNP, bytes));
- return Native.toString(bytes);
+ int success = libvirt.virNetworkGetUUIDString(VNP, bytes);
+ processError();
+ String returnValue = null;
+ if (success == 0) {
+ returnValue = Native.toString(bytes);
+ }
+ return returnValue;
}
/**
@@ -167,7 +183,8 @@ public class Network {
* @throws LibvirtException
*/
public String getXMLDesc(int flags) throws LibvirtException {
- Pointer ptr = processError(libvirt.virNetworkGetXMLDesc(VNP, flags));
+ Pointer ptr = libvirt.virNetworkGetXMLDesc(VNP, flags);
+ processError();
try {
return Library.getString(ptr);
} finally {
@@ -185,7 +202,9 @@ public class Network {
* @throws LibvirtException
*/
public int isActive() throws LibvirtException {
- return processError(libvirt.virNetworkIsActive(VNP));
+ int returnValue = libvirt.virNetworkIsActive(VNP);
+ processError();
+ return returnValue;
}
/**
@@ -199,7 +218,13 @@ public class Network {
* @throws LibvirtException
*/
public int isPersistent() throws LibvirtException {
- return processError(libvirt.virNetworkIsPersistent(VNP));
+ int returnValue = libvirt.virNetworkIsPersistent(VNP);
+ processError();
+ return returnValue;
+ }
+
+ protected void processError() throws LibvirtException {
+ virConnect.processError();
}
/**
@@ -212,7 +237,8 @@ public class Network {
*/
public void setAutostart(boolean autostart) throws LibvirtException {
int autoValue = autostart ? 1 : 0;
- processError(libvirt.virNetworkSetAutostart(VNP, autoValue));
+ libvirt.virNetworkSetAutostart(VNP, autoValue);
+ processError();
}
/**
@@ -221,7 +247,8 @@ public class Network {
* @throws LibvirtException
*/
public void undefine() throws LibvirtException {
- processError(libvirt.virNetworkUndefine(VNP));
+ libvirt.virNetworkUndefine(VNP);
+ processError();
}
}
diff --git a/src/main/java/org/libvirt/NetworkFilter.java b/src/main/java/org/libvirt/NetworkFilter.java
index 4f4bc6c..ba4d2ea 100644
--- a/src/main/java/org/libvirt/NetworkFilter.java
+++ b/src/main/java/org/libvirt/NetworkFilter.java
@@ -3,7 +3,6 @@ package org.libvirt;
import org.libvirt.jna.Libvirt;
import org.libvirt.jna.NetworkFilterPointer;
import static org.libvirt.Library.libvirt;
-import static org.libvirt.ErrorHandler.processError;
import com.sun.jna.Native;
@@ -33,12 +32,13 @@ public class NetworkFilter {
* exist.
*
* @throws LibvirtException
- * @return <em>ignore</em> (always 0)
+ * @return 0 on success, or -1 on error.
*/
public int free() throws LibvirtException {
int success = 0;
if (NFP != null) {
- success = processError(libvirt.virNWFilterFree(NFP));
+ success = libvirt.virNWFilterFree(NFP);
+ processError();
NFP = null;
}
@@ -52,7 +52,9 @@ public class NetworkFilter {
* @throws LibvirtException
*/
public String getName() throws LibvirtException {
- return processError(libvirt.virNWFilterGetName(NFP));
+ String returnValue = libvirt.virNWFilterGetName(NFP);
+ processError();
+ return returnValue;
}
/**
@@ -64,8 +66,13 @@ public class NetworkFilter {
*/
public int[] getUUID() throws LibvirtException {
byte[] bytes = new byte[Libvirt.VIR_UUID_BUFLEN];
- processError(libvirt.virNWFilterGetUUID(NFP, bytes));
- return Connect.convertUUIDBytes(bytes);
+ int success = libvirt.virNWFilterGetUUID(NFP, bytes);
+ processError();
+ int[] returnValue = new int[0];
+ if (success == 0) {
+ returnValue = Connect.convertUUIDBytes(bytes);
+ }
+ return returnValue;
}
/**
@@ -77,8 +84,13 @@ public class NetworkFilter {
*/
public String getUUIDString() throws LibvirtException {
byte[] bytes = new byte[Libvirt.VIR_UUID_STRING_BUFLEN];
- processError(libvirt.virNWFilterGetUUIDString(NFP, bytes));
- return Native.toString(bytes);
+ int success = libvirt.virNWFilterGetUUIDString(NFP, bytes);
+ processError();
+ String returnValue = null;
+ if (success == 0) {
+ returnValue = Native.toString(bytes);
+ }
+ return returnValue;
}
/**
@@ -90,7 +102,17 @@ public class NetworkFilter {
* @return the XML document
*/
public String getXMLDesc() throws LibvirtException {
- return processError(libvirt.virNWFilterGetXMLDesc(NFP, 0));
+ String returnValue = libvirt.virNWFilterGetXMLDesc(NFP, 0);
+ processError();
+ return returnValue;
+ }
+
+ /**
+ * Error handling logic to throw errors. Must be called after every libvirt
+ * call.
+ */
+ protected void processError() throws LibvirtException {
+ virConnect.processError();
}
/**
@@ -99,6 +121,7 @@ public class NetworkFilter {
* @throws LibvirtException
*/
public void undefine() throws LibvirtException {
- processError(libvirt.virNWFilterUndefine(NFP));
+ libvirt.virNWFilterUndefine(NFP);
+ processError();
}
}
diff --git a/src/main/java/org/libvirt/Secret.java b/src/main/java/org/libvirt/Secret.java
index 868fcc8..5332e02 100644
--- a/src/main/java/org/libvirt/Secret.java
+++ b/src/main/java/org/libvirt/Secret.java
@@ -2,12 +2,11 @@ package org.libvirt;
import org.libvirt.jna.Libvirt;
import org.libvirt.jna.SecretPointer;
-import org.libvirt.jna.SizeT;
-import org.libvirt.jna.SizeTByReference;
import static org.libvirt.Library.libvirt;
-import static org.libvirt.ErrorHandler.processError;
import com.sun.jna.Native;
+import com.sun.jna.NativeLong;
+import com.sun.jna.ptr.LongByReference;
import com.sun.jna.Pointer;
import java.nio.ByteBuffer;
@@ -40,12 +39,13 @@ public class Secret {
* Release the secret handle. The underlying secret continues to exist.
*
* @throws LibvirtException
- * @return <em>ignore</em> (always 0)
+ * @return 0 on success, or -1 on error.
*/
public int free() throws LibvirtException {
int success = 0;
if (VSP != null) {
- success = processError(libvirt.virSecretFree(VSP));
+ success = libvirt.virSecretFree(VSP);
+ processError();
VSP = null;
}
@@ -61,7 +61,9 @@ public class Secret {
* @throws LibvirtException
*/
public String getUsageID() throws LibvirtException {
- return processError(libvirt.virSecretGetUsageID(VSP));
+ String returnValue = libvirt.virSecretGetUsageID(VSP);
+ processError();
+ return returnValue;
}
/**
@@ -73,8 +75,13 @@ public class Secret {
*/
public int[] getUUID() throws LibvirtException {
byte[] bytes = new byte[Libvirt.VIR_UUID_BUFLEN];
- processError(libvirt.virSecretGetUUID(VSP, bytes));
- return Connect.convertUUIDBytes(bytes);
+ int success = libvirt.virSecretGetUUID(VSP, bytes);
+ processError();
+ int[] returnValue = new int[0];
+ if (success == 0) {
+ returnValue = Connect.convertUUIDBytes(bytes);
+ }
+ return returnValue;
}
/**
@@ -86,8 +93,13 @@ public class Secret {
*/
public String getUUIDString() throws LibvirtException {
byte[] bytes = new byte[Libvirt.VIR_UUID_STRING_BUFLEN];
- processError(libvirt.virSecretGetUUIDString(VSP, bytes));
- return Native.toString(bytes);
+ int success = libvirt.virSecretGetUUIDString(VSP, bytes);
+ processError();
+ String returnValue = null;
+ if (success == 0) {
+ returnValue = Native.toString(bytes);
+ }
+ return returnValue;
}
/**
@@ -108,8 +120,9 @@ public class Secret {
* @return the value of the secret, or null on failure.
*/
public byte[] getByteValue() throws LibvirtException {
- SizeTByReference value_size = new SizeTByReference();
- Pointer value = processError(libvirt.virSecretGetValue(VSP, value_size, 0));
+ LongByReference value_size = new LongByReference();
+ Pointer value = libvirt.virSecretGetValue(VSP, value_size, 0);
+ processError();
ByteBuffer bb = value.getByteBuffer(0, value_size.getValue());
byte[] returnValue = new byte[bb.remaining()];
bb.get(returnValue);
@@ -122,33 +135,49 @@ public class Secret {
* @return the XML document
*/
public String getXMLDesc() throws LibvirtException {
- return processError(libvirt.virSecretGetXMLDesc(VSP, 0));
+ String returnValue = libvirt.virSecretGetXMLDesc(VSP, 0);
+ processError();
+ return returnValue;
+ }
+
+ /**
+ * Error handling logic to throw errors. Must be called after every libvirt
+ * call.
+ */
+ protected void processError() throws LibvirtException {
+ virConnect.processError();
}
/**
* Sets the value of the secret
*
- * @return <em>ignore</em> (always 0)
+ * @return 0 on success, -1 on failure.
*/
public int setValue(String value) throws LibvirtException {
- return processError(libvirt.virSecretSetValue(VSP, value, new SizeT(value.length()), 0));
+ int returnValue = libvirt.virSecretSetValue(VSP, value, new NativeLong(value.length()), 0);
+ processError();
+ return returnValue;
}
/**
* Sets the value of the secret
*
- * @return <em>ignore</em> (always 0)
+ * @return 0 on success, -1 on failure.
*/
public int setValue(byte[] value) throws LibvirtException {
- return processError(libvirt.virSecretSetValue(VSP, value, new SizeT(value.length), 0));
+ int returnValue = libvirt.virSecretSetValue(VSP, value, new NativeLong(value.length), 0);
+ processError();
+ return returnValue;
}
/**
* Undefines, but does not free, the Secret.
*
- * @return <em>ignore</em> (always 0)
+ * @return 0 on success, -1 on failure.
*/
public int undefine() throws LibvirtException {
- return processError(libvirt.virSecretUndefine(VSP));
+ int returnValue = libvirt.virSecretUndefine(VSP);
+ processError();
+ return returnValue;
}
}
diff --git a/src/main/java/org/libvirt/StoragePool.java b/src/main/java/org/libvirt/StoragePool.java
index 14ecab8..2d59f68 100644
--- a/src/main/java/org/libvirt/StoragePool.java
+++ b/src/main/java/org/libvirt/StoragePool.java
@@ -5,10 +5,8 @@ import org.libvirt.jna.StoragePoolPointer;
import org.libvirt.jna.StorageVolPointer;
import org.libvirt.jna.virStoragePoolInfo;
import static org.libvirt.Library.libvirt;
-import static org.libvirt.ErrorHandler.processError;
import com.sun.jna.Native;
-import com.sun.jna.Pointer;
import com.sun.jna.ptr.IntByReference;
/**
@@ -74,7 +72,8 @@ public class StoragePool {
* future flags, use 0 for now
*/
public void build(int flags) throws LibvirtException {
- processError(libvirt.virStoragePoolBuild(VSPP, flags));
+ libvirt.virStoragePoolBuild(VSPP, flags);
+ processError();
}
/**
@@ -84,7 +83,8 @@ public class StoragePool {
* future flags, use 0 for now
*/
public void create(int flags) throws LibvirtException {
- processError(libvirt.virStoragePoolCreate(VSPP, flags));
+ libvirt.virStoragePoolCreate(VSPP, flags);
+ processError();
}
/**
@@ -95,7 +95,8 @@ public class StoragePool {
* flags for obliteration process
*/
public void delete(int flags) throws LibvirtException {
- processError(libvirt.virStoragePoolDelete(VSPP, flags));
+ libvirt.virStoragePoolDelete(VSPP, flags);
+ processError();
}
/**
@@ -105,7 +106,8 @@ public class StoragePool {
* This does not free the associated virStoragePoolPtr object.
*/
public void destroy() throws LibvirtException {
- processError(libvirt.virStoragePoolDestroy(VSPP));
+ libvirt.virStoragePoolDestroy(VSPP);
+ processError();
}
@Override
@@ -118,12 +120,13 @@ public class StoragePool {
* not change the state of the pool on the host.
*
* @throws LibvirtException
- * @return number of references left (>= 0)
+ * @return number of references left (>= 0) for success, -1 for failure.
*/
public int free() throws LibvirtException {
int success = 0;
if (VSPP != null) {
- success = processError(libvirt.virStoragePoolFree(VSPP));
+ success = libvirt.virStoragePoolFree(VSPP);
+ processError();
VSPP = null;
}
return success;
@@ -138,7 +141,8 @@ public class StoragePool {
*/
public boolean getAutostart() throws LibvirtException {
IntByReference autoStart = new IntByReference();
- processError(libvirt.virStoragePoolGetAutostart(VSPP, autoStart));
+ libvirt.virStoragePoolGetAutostart(VSPP, autoStart);
+ processError();
return autoStart.getValue() != 0 ? true : false;
}
@@ -160,7 +164,8 @@ public class StoragePool {
*/
public StoragePoolInfo getInfo() throws LibvirtException {
virStoragePoolInfo vInfo = new virStoragePoolInfo();
- processError(libvirt.virStoragePoolGetInfo(VSPP, vInfo));
+ libvirt.virStoragePoolGetInfo(VSPP, vInfo);
+ processError();
return new StoragePoolInfo(vInfo);
}
@@ -171,7 +176,9 @@ public class StoragePool {
* @throws LibvirtException
*/
public String getName() throws LibvirtException {
- return processError(libvirt.virStoragePoolGetName(VSPP));
+ String returnValue = libvirt.virStoragePoolGetName(VSPP);
+ processError();
+ return returnValue;
}
/**
@@ -182,8 +189,13 @@ public class StoragePool {
*/
public int[] getUUID() throws LibvirtException {
byte[] bytes = new byte[Libvirt.VIR_UUID_BUFLEN];
- processError(libvirt.virStoragePoolGetUUID(VSPP, bytes));
- return Connect.convertUUIDBytes(bytes);
+ int success = libvirt.virStoragePoolGetUUID(VSPP, bytes);
+ processError();
+ int[] returnValue = new int[0];
+ if (success == 0) {
+ returnValue = Connect.convertUUIDBytes(bytes);
+ }
+ return returnValue;
}
/**
@@ -194,8 +206,13 @@ public class StoragePool {
*/
public String getUUIDString() throws LibvirtException {
byte[] bytes = new byte[Libvirt.VIR_UUID_STRING_BUFLEN];
- processError(libvirt.virStoragePoolGetUUIDString(VSPP, bytes));
- return Native.toString(bytes);
+ int success = libvirt.virStoragePoolGetUUIDString(VSPP, bytes);
+ processError();
+ String returnValue = null;
+ if (success == 0) {
+ returnValue = Native.toString(bytes);
+ }
+ return returnValue;
}
/**
@@ -207,7 +224,9 @@ public class StoragePool {
* @return a XML document -java @throws LibvirtException
*/
public String getXMLDesc(int flags) throws LibvirtException {
- return processError(libvirt.virStoragePoolGetXMLDesc(VSPP, flags));
+ String returnValue = libvirt.virStoragePoolGetXMLDesc(VSPP, flags);
+ processError();
+ return returnValue;
}
/**
@@ -216,11 +235,13 @@ public class StoragePool {
* @see <a
* href="http://www.libvirt.org/html/libvirt-libvirt.html#virStoragePoolIsActive">Libvirt
* Documentation</a>
- * @return 1 if running, 0 if inactive
+ * @return 1 if running, 0 if inactive, -1 on error
* @throws LibvirtException
*/
public int isActive() throws LibvirtException {
- return processError(libvirt.virStoragePoolIsActive(VSPP));
+ int returnValue = libvirt.virStoragePoolIsActive(VSPP);
+ processError();
+ return returnValue;
}
/**
@@ -230,11 +251,13 @@ public class StoragePool {
* @see <a
* href="http://www.libvirt.org/html/libvirt-libvirt.html#virStoragePoolIsPersistent">Libvirt
* Documentation</a>
- * @return 1 if persistent, 0 if transient
+ * @return 1 if persistent, 0 if transient, -1 on error
* @throws LibvirtException
*/
public int isPersistent() throws LibvirtException {
- return processError(libvirt.virStoragePoolIsPersistent(VSPP));
+ int returnValue = libvirt.virStoragePoolIsPersistent(VSPP);
+ processError();
+ return returnValue;
}
/**
@@ -246,15 +269,10 @@ public class StoragePool {
*/
public String[] listVolumes() throws LibvirtException {
int num = numOfVolumes();
- if (num > 0) {
- Pointer[] ptrs = new Pointer[num];
-
- int got = processError(libvirt.virStoragePoolListVolumes(VSPP, ptrs, num));
-
- return Library.toStringArray(ptrs, got);
- } else {
- return Library.NO_STRINGS;
- }
+ String[] returnValue = new String[num];
+ libvirt.virStoragePoolListVolumes(VSPP, returnValue, num);
+ processError();
+ return returnValue;
}
/**
@@ -264,7 +282,13 @@ public class StoragePool {
* @throws LibvirtException
*/
public int numOfVolumes() throws LibvirtException {
- return processError(libvirt.virStoragePoolNumOfVolumes(VSPP));
+ int returnValue = libvirt.virStoragePoolNumOfVolumes(VSPP);
+ processError();
+ return returnValue;
+ }
+
+ protected void processError() throws LibvirtException {
+ virConnect.processError();
}
/**
@@ -277,7 +301,8 @@ public class StoragePool {
* @throws LibvirtException
*/
public void refresh(int flags) throws LibvirtException {
- processError(libvirt.virStoragePoolRefresh(VSPP, flags));
+ libvirt.virStoragePoolRefresh(VSPP, flags);
+ processError();
}
/**
@@ -303,7 +328,8 @@ public class StoragePool {
* @throws LibvirtException
*/
public StorageVol storageVolCreateXML(String xmlDesc, int flags) throws LibvirtException {
- StorageVolPointer sPtr = processError(libvirt.virStorageVolCreateXML(VSPP, xmlDesc, flags));
+ StorageVolPointer sPtr = libvirt.virStorageVolCreateXML(VSPP, xmlDesc, flags);
+ processError();
return new StorageVol(virConnect, sPtr);
}
@@ -312,12 +338,13 @@ public class StoragePool {
* as input. Information for the new volume (name, perms) are passed via a
* typical volume XML description.
*
- * @return The storage volume
+ * @return The storage volume, or {@code null} on error.
* @throws LibvirtException
*/
public StorageVol storageVolCreateXMLFrom(String xmlDesc, StorageVol cloneVolume, int flags)
throws LibvirtException {
- StorageVolPointer sPtr = processError(libvirt.virStorageVolCreateXMLFrom(VSPP, xmlDesc, cloneVolume.VSVP, flags));
+ StorageVolPointer sPtr = libvirt.virStorageVolCreateXMLFrom(VSPP, xmlDesc, cloneVolume.VSVP, flags);
+ processError();
return new StorageVol(virConnect, sPtr);
}
@@ -327,13 +354,13 @@ public class StoragePool {
*
* @param name
* name of storage volume
- * @return a StorageVol object, or {@code null} if not found.
+ * @return The StorageVol object found
* @throws LibvirtException
*/
public StorageVol storageVolLookupByName(String name) throws LibvirtException {
- StorageVolPointer sPtr = processError(libvirt.virStorageVolLookupByName(VSPP, name));
-
- return (sPtr == null) ? null : new StorageVol(virConnect, sPtr);
+ StorageVolPointer sPtr = libvirt.virStorageVolLookupByName(VSPP, name);
+ processError();
+ return new StorageVol(virConnect, sPtr);
}
/**
@@ -342,7 +369,8 @@ public class StoragePool {
* @throws LibvirtException
*/
public void undefine() throws LibvirtException {
- processError(libvirt.virStoragePoolUndefine(VSPP));
+ libvirt.virStoragePoolUndefine(VSPP);
+ processError();
}
}
diff --git a/src/main/java/org/libvirt/StorageVol.java b/src/main/java/org/libvirt/StorageVol.java
index 47b79f6..561cb4d 100644
--- a/src/main/java/org/libvirt/StorageVol.java
+++ b/src/main/java/org/libvirt/StorageVol.java
@@ -4,9 +4,6 @@ import org.libvirt.jna.StoragePoolPointer;
import org.libvirt.jna.StorageVolPointer;
import org.libvirt.jna.virStorageVolInfo;
import static org.libvirt.Library.libvirt;
-import static org.libvirt.ErrorHandler.processError;
-
-import com.sun.jna.Pointer;
/**
* An acutal storage bucket.
@@ -85,7 +82,8 @@ public class StorageVol {
* @throws LibvirtException
*/
public void delete(int flags) throws LibvirtException {
- processError(libvirt.virStorageVolDelete(VSVP, flags));
+ libvirt.virStorageVolDelete(VSVP, flags);
+ processError();
}
@Override
@@ -98,12 +96,13 @@ public class StorageVol {
* to exist
*
* @throws LibvirtException
- * @return number of references left (>= 0)
+ * @return number of references left (>= 0) for success, -1 for failure.
*/
public int free() throws LibvirtException {
int success = 0;
if (VSVP != null) {
- success = processError(libvirt.virStorageVolFree(VSVP));
+ libvirt.virStorageVolFree(VSVP);
+ processError();
VSVP = null;
}
return success;
@@ -128,7 +127,8 @@ public class StorageVol {
*/
public StorageVolInfo getInfo() throws LibvirtException {
virStorageVolInfo vInfo = new virStorageVolInfo();
- processError(libvirt.virStorageVolGetInfo(VSVP, vInfo));
+ libvirt.virStorageVolGetInfo(VSVP, vInfo);
+ processError();
return new StorageVolInfo(vInfo);
}
@@ -140,7 +140,9 @@ public class StorageVol {
* @throws LibvirtException
*/
public String getKey() throws LibvirtException {
- return processError(libvirt.virStorageVolGetKey(VSVP));
+ String returnValue = libvirt.virStorageVolGetKey(VSVP);
+ processError();
+ return returnValue;
}
/**
@@ -150,7 +152,9 @@ public class StorageVol {
* @throws LibvirtException
*/
public String getName() throws LibvirtException {
- return processError(libvirt.virStorageVolGetName(VSVP));
+ String returnValue = libvirt.virStorageVolGetName(VSVP);
+ processError();
+ return returnValue;
}
/**
@@ -163,13 +167,9 @@ public class StorageVol {
* @throws LibvirtException
*/
public String getPath() throws LibvirtException {
- Pointer p = processError(libvirt.virStorageVolGetPath(VSVP));
-
- try {
- return Library.getString(p);
- } finally {
- Library.free(p);
- }
+ String returnValue = libvirt.virStorageVolGetPath(VSVP);
+ processError();
+ return returnValue;
}
/**
@@ -181,35 +181,43 @@ public class StorageVol {
* @throws LibvirtException
*/
public String getXMLDesc(int flags) throws LibvirtException {
- Pointer p = processError(libvirt.virStorageVolGetXMLDesc(VSVP, flags));
+ String returnValue = libvirt.virStorageVolGetXMLDesc(VSVP, flags);
+ processError();
+ return returnValue;
+ }
- try {
- return Library.getString(p);
- } finally {
- Library.free(p);
- }
+ /**
+ * Error handling logic which should be called after every libvirt call
+ *
+ * @throws LibvirtException
+ */
+ protected void processError() throws LibvirtException {
+ virConnect.processError();
}
/**
* Fetch a storage pool which contains this volume
*
- * @return StoragePool object, or {@code null} if not found.
+ * @return StoragePool object,
* @throws LibvirtException
*/
public StoragePool storagePoolLookupByVolume() throws LibvirtException {
- StoragePoolPointer ptr = processError(libvirt.virStoragePoolLookupByVolume(VSVP));
- return (ptr == null) ? null : new StoragePool(virConnect, ptr);
+ StoragePoolPointer ptr = libvirt.virStoragePoolLookupByVolume(VSVP);
+ processError();
+ return new StoragePool(virConnect, ptr);
}
/**
* Ensure data previously on a volume is not accessible to future reads
*
* @see <a href="http://www.libvirt.org/html/libvirt-libvirt.html#virStorageVolWipe">Libvirt Documentation</a>
- * @return <em>ignore</em> (always 0)
+ * @return 0 on success, or -1 on error
* @throws LibvirtException
*/
public int wipe() throws LibvirtException {
- return processError(libvirt.virStorageVolWipe(VSVP, 0));
+ int returnValue = libvirt.virStorageVolWipe(VSVP, 0);
+ processError();
+ return returnValue;
}
/**
@@ -220,10 +228,12 @@ public class StorageVol {
* new capacity for volume
* @param flags
* flags for resizing, see libvirt API for exact flags
- * @return <em>ignore</em> (always 0)
+ * @return 0 on success, or -1 on error
* @throws LibvirtException
*/
public int resize(long capacity, int flags) throws LibvirtException {
- return processError(libvirt.virStorageVolResize(VSVP, capacity, flags));
+ int returnValue = libvirt.virStorageVolResize(VSVP, capacity, flags);
+ processError();
+ return returnValue;
}
}
diff --git a/src/main/java/org/libvirt/Stream.java b/src/main/java/org/libvirt/Stream.java
index c36ed70..84e300c 100644
--- a/src/main/java/org/libvirt/Stream.java
+++ b/src/main/java/org/libvirt/Stream.java
@@ -1,10 +1,10 @@
package org.libvirt;
import org.libvirt.jna.Libvirt;
-import org.libvirt.jna.SizeT;
import org.libvirt.jna.StreamPointer;
import static org.libvirt.Library.libvirt;
-import static org.libvirt.ErrorHandler.processError;
+
+import com.sun.jna.NativeLong;
public class Stream {
@@ -28,11 +28,11 @@ public class Stream {
/**
* Request that the in progress data transfer be cancelled abnormally before
* the end of the stream has been reached
- *
- * @return <em>ignore</em> (always 0)
*/
public int abort() throws LibvirtException {
- return processError(libvirt.virStreamAbort(VSP));
+ int returnValue = libvirt.virStreamAbort(VSP);
+ processError();
+ return returnValue;
}
/**
@@ -46,11 +46,13 @@ public class Stream {
* the events to monitor
* @param cb
* the callback method
- * @return <em>ignore</em> (always 0)
+ * @return 0 for success, -1 for failure
* @throws LibvirtException
*/
public int addCallback(int events, Libvirt.VirStreamEventCallback cb) throws LibvirtException {
- return processError(libvirt.virStreamEventAddCallback(VSP, events, cb, null, null));
+ int returnValue = libvirt.virStreamEventAddCallback(VSP, events, cb, null, null);
+ processError();
+ return returnValue;
}
@Override
@@ -62,24 +64,27 @@ public class Stream {
* Indicate that there is no further data is to be transmitted on the
* stream.
*
- * @return <em>ignore</em> (always 0)
+ * @return 0 if success, -1 if failure
* @throws LibvirtException
*/
public int finish() throws LibvirtException {
- return processError(libvirt.virStreamFinish(VSP));
+ int returnValue = libvirt.virStreamFinish(VSP);
+ processError();
+ return returnValue;
}
/**
* Decrement the reference count on a stream, releasing the stream object if
* the reference count has hit zero.
*
- * @return <em>ignore</em> (always 0)
* @throws LibvirtException
+ * @return 0 on success, or -1 on error.
*/
public int free() throws LibvirtException {
int success = 0;
if (VSP != null) {
- processError(libvirt.virStreamFree(VSP));
+ success = libvirt.virStreamFree(VSP);
+ processError();
VSP = null;
}
@@ -87,15 +92,25 @@ public class Stream {
}
/**
- * Receives data from the stream into the buffer provided.
+ * Error handling logic to throw errors. Must be called after every libvirt
+ * call.
+ */
+ protected void processError() throws LibvirtException {
+ virConnect.processError();
+ }
+
+ /**
+ * Receieves data from teh stream into the buffer provided.
*
* @param data
- * buffer to put the data into
+ * the put the sata into
* @return the number of bytes read, -1 on error, -2 if the buffer is empty
* @throws LibvirtException
*/
public int receive(byte[] data) throws LibvirtException {
- return processError(libvirt.virStreamRecv(VSP, data, new SizeT(data.length)));
+ int returnValue = libvirt.virStreamRecv(VSP, data, new NativeLong(data.length));
+ processError();
+ return returnValue;
}
/**
@@ -104,22 +119,26 @@ public class Stream {
* @see <a href="http://www.libvirt.org/html/libvirt-libvirt.html#virStreamRecvAll">virStreamRecvAll</a>
* @param handler
* the callback handler
- * @return <em>ignore</em> (always 0)
+ * @return 0 if successfule, -1 otherwise
* @throws LibvirtException
*/
public int receiveAll(Libvirt.VirStreamSinkFunc handler) throws LibvirtException {
- return processError(libvirt.virStreamRecvAll(VSP, handler, null));
+ int returnValue = libvirt.virStreamRecvAll(VSP, handler, null);
+ processError();
+ return returnValue;
}
/**
* Remove an event callback from the stream
*
* @see <a href="http://www.libvirt.org/html/libvirt-libvirt.html#virStreamEventRemoveCall...">Libvirt Docs</a>
- * @return <em>ignore</em> (always 0)
+ * @return 0 for success, -1 for failure
* @throws LibvirtException
*/
public int removeCallback() throws LibvirtException {
- return processError(libvirt.virStreamEventRemoveCallback(VSP));
+ int returnValue = libvirt.virStreamEventRemoveCallback(VSP);
+ processError();
+ return returnValue;
}
/**
@@ -132,7 +151,9 @@ public class Stream {
* @throws LibvirtException
*/
public int send(String data) throws LibvirtException {
- return processError(libvirt.virStreamSend(VSP, data, new SizeT(data.length())));
+ int returnValue = libvirt.virStreamSend(VSP, data, new NativeLong(data.length()));
+ processError();
+ return returnValue;
}
/**
@@ -143,11 +164,13 @@ public class Stream {
* Documentation</a>
* @param handler
* the callback handler
- * @return <em>ignore</em> (always 0)
+ * @return 0 if successfule, -1 otherwise
* @throws LibvirtException
*/
public int sendAll(Libvirt.VirStreamSourceFunc handler) throws LibvirtException {
- return processError(libvirt.virStreamSendAll(VSP, handler, null));
+ int returnValue = libvirt.virStreamSendAll(VSP, handler, null);
+ processError();
+ return returnValue;
}
/**
@@ -156,10 +179,12 @@ public class Stream {
* @see <a href="http://www.libvirt.org/html/libvirt-libvirt.html#virStreamEventUpdateCall...">Libvirt Docs</a>
* @param events
* the events to monitor
- * @return <em>ignore</em> (always 0)
+ * @return 0 for success, -1 for failure
* @throws LibvirtException
*/
public int updateCallback(int events) throws LibvirtException {
- return processError(libvirt.virStreamEventUpdateCallback(VSP, events));
+ int returnValue = libvirt.virStreamEventUpdateCallback(VSP, events);
+ processError();
+ return returnValue;
}
}
diff --git a/src/main/java/org/libvirt/jna/Libvirt.java b/src/main/java/org/libvirt/jna/Libvirt.java
index 0e4c9fc..230d63c 100644
--- a/src/main/java/org/libvirt/jna/Libvirt.java
+++ b/src/main/java/org/libvirt/jna/Libvirt.java
@@ -4,7 +4,6 @@ import com.sun.jna.Callback;
import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.NativeLong;
-import com.sun.jna.Platform;
import com.sun.jna.Pointer;
import com.sun.jna.ptr.IntByReference;
import com.sun.jna.ptr.LongByReference;
@@ -97,13 +96,14 @@ public interface Libvirt extends Library {
void eventCallback(ConnectionPointer virConnectPtr, DomainPointer virDomainPointer, Pointer opaque) ;
}
- Libvirt INSTANCE = (Libvirt) Native.loadLibrary(Platform.isWindows() ? "virt-0" : "virt", Libvirt.class);
+ Libvirt INSTANCE = (Libvirt) Native.loadLibrary("virt", Libvirt.class);
// Constants we need
public static int VIR_UUID_BUFLEN = 16;
public static int VIR_UUID_STRING_BUFLEN = (36 + 1);
public static int VIR_DOMAIN_SCHED_FIELD_LENGTH = 80;
+ public static int VIR_NODE_CPU_STATS_FIELD_LENGTH = 256;
// Connection Functions
String virConnectBaselineCPU(ConnectionPointer virConnectPtr, String[] xmlCPUs, int ncpus, int flags);
@@ -180,20 +180,26 @@ public interface Libvirt extends Library {
int virDomainAbortJob(DomainPointer virDomainPtr);
int virDomainAttachDevice(DomainPointer virDomainPtr, String deviceXML);
int virDomainAttachDeviceFlags(DomainPointer virDomainPtr, String deviceXML, int flags);
- int virDomainBlockStats(DomainPointer virDomainPtr, String path, virDomainBlockStats stats, SizeT size);
+ int virDomainBlockStats(DomainPointer virDomainPtr, String path, virDomainBlockStats stats, int size);
int virDomainBlockResize(DomainPointer virDomainPtr, String disk, long size, int flags);
int virDomainCoreDump(DomainPointer virDomainPtr, String to, int flags);
+ int virDomainGetVcpus(DomainPointer virDomainPtr, virDomainCPUStats[] stats, int nr_stats,char[] map, int flags);
int virDomainCreate(DomainPointer virDomainPtr);
int virDomainCreateWithFlags(DomainPointer virDomainPtr, int flags);
DomainPointer virDomainCreateLinux(ConnectionPointer virConnectPtr, String xmlDesc, int flags);
DomainPointer virDomainCreateXML(ConnectionPointer virConnectPtr, String xmlDesc, int flags);
DomainPointer virDomainDefineXML(ConnectionPointer virConnectPtr, String xmlDesc);
int virDomainDestroy(DomainPointer virDomainPtr);
+ int virDomainDestroyFlags(DomainPointer virDomainPtr,long flags);
int virDomainDetachDevice(DomainPointer virDomainPtr, String deviceXML);
int virDomainDetachDeviceFlags(DomainPointer virDomainPtr, String deviceXML, int flags);
int virDomainFree(DomainPointer virDomainPtr);
int virDomainGetAutostart(DomainPointer virDomainPtr, IntByReference value);
int virDomainGetBlockInfo(DomainPointer virDomainPtr, String path, virDomainBlockInfo info, int flags);
+
+ int virDomainGetCPUStats(DomainPointer virDomainPtr,virTypedParameter[] params,
+ long nparams,int start_cpu,long ncpus,long flags);
+
int virDomainGetID(DomainPointer virDomainPtr);
int virDomainGetInfo(DomainPointer virDomainPtr, virDomainInfo vInfo);
int virDomainGetJobInfo(DomainPointer virDomainPtr, virDomainJobInfo vInfo);
@@ -210,7 +216,7 @@ public interface Libvirt extends Library {
Pointer virDomainGetXMLDesc(DomainPointer virDomainPtr, int flags);
int virDomainHasCurrentSnapshot(DomainPointer virDomainPtr, int flags);
int virDomainHasManagedSaveImage(DomainPointer virDomainPtr, int flags);
- int virDomainInterfaceStats(DomainPointer virDomainPtr, String path, virDomainInterfaceStats stats, SizeT size);
+ int virDomainInterfaceStats(DomainPointer virDomainPtr, String path, virDomainInterfaceStats stats, int size);
int virDomainIsActive(DomainPointer virDomainPtr);
int virDomainIsPersistent(DomainPointer virDomainPtr);
DomainPointer virDomainLookupByID(ConnectionPointer virConnectPtr, int id);
@@ -241,6 +247,7 @@ public interface Libvirt extends Library {
int virDomainSetSchedulerParameters(DomainPointer virDomainPtr, virSchedParameter[] params, int nparams);
int virDomainSetVcpus(DomainPointer virDomainPtr, int nvcpus);
int virDomainShutdown(DomainPointer virDomainPtr);
+ int virDomainShutdownFlags(DomainPointer virDomainPtr,long flags);
int virDomainSuspend(DomainPointer virDomainPtr);
int virDomainUpdateDeviceFlags(DomainPointer virDomainPtr, String xml, int flags);
int virDomainUndefine(DomainPointer virDomainPtr);
@@ -271,7 +278,10 @@ public interface Libvirt extends Library {
int virNodeGetCellsFreeMemory(ConnectionPointer virConnectPtr, LongByReference freeMems, int startCell,
int maxCells);
long virNodeGetFreeMemory(ConnectionPointer virConnectPtr);
-
+
+ int virNodeGetCPUStats(ConnectionPointer virConnectPtr, int cpuNum,
+ virNodeCPUStats[] stats,IntByReference nparams, long flags);
+
// Node/Device functions
int virNodeNumOfDevices(ConnectionPointer virConnectPtr, String capabilityName, int flags);
int virNodeListDevices(ConnectionPointer virConnectPtr, String capabilityName, Pointer[] names, int maxnames,
@@ -280,7 +290,7 @@ public interface Libvirt extends Library {
String virNodeDeviceGetName(DevicePointer virDevicePointer);
String virNodeDeviceGetParent(DevicePointer virDevicePointer);
int virNodeDeviceNumOfCaps(DevicePointer virDevicePointer);
- int virNodeDeviceListCaps(DevicePointer virDevicePointer, Pointer[] names, int maxNames);
+ int virNodeDeviceListCaps(DevicePointer virDevicePointer, String[] names, int maxNames);
String virNodeDeviceGetXMLDesc(DevicePointer virDevicePointer);
int virNodeDeviceFree(DevicePointer virDevicePointer);
int virNodeDeviceDettach(DevicePointer virDevicePointer);
@@ -303,7 +313,7 @@ public interface Libvirt extends Library {
int virStoragePoolGetUUID(StoragePoolPointer storagePoolPtr, byte[] uuidString);
int virStoragePoolGetUUIDString(StoragePoolPointer storagePoolPtr, byte[] uuidString);
String virStoragePoolGetXMLDesc(StoragePoolPointer storagePoolPtr, int flags);
- int virStoragePoolListVolumes(StoragePoolPointer storagePoolPtr, Pointer[] names, int maxnames);
+ int virStoragePoolListVolumes(StoragePoolPointer storagePoolPtr, String[] names, int maxnames);
int virStoragePoolIsActive(StoragePoolPointer storagePoolPtr);
int virStoragePoolIsPersistent(StoragePoolPointer storagePoolPtr);
StoragePoolPointer virStoragePoolLookupByName(ConnectionPointer virConnectPtr, String name);
@@ -324,8 +334,8 @@ public interface Libvirt extends Library {
int virStorageVolGetInfo(StorageVolPointer storageVolPtr, virStorageVolInfo info);
String virStorageVolGetKey(StorageVolPointer storageVolPtr);
String virStorageVolGetName(StorageVolPointer storageVolPtr);
- Pointer virStorageVolGetPath(StorageVolPointer storageVolPtr);
- Pointer virStorageVolGetXMLDesc(StorageVolPointer storageVolPtr, int flags);
+ String virStorageVolGetPath(StorageVolPointer storageVolPtr);
+ String virStorageVolGetXMLDesc(StorageVolPointer storageVolPtr, int flags);
StorageVolPointer virStorageVolLookupByKey(ConnectionPointer virConnectPtr, String name);
StorageVolPointer virStorageVolLookupByName(StoragePoolPointer storagePoolPtr, String name);
StorageVolPointer virStorageVolLookupByPath(ConnectionPointer virConnectPtr, String path);
@@ -351,13 +361,13 @@ public interface Libvirt extends Library {
int virSecretGetUUID(SecretPointer virSecretPtr, byte[] uuidString);
int virSecretGetUUIDString(SecretPointer virSecretPtr, byte[] uuidString);
String virSecretGetUsageID(SecretPointer virSecretPtr);
- Pointer virSecretGetValue(SecretPointer virSecretPtr, SizeTByReference value_size, int flags);
+ Pointer virSecretGetValue(SecretPointer virSecretPtr, LongByReference value_size, int flags);
String virSecretGetXMLDesc(SecretPointer virSecretPtr, int flags);
SecretPointer virSecretLookupByUsage(ConnectionPointer virConnectPtr, int usageType, String usageID);
SecretPointer virSecretLookupByUUID(ConnectionPointer virConnectPtr, byte[] uuidBytes);
SecretPointer virSecretLookupByUUIDString(ConnectionPointer virConnectPtr, String uuidstr);
- int virSecretSetValue(SecretPointer virSecretPtr, String value, SizeT value_size, int flags);
- int virSecretSetValue(SecretPointer virSecretPtr, byte[] value, SizeT value_size, int flags);
+ int virSecretSetValue(SecretPointer virSecretPtr, String value, NativeLong value_size, int flags);
+ int virSecretSetValue(SecretPointer virSecretPtr, byte[] value, NativeLong value_size, int flags);
int virSecretUndefine(SecretPointer virSecretPtr);
//Stream Methods
@@ -369,18 +379,18 @@ public interface Libvirt extends Library {
int virStreamFinish(StreamPointer virStreamPtr) ;
int virStreamFree(StreamPointer virStreamPtr) ;
StreamPointer virStreamNew(ConnectionPointer virConnectPtr, int flags) ;
- int virStreamSend(StreamPointer virStreamPtr, String data, SizeT size);
+ int virStreamSend(StreamPointer virStreamPtr, String data, NativeLong size);
int virStreamSendAll(StreamPointer virStreamPtr, Libvirt.VirStreamSourceFunc handler, Pointer opaque);
- int virStreamRecv(StreamPointer virStreamPtr, byte[] data, SizeT length);
+ int virStreamRecv(StreamPointer virStreamPtr, byte[] data, NativeLong length);
int virStreamRecvAll(StreamPointer virStreamPtr, Libvirt.VirStreamSinkFunc handler, Pointer opaque);
//DomainSnapshot Methods
DomainSnapshotPointer virDomainSnapshotCreateXML(DomainPointer virDomainPtr, String xmlDesc, int flags);
DomainSnapshotPointer virDomainSnapshotCurrent(DomainPointer virDomainPtr, int flags);
int virDomainSnapshotDelete(DomainSnapshotPointer virDomainSnapshotPtr, int flags);
- Pointer virDomainSnapshotGetXMLDesc(DomainSnapshotPointer virDomainSnapshotPtr, int flags);
+ String virDomainSnapshotGetXMLDesc(DomainSnapshotPointer virDomainSnapshotPtr, int flags);
int virDomainSnapshotFree(DomainSnapshotPointer virDomainSnapshotPtr);
- int virDomainSnapshotListNames(DomainPointer virDomainPtr, Pointer[] names, int nameslen, int flags);
+ int virDomainSnapshotListNames(DomainPointer virDomainPtr, String[] names, int nameslen, int flags);
DomainSnapshotPointer virDomainSnapshotLookupByName(DomainPointer virDomainPtr, String name, int flags);
int virDomainSnapshotNum(DomainPointer virDomainPtr, int flags);
diff --git a/src/main/java/org/libvirt/jna/VirUnion.java b/src/main/java/org/libvirt/jna/VirUnion.java
new file mode 100644
index 0000000..ba089e0
--- /dev/null
+++ b/src/main/java/org/libvirt/jna/VirUnion.java
@@ -0,0 +1,14 @@
+package org.libvirt.jna;
+
+import com.sun.jna.Union;
+import com.sun.jna.ptr.ByteByReference;
+
+public class VirUnion extends Union{
+ public int i;
+ public long ui;
+ public long l;
+ public long ul;
+ public double d;
+ public char b;
+ public ByteByReference s = new ByteByReference();
+}
diff --git a/src/main/java/org/libvirt/jna/virConnectAuth.java b/src/main/java/org/libvirt/jna/virConnectAuth.java
index 0451348..ece61f6 100644
--- a/src/main/java/org/libvirt/jna/virConnectAuth.java
+++ b/src/main/java/org/libvirt/jna/virConnectAuth.java
@@ -15,11 +15,11 @@ public class virConnectAuth extends Structure {
public Libvirt.VirConnectAuthCallback cb;
public Pointer cbdata;
- private static final List<String> fields = Arrays.asList(
+ private static final List fields = Arrays.asList(
"credtype", "ncredtype", "cb", "cbdata");
@Override
- protected List<String> getFieldOrder() {
+ protected List getFieldOrder() {
return fields;
}
}
diff --git a/src/main/java/org/libvirt/jna/virConnectCredential.java b/src/main/java/org/libvirt/jna/virConnectCredential.java
index 316b1f4..6dd4a75 100644
--- a/src/main/java/org/libvirt/jna/virConnectCredential.java
+++ b/src/main/java/org/libvirt/jna/virConnectCredential.java
@@ -17,12 +17,12 @@ public class virConnectCredential extends Structure implements Structure.ByRefer
public String result;
public int resultlen;
- private static final List<String> fields = Arrays.asList(
+ private static final List fields = Arrays.asList(
"type", "prompt", "challenge", "defresult",
"result", "resultlen");
@Override
- protected List<String> getFieldOrder() {
+ protected List getFieldOrder() {
return fields;
}
}
diff --git a/src/main/java/org/libvirt/jna/virDomainBlockInfo.java b/src/main/java/org/libvirt/jna/virDomainBlockInfo.java
index 5a88ba3..fb1b845 100644
--- a/src/main/java/org/libvirt/jna/virDomainBlockInfo.java
+++ b/src/main/java/org/libvirt/jna/virDomainBlockInfo.java
@@ -10,11 +10,11 @@ public class virDomainBlockInfo extends Structure {
public long allocation;
public long physical;
- private static final List<String> fields = Arrays.asList(
+ private static final List fields = Arrays.asList(
"capacity", "allocation", "physical");
@Override
- protected List<String> getFieldOrder() {
+ protected List getFieldOrder() {
return fields;
}
}
diff --git a/src/main/java/org/libvirt/jna/virDomainBlockStats.java b/src/main/java/org/libvirt/jna/virDomainBlockStats.java
index e48629a..a7331f6 100644
--- a/src/main/java/org/libvirt/jna/virDomainBlockStats.java
+++ b/src/main/java/org/libvirt/jna/virDomainBlockStats.java
@@ -20,11 +20,11 @@ public class virDomainBlockStats extends Structure {
public long errs; // this is a long long in the code, so a long mapping is
// correct
- private static final List<String> fields = Arrays.asList(
+ private static final List fields = Arrays.asList(
"rd_req", "rd_bytes", "wr_req", "wr_bytes", "errs");
@Override
- protected List<String> getFieldOrder() {
+ protected List getFieldOrder() {
return fields;
}
}
diff --git a/src/main/java/org/libvirt/jna/virDomainCPUStats.java b/src/main/java/org/libvirt/jna/virDomainCPUStats.java
new file mode 100644
index 0000000..04d5377
--- /dev/null
+++ b/src/main/java/org/libvirt/jna/virDomainCPUStats.java
@@ -0,0 +1,21 @@
+package org.libvirt.jna;
+
+import java.util.Arrays;
+import java.util.List;
+
+import com.sun.jna.Structure;
+
+public class virDomainCPUStats extends Structure{
+ public long number ;
+ public long state ;
+ public long cpuTime;
+ public long cpu;
+
+ private static final List fields = Arrays.asList( "number", "state",
+ "cpuTime","cpu");
+
+ @Override
+ protected List getFieldOrder() {
+ return fields;
+ }
+}
diff --git a/src/main/java/org/libvirt/jna/virDomainInfo.java b/src/main/java/org/libvirt/jna/virDomainInfo.java
index ff20d16..0b667f6 100644
--- a/src/main/java/org/libvirt/jna/virDomainInfo.java
+++ b/src/main/java/org/libvirt/jna/virDomainInfo.java
@@ -16,11 +16,11 @@ public class virDomainInfo extends Structure {
public short nrVirtCpu;
public long cpuTime;
- private static final List<String> fields = Arrays.asList(
+ private static final List fields = Arrays.asList(
"state", "maxMem", "memory", "nrVirtCpu", "cpuTime");
@Override
- protected List<String> getFieldOrder() {
+ protected List getFieldOrder() {
return fields;
}
}
diff --git a/src/main/java/org/libvirt/jna/virDomainInterfaceStats.java b/src/main/java/org/libvirt/jna/virDomainInterfaceStats.java
index 9b98aa8..eea6a49 100644
--- a/src/main/java/org/libvirt/jna/virDomainInterfaceStats.java
+++ b/src/main/java/org/libvirt/jna/virDomainInterfaceStats.java
@@ -26,12 +26,12 @@ public class virDomainInterfaceStats extends Structure {
public long tx_drop; // this is a long long in the code, so a long mapping
// is correct
- private static final List<String> fields = Arrays.asList(
+ private static final List fields = Arrays.asList(
"rx_bytes", "rx_packets", "rx_errs", "rx_drop",
"tx_bytes", "tx_packets", "tx_errs", "tx_drop");
@Override
- protected List<String> getFieldOrder() {
+ protected List getFieldOrder() {
return fields;
}
}
diff --git a/src/main/java/org/libvirt/jna/virDomainJobInfo.java b/src/main/java/org/libvirt/jna/virDomainJobInfo.java
index 1bab587..0398901 100644
--- a/src/main/java/org/libvirt/jna/virDomainJobInfo.java
+++ b/src/main/java/org/libvirt/jna/virDomainJobInfo.java
@@ -19,13 +19,13 @@ public class virDomainJobInfo extends Structure {
public long fileProcessed;
public long fileRemaining;
- private static final List<String> fields = Arrays.asList(
+ private static final List fields = Arrays.asList(
"type", "timeElapsed", "timeRemaining", "dataTotal",
"dataProcessed", "dataRemaining", "memTotal", "memProcessed",
"memRemaining", "fileTotal", "fileProcessed", "fileRemaining");
@Override
- protected List<String> getFieldOrder() {
+ protected List getFieldOrder() {
return fields;
}
}
diff --git a/src/main/java/org/libvirt/jna/virDomainMemoryStats.java b/src/main/java/org/libvirt/jna/virDomainMemoryStats.java
index dfbd3f9..b14fb95 100644
--- a/src/main/java/org/libvirt/jna/virDomainMemoryStats.java
+++ b/src/main/java/org/libvirt/jna/virDomainMemoryStats.java
@@ -9,10 +9,10 @@ public class virDomainMemoryStats extends Structure {
public int tag ;
public long val ;
- private static final List<String> fields = Arrays.asList( "tag", "val");
+ private static final List fields = Arrays.asList( "tag", "val");
@Override
- protected List<String> getFieldOrder() {
+ protected List getFieldOrder() {
return fields;
}
}
diff --git a/src/main/java/org/libvirt/jna/virError.java b/src/main/java/org/libvirt/jna/virError.java
index e58f5f3..36b9f69 100644
--- a/src/main/java/org/libvirt/jna/virError.java
+++ b/src/main/java/org/libvirt/jna/virError.java
@@ -22,12 +22,12 @@ public class virError extends Structure {
public int int2;
public NetworkPointer net;
- private static final List<String> fields = Arrays.asList(
+ private static final List fields = Arrays.asList(
"code", "domain", "message", "level", "conn", "dom",
"str1", "str2", "str3", "int1", "int2", "net");
@Override
- protected List<String> getFieldOrder() {
+ protected List getFieldOrder() {
return fields;
}
}
diff --git a/src/main/java/org/libvirt/jna/virNodeCPUStats.java b/src/main/java/org/libvirt/jna/virNodeCPUStats.java
new file mode 100644
index 0000000..89c1a24
--- /dev/null
+++ b/src/main/java/org/libvirt/jna/virNodeCPUStats.java
@@ -0,0 +1,19 @@
+package org.libvirt.jna;
+
+import java.util.Arrays;
+import java.util.List;
+
+import com.sun.jna.NativeLong;
+import com.sun.jna.Structure;
+
+public class virNodeCPUStats extends Structure{
+ public byte[] tag = new byte[80];
+ public long val ;
+
+ private static final List fields = Arrays.asList( "tag", "val");
+
+ @Override
+ protected List getFieldOrder() {
+ return fields;
+ }
+}
diff --git a/src/main/java/org/libvirt/jna/virNodeInfo.java b/src/main/java/org/libvirt/jna/virNodeInfo.java
index 7a7716e..9ff1251 100644
--- a/src/main/java/org/libvirt/jna/virNodeInfo.java
+++ b/src/main/java/org/libvirt/jna/virNodeInfo.java
@@ -25,12 +25,12 @@ public class virNodeInfo extends Structure {
public int cores;
public int threads;
- private static final List<String> fields = Arrays.asList(
+ private static final List fields = Arrays.asList(
"model", "memory", "cpus", "mhz", "nodes",
"sockets", "cores", "threads");
@Override
- protected List<String> getFieldOrder() {
+ protected List getFieldOrder() {
return fields;
}
}
diff --git a/src/main/java/org/libvirt/jna/virSchedParameter.java b/src/main/java/org/libvirt/jna/virSchedParameter.java
index f3787a9..f579ef0 100644
--- a/src/main/java/org/libvirt/jna/virSchedParameter.java
+++ b/src/main/java/org/libvirt/jna/virSchedParameter.java
@@ -13,11 +13,11 @@ public class virSchedParameter extends Structure {
public int type;
public virSchedParameterValue value;
- private static final List<String> fields = Arrays.asList(
+ private static final List fields = Arrays.asList(
"field", "type", "value");
@Override
- protected List<String> getFieldOrder() {
+ protected List getFieldOrder() {
return fields;
}
}
diff --git a/src/main/java/org/libvirt/jna/virStoragePoolInfo.java b/src/main/java/org/libvirt/jna/virStoragePoolInfo.java
index 7077175..fe20f0f 100644
--- a/src/main/java/org/libvirt/jna/virStoragePoolInfo.java
+++ b/src/main/java/org/libvirt/jna/virStoragePoolInfo.java
@@ -17,11 +17,11 @@ public class virStoragePoolInfo extends Structure {
public long available; // this is a long long in the code, so a long mapping
// is correct
- private static final List<String> fields = Arrays.asList(
+ private static final List fields = Arrays.asList(
"state", "capacity", "allocation", "available");
@Override
- protected List<String> getFieldOrder() {
+ protected List getFieldOrder() {
return fields;
}
}
diff --git a/src/main/java/org/libvirt/jna/virStorageVolInfo.java b/src/main/java/org/libvirt/jna/virStorageVolInfo.java
index 8bf2d5c..93132ea 100644
--- a/src/main/java/org/libvirt/jna/virStorageVolInfo.java
+++ b/src/main/java/org/libvirt/jna/virStorageVolInfo.java
@@ -15,11 +15,11 @@ public class virStorageVolInfo extends Structure {
public long allocation; // this is a long long in the code, so a long
// mapping is correct
- private static final List<String> fields = Arrays.asList(
+ private static final List fields = Arrays.asList(
"type", "capacity", "allocation");
@Override
- protected List<String> getFieldOrder() {
+ protected List getFieldOrder() {
return fields;
}
}
diff --git a/src/main/java/org/libvirt/jna/virTypedParameter.java b/src/main/java/org/libvirt/jna/virTypedParameter.java
new file mode 100644
index 0000000..4fe48f6
--- /dev/null
+++ b/src/main/java/org/libvirt/jna/virTypedParameter.java
@@ -0,0 +1,22 @@
+package org.libvirt.jna;
+
+import java.util.Arrays;
+import java.util.List;
+
+import com.sun.jna.Structure;
+
+public class virTypedParameter extends Structure{
+
+ public byte[] field = new byte[80];
+ public int type;
+ public VirUnion value;
+
+ private static final List fields = Arrays.asList( "field", "type",
+ "value");
+ @Override
+ protected List getFieldOrder() {
+ // TODO Auto-generated method stub
+ return fields;
+ }
+
+}
diff --git a/src/main/java/org/libvirt/jna/virVcpuInfo.java b/src/main/java/org/libvirt/jna/virVcpuInfo.java
index bc1a539..96eca2f 100644
--- a/src/main/java/org/libvirt/jna/virVcpuInfo.java
+++ b/src/main/java/org/libvirt/jna/virVcpuInfo.java
@@ -15,11 +15,11 @@ public class virVcpuInfo extends Structure {
// is correct
public int cpu;
- private static final List<String> fields = Arrays.asList(
+ private static final List fields = Arrays.asList(
"number", "state", "cpuTime", "cpu");
@Override
- protected List<String> getFieldOrder() {
+ protected List getFieldOrder() {
return fields;
}
}
--
1.8.3.2
10 years, 7 months
[libvirt] [PATCH 2/2] added my name to authors :)
by phate867@gmail.com
From: Pasquale Di Rienzo <phate867(a)gmail.com>
---
AUTHORS | 1 +
1 file changed, 1 insertion(+)
diff --git a/AUTHORS b/AUTHORS
index 07809bf..e8bcb2b 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -16,3 +16,4 @@ Andrea Sansottera <andrea.sansottera(a)gmail.com>
Stefan Majer <stefan.majer(a)gmail.com>
Wido den Hollander <wido(a)widodh.nl>
Eric Blake <eblake(a)redhat.com>
+Pasquale Di Rienzo <phate867(a)gmail.com>
\ No newline at end of file
--
1.8.3.2
10 years, 7 months
[libvirt] [PATCH 0/3] bhyve: capabilities and CPU-capabilities support
by Wojciech Macek
Add following changes:
- support for connectBaselineCPU (required by OpenStack)
- move capabilites functions to separate file + API change
- implement connectCompareCPU
Wojciech Macek (3):
bhyve: support for connectBaselineCPU
bhyve: create capabilities submodule
bhyve: connectCompareCPU support
src/Makefile.am | 2 +
src/bhyve/bhyve_capabilities.c | 105 ++++++++++++++++++++++++++++++++++++++++
src/bhyve/bhyve_capabilities.h | 30 ++++++++++++
src/bhyve/bhyve_driver.c | 107 ++++++++++++++++++++++++++++++++---------
4 files changed, 222 insertions(+), 22 deletions(-)
create mode 100644 src/bhyve/bhyve_capabilities.c
create mode 100644 src/bhyve/bhyve_capabilities.h
--
1.9.0
10 years, 7 months
[libvirt] [PATCH v3 0/2] bhyve: add console support through nmdm device
by Roman Bogorodskiy
Changes from v2:
- Add unittest
- Minor: new labels style and target for 1.2.4
Changes from v1:
Switch over from implicit slave device path, i.e. guessing
from <source path='/dev/nmdm0A'/> that the slave is '/dev/nmdm0B', to
explicit master and slave device specification using
<source master='/dev/nmdm0A' slave='/dev/nmdm0B'/>.
Roman Bogorodskiy (2):
bhyve: add console support through nmdm device
bhyve: add xml2argv tests for console
src/bhyve/bhyve_command.c | 34 +++++++++++++
src/bhyve/bhyve_driver.c | 45 +++++++++++++++++
src/conf/domain_audit.c | 1 +
src/conf/domain_conf.c | 59 +++++++++++++++++++++-
src/conf/domain_conf.h | 5 ++
src/qemu/qemu_command.c | 1 +
src/qemu/qemu_monitor_json.c | 1 +
tests/bhyvexml2argvdata/bhyvexml2argv-console.args | 4 ++
tests/bhyvexml2argvdata/bhyvexml2argv-console.xml | 23 +++++++++
tests/bhyvexml2argvdata/bhyvexml2argv-serial.args | 4 ++
tests/bhyvexml2argvdata/bhyvexml2argv-serial.xml | 23 +++++++++
tests/bhyvexml2argvtest.c | 2 +
12 files changed, 201 insertions(+), 1 deletion(-)
create mode 100644 tests/bhyvexml2argvdata/bhyvexml2argv-console.args
create mode 100644 tests/bhyvexml2argvdata/bhyvexml2argv-console.xml
create mode 100644 tests/bhyvexml2argvdata/bhyvexml2argv-serial.args
create mode 100644 tests/bhyvexml2argvdata/bhyvexml2argv-serial.xml
--
1.8.4.2
10 years, 7 months
[libvirt] [PATCH] bhyve: domain autostart support
by Roman Bogorodskiy
Re-submit patch provided by David back in February when bhyve driver was not
in the tree. I did some changes to the patch on the way:
- rebase to the current master
- add ACL checks
- use bhyveDomObjFromDomain() instead of custom virDomainObjListFindByUUID()
- fix problems reported by 'syntax-check'
David Shane Holden (1):
bhyve: domain autostart support
src/bhyve/bhyve_driver.c | 135 ++++++++++++++++++++++++++++++++++++++++++++++-
src/bhyve/bhyve_utils.h | 5 ++
2 files changed, 139 insertions(+), 1 deletion(-)
--
1.8.4.2
10 years, 7 months
[libvirt] [PATCH] NFS storage pool: Fix libvirtd crash due to refactor edit
by John Ferlan
Commit id '18642d10' refactored the call to virCommandRunRegex()
inside a new function virStorageBackendFileSystemNetFindNFSPoolSources(),
but the cut-n-paste didn't remove the "&state". Now that state is passed
by reference, it results in a libvirtd core with a messages entry:
"...internal error: unknown storage pool type Unknow"
Signed-off-by: John Ferlan <jferlan(a)redhat.com>
---
src/storage/storage_backend_fs.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/storage/storage_backend_fs.c b/src/storage/storage_backend_fs.c
index 1d85871..4e4a7ae 100644
--- a/src/storage/storage_backend_fs.c
+++ b/src/storage/storage_backend_fs.c
@@ -266,7 +266,7 @@ virStorageBackendFileSystemNetFindNFSPoolSources(virNetfsDiscoverState *state)
if (virCommandRunRegex(cmd, 1, regexes, vars,
virStorageBackendFileSystemNetFindPoolSourcesFunc,
- &state, NULL) < 0)
+ state, NULL) < 0)
virResetLastError();
virCommandFree(cmd);
--
1.8.5.3
10 years, 7 months
Re: [libvirt] [Qemu-devel] [PATCH] spapr: skip adding usb keyboard/mouse in case of -nodefaults
by Eric Blake
[adding libvir-list]
On 04/04/2014 05:23 AM, Markus Armbruster wrote:
> Paolo Bonzini <pbonzini(a)redhat.com> writes:
>
>> Il 04/04/2014 12:58, Markus Armbruster ha scritto:
>>>>>>>
>>>>>>> Have you considered extending QEMUMachineInitArgs instead of adding this
>>>>>>> function?
>>>>>
>>>>> Did not think of this option earlier. You mean doing something like
>>>>> this?
>>> Yes. Looks nicer, doesn't it?
>>
>> I still think it's a libvirt bug. Mixing -nodefaults and -usb and
>> -device is looking for trouble I think. "-usb" is a do-what-I-mean
>> kind of option and it makes sense for it to add a keyboard and mouse,
>> even with -nodefaults.
>
> I agree that management tools should not use -usb, except when they want
> to manage ancient versions of QEMU for some reason.
We've tried to make libvirt avoid -usb when it knows it is targetting a
new enough qemu. But I'm not the one most familiar with that code. At
this point, I'm just trying to facilitate discussions, and make sure the
right people are looking at this - what versions of qemu vs. libvirt
have you tested, and what does libvirt still need to patch to avoid
-usb, and/or qemu patch so that libvirt can correctly probe that -usb is
not needed?
--
Eric Blake eblake redhat com +1-919-301-3266
Libvirt virtualization library http://libvirt.org
10 years, 7 months
[libvirt] [PATCH 0/5] virstoragefile refactoring, part 3
by Eric Blake
Part 2 gave us a common virStorageSource struct, now it's time
to start using that struct when crawling backing file chains.
I posted some RFCs about my full conversion plan, here's the
patches I have working so far. Still plenty more to come, but
today's batch of patches took me a lot longer than I had
planned due to having to refactor the testsuite to avoid a
compiler error about over-large stack allocation.
Eric Blake (5):
tests: use C99 initialization for storage test
tests: refactor virstoragetest for less stack space
conf: track when storage type is still undetermined
conf: track more fields in backing chain metadata
conf: start testing contents of the new backing chain fields
src/conf/domain_conf.c | 10 +-
src/conf/snapshot_conf.c | 2 +-
src/qemu/qemu_command.c | 1 +
src/qemu/qemu_driver.c | 11 +-
src/util/virstoragefile.c | 33 +++-
src/util/virstoragefile.h | 43 ++++-
tests/virstoragetest.c | 405 ++++++++++++++++++++++++++++++++--------------
7 files changed, 366 insertions(+), 139 deletions(-)
--
1.9.0
10 years, 7 months