[libvirt] [PATCH] Domain object is converted
Bryan Kearney
bkearney at redhat.com
Tue Jul 28 15:07:36 UTC 2009
Daniel Veillard wrote:
> On Sat, Jul 25, 2009 at 08:02:11AM -0400, Bryan Kearney wrote:
>> ---
>> src/org/libvirt/Connect.java | 9 +
>> src/org/libvirt/Domain.java | 307 +++++++++++++---------
>> src/org/libvirt/DomainBlockStats.java | 13 +
>> src/org/libvirt/DomainInfo.java | 14 +
>> src/org/libvirt/DomainInterfaceStats.java | 17 ++
>> src/org/libvirt/ErrorHandler.java | 11 +-
>> src/org/libvirt/Network.java | 8 +-
>> src/org/libvirt/NodeInfo.java | 4 +-
>> src/org/libvirt/SchedBooleanParameter.java | 20 ++-
>> src/org/libvirt/SchedDoubleParameter.java | 13 +
>> src/org/libvirt/SchedIntParameter.java | 13 +
>> src/org/libvirt/SchedLongParameter.java | 14 +
>> src/org/libvirt/SchedParameter.java | 43 +++
>> src/org/libvirt/SchedUintParameter.java | 13 +
>> src/org/libvirt/SchedUlongParameter.java | 13 +
>> src/org/libvirt/VcpuInfo.java | 13 +
>> src/org/libvirt/jna/Libvirt.java | 42 +++-
>> src/org/libvirt/jna/virDomainBlockStats.java | 12 +
>> src/org/libvirt/jna/virDomainInfo.java | 13 +
>> src/org/libvirt/jna/virDomainInterfaceStats.java | 16 ++
>> src/org/libvirt/jna/virSchedParameter.java | 11 +
>> src/org/libvirt/jna/virSchedParameterValue.java | 13 +
>> src/org/libvirt/jna/virVcpuInfo.java | 12 +
>> src/test.java | 154 ++++++-----
>> 24 files changed, 595 insertions(+), 203 deletions(-)
>> create mode 100644 src/org/libvirt/jna/virDomainBlockStats.java
>> create mode 100644 src/org/libvirt/jna/virDomainInfo.java
>> create mode 100644 src/org/libvirt/jna/virDomainInterfaceStats.java
>> create mode 100644 src/org/libvirt/jna/virSchedParameter.java
>> create mode 100644 src/org/libvirt/jna/virSchedParameterValue.java
>> create mode 100644 src/org/libvirt/jna/virVcpuInfo.java
> [...]
>> }
>> +
>> + public static int[] convertUUIDBytes(byte bytes[]) {
>> + int[] returnValue = new int[Libvirt.VIR_UUID_BUFLEN] ;
>> + for (int x = 0 ; x < Libvirt.VIR_UUID_BUFLEN ; x++) {
>> + returnValue[x] = (int) bytes[x] ;
>> + }
>> + return returnValue ;
>> + }
>> +
>
> bahh, it's not too bad :-)
>
> [..]
>> +import com.sun.jna.ptr.IntByReference;
> [..]
>> public boolean getAutostart() throws LibvirtException{
>> -// return _getAutostart(VDP);
>> - throw new RuntimeException("Not Implemented") ;
>> + IntByReference autoStart = new IntByReference() ;
>> + libvirt.virDomainGetAutostart(VDP, autoStart) ;
>> + processError() ;
>> + return autoStart.getValue() != 0 ? true : false ;
>> }
>
> oh, it can handle int * ... cool :-)
This is the nastiest the code gets outside of the jna package. It is
pretty nice.
>
> [...]
>> public SchedParameter[] getSchedulerParameters() throws LibvirtException{
>> -// return _getSchedulerParameters(VDP);
>> - throw new RuntimeException("Not Implemented") ;
>> + IntByReference nParams = new IntByReference() ;
>> + SchedParameter[] returnValue = new SchedParameter[0] ;
>> + String scheduler = libvirt.virDomainGetSchedulerType(VDP, nParams) ;
>> + processError() ;
>> + if (scheduler != null) {
>> + 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 ;
>> }
>>
>> -// private native SchedParameter[] _getSchedulerParameters (long VDP) throws LibvirtException;
>>
>> /**
>> * Changes the scheduler parameters
>> @@ -220,11 +248,16 @@ public class Domain {
>> * @throws LibvirtException
>> */
>> public void setSchedulerParameters(SchedParameter[] params) throws LibvirtException{
>> -// _setSchedulerParameters(VDP, params);
>> - throw new RuntimeException("Not Implemented") ;
>> + IntByReference nParams = new IntByReference() ;
>> + nParams.setValue(params.length) ;
>> + virSchedParameter[] input = new virSchedParameter[params.length] ;
>> + for (int x = 0 ; x < params.length ; x++) {
>> + input[x] = SchedParameter.toNative(params[x]) ;
>> + }
>> + libvirt.virDomainSetSchedulerParameters(VDP, input, nParams) ;
>> + processError() ;
>> }
>
> Get and SetSchedulerParameters are the most free-form APIs in libvirt,
> if that's all it takes, I would say congrats to JNA design, of course
> there is a separate classes for them but they are really simple and the
> the result looks natural, great !
>
> [...]
>> +++ b/src/org/libvirt/jna/virDomainBlockStats.java
>> @@ -0,0 +1,12 @@
>> +package org.libvirt.jna;
>> +
>> +import com.sun.jna.Structure;
>> +
>> +public class virDomainBlockStats extends Structure
>> +{
>> + public long rd_req ;
>> + public long rd_bytes ;
>> + public long wr_req ;
>> + public long wr_bytes ;
>> + public long errs ;
>> +}
>
> Hum ... in C we have
>
> struct _virDomainBlockStats {
> long long rd_req; /* number of read requests */
> long long rd_bytes; /* number of read bytes */
> long long wr_req; /* number of write requests */
> long long wr_bytes; /* number of written bytes */
> long long errs; /* In Xen this returns the mysterious 'oo_req'. */
> };
>
> will java long really be able to match C long long scope ?
Per the JNA mappings, long long equals java long... so this is correct.
I did add an explicit comment on each line which uses a long in java
instead of a NativeLong.
>
>> +package org.libvirt.jna;
>> +
>> +import com.sun.jna.Structure;
>> +
>> +public class virDomainInterfaceStats extends Structure
>> +{
>> + public long rx_bytes;
>> + public long rx_packets;
>> + public long rx_errs;
>> + public long rx_drop;
>> + public long tx_bytes;
>> + public long tx_packets;
>> + public long tx_errs;
>> + public long tx_drop;
>> +
>> +}
>
> and same question here.
>
> Except for this question looks fine, ACK !
>
Same as above.
More information about the libvir-list
mailing list