[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