Nitin, Amogh,

Can you have a quick look? please advice if I should revert or add a
missing commit.

regards,
Daan

On Fri, May 16, 2014 at 12:55 PM, Milamber <milam...@apache.org> wrote:
> Hello,
>
> This commit creating an NPE issue when you add a new kvm instance from ISO.
>
> See: https://issues.apache.org/jira/browse/CLOUDSTACK-6671
>
> Milamber
>
>
> Le 13/05/2014 09:33, d...@apache.org a ecrit :
>
>> CLOUDSTACK-6358: As a part of supporting dynamic guest OS defined by user,
>> removing the hard-coded dependencies.
>> This patch is for KVM
>>
>> 1. Local testing on KVM
>> 2. Successfully got up system VMs
>> 3. Successfully created a CentOS VM
>> 4. Snapshots are not supported for KVM
>>
>>   Signed off by :- Nitin Mehta<nitin.me...@citrix.com>
>>
>>
>> Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
>> Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/02bd3d06
>> Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/02bd3d06
>> Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/02bd3d06
>>
>> Branch: refs/heads/4.4
>> Commit: 02bd3d0671b0cde46f8aa7892f20aa0bb0d48d1c
>> Parents: 1fb358d
>> Author: Amogh Vasekar <amogh.vase...@citrix.com>
>> Authored: Wed May 7 15:16:55 2014 -0700
>> Committer: Daan Hoogland <d...@onecht.net>
>> Committed: Tue May 13 10:33:15 2014 +0200
>>
>> ----------------------------------------------------------------------
>>   .../storage/dao/GuestOSHypervisorDaoImpl.java   |   6 +-
>>   .../kvm/resource/LibvirtComputingResource.java  | 156
>> ++++++++++---------
>>   .../hypervisor/kvm/resource/LibvirtVMDef.java   |   9 ++
>>   .../hypervisor/kvm/resource/VifDriverBase.java  |   4 +-
>>   server/src/com/cloud/hypervisor/KVMGuru.java    |  14 +-
>>   5 files changed, 108 insertions(+), 81 deletions(-)
>> ----------------------------------------------------------------------
>>
>>
>>
>> http://git-wip-us.apache.org/repos/asf/cloudstack/blob/02bd3d06/engine/schema/src/com/cloud/storage/dao/GuestOSHypervisorDaoImpl.java
>> ----------------------------------------------------------------------
>> diff --git
>> a/engine/schema/src/com/cloud/storage/dao/GuestOSHypervisorDaoImpl.java
>> b/engine/schema/src/com/cloud/storage/dao/GuestOSHypervisorDaoImpl.java
>> index 3b05120..b06cdfa 100644
>> ---
>> a/engine/schema/src/com/cloud/storage/dao/GuestOSHypervisorDaoImpl.java
>> +++
>> b/engine/schema/src/com/cloud/storage/dao/GuestOSHypervisorDaoImpl.java
>> @@ -58,9 +58,13 @@ public class GuestOSHypervisorDaoImpl extends
>> GenericDaoBase<GuestOSHypervisorVO
>>       @Override
>>       public GuestOSHypervisorVO findByOsIdAndHypervisor(long guestOsId,
>> String hypervisorType, String hypervisorVersion) {
>>           SearchCriteria<GuestOSHypervisorVO> sc = mappingSearch.create();
>> +        String version = "default";
>> +        if (!(hypervisorVersion == null || hypervisorVersion.isEmpty()))
>> {
>> +            version = hypervisorVersion;
>> +        }
>>           sc.setParameters("guest_os_id", guestOsId);
>>           sc.setParameters("hypervisor_type", hypervisorType);
>> -        sc.setParameters("hypervisor_version", hypervisorVersion);
>> +        sc.setParameters("hypervisor_version", version);
>>           return findOneBy(sc);
>>       }
>>
>>
>> http://git-wip-us.apache.org/repos/asf/cloudstack/blob/02bd3d06/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
>> ----------------------------------------------------------------------
>> diff --git
>> a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
>> b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
>> index 345a8ee..b8f33e5 100755
>> ---
>> a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
>> +++
>> b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
>> @@ -16,12 +16,79 @@
>>   // under the License.
>>   package com.cloud.hypervisor.kvm.resource;
>>   +import java.io.BufferedOutputStream;
>> +import java.io.BufferedReader;
>> +import java.io.File;
>> +import java.io.FileNotFoundException;
>> +import java.io.FileOutputStream;
>> +import java.io.FileReader;
>> +import java.io.IOException;
>> +import java.io.InputStream;
>> +import java.io.InputStreamReader;
>> +import java.io.Reader;
>> +import java.net.InetAddress;
>> +import java.net.URI;
>> +import java.net.URISyntaxException;
>> +import java.net.URL;
>> +import java.net.URLConnection;
>> +import java.text.DateFormat;
>> +import java.text.MessageFormat;
>> +import java.text.SimpleDateFormat;
>> +import java.util.ArrayList;
>> +import java.util.Arrays;
>> +import java.util.Calendar;
>> +import java.util.Collections;
>> +import java.util.Comparator;
>> +import java.util.Date;
>> +import java.util.HashMap;
>> +import java.util.HashSet;
>> +import java.util.List;
>> +import java.util.Map;
>> +import java.util.Properties;
>> +import java.util.Set;
>> +import java.util.UUID;
>> +import java.util.concurrent.Callable;
>> +import java.util.concurrent.ConcurrentHashMap;
>> +import java.util.concurrent.ExecutionException;
>> +import java.util.concurrent.ExecutorService;
>> +import java.util.concurrent.Executors;
>> +import java.util.concurrent.Future;
>> +import java.util.concurrent.TimeUnit;
>> +import java.util.concurrent.TimeoutException;
>> +import java.util.regex.Matcher;
>> +import java.util.regex.Pattern;
>> +
>> +import javax.ejb.Local;
>> +import javax.naming.ConfigurationException;
>> +
>> +import org.apache.commons.io.FileUtils;
>> +import org.apache.commons.io.IOUtils;
>> +import org.apache.log4j.Logger;
>> +import org.libvirt.Connect;
>> +import org.libvirt.Domain;
>> +import org.libvirt.DomainBlockStats;
>> +import org.libvirt.DomainInfo;
>> +import org.libvirt.DomainInterfaceStats;
>> +import org.libvirt.DomainSnapshot;
>> +import org.libvirt.LibvirtException;
>> +import org.libvirt.NodeInfo;
>> +import org.libvirt.StorageVol;
>> +
>>   import com.ceph.rados.IoCTX;
>>   import com.ceph.rados.Rados;
>>   import com.ceph.rados.RadosException;
>>   import com.ceph.rbd.Rbd;
>>   import com.ceph.rbd.RbdException;
>>   import com.ceph.rbd.RbdImage;
>> +
>> +import org.apache.cloudstack.storage.command.StorageSubSystemCommand;
>> +import org.apache.cloudstack.storage.to.PrimaryDataStoreTO;
>> +import org.apache.cloudstack.storage.to.VolumeObjectTO;
>> +import org.apache.cloudstack.utils.qemu.QemuImg;
>> +import org.apache.cloudstack.utils.qemu.QemuImg.PhysicalDiskFormat;
>> +import org.apache.cloudstack.utils.qemu.QemuImgException;
>> +import org.apache.cloudstack.utils.qemu.QemuImgFile;
>> +
>>   import com.cloud.agent.api.Answer;
>>   import com.cloud.agent.api.AttachIsoCommand;
>>   import com.cloud.agent.api.AttachVolumeAnswer;
>> @@ -202,71 +269,6 @@ import com.cloud.vm.VirtualMachine;
>>   import com.cloud.vm.VirtualMachine.PowerState;
>>   import com.cloud.vm.VirtualMachine.State;
>>   -import org.apache.cloudstack.storage.command.StorageSubSystemCommand;
>> -import org.apache.cloudstack.storage.to.PrimaryDataStoreTO;
>> -import org.apache.cloudstack.storage.to.VolumeObjectTO;
>> -import org.apache.cloudstack.utils.qemu.QemuImg;
>> -import org.apache.cloudstack.utils.qemu.QemuImg.PhysicalDiskFormat;
>> -import org.apache.cloudstack.utils.qemu.QemuImgException;
>> -import org.apache.cloudstack.utils.qemu.QemuImgFile;
>> -import org.apache.commons.io.FileUtils;
>> -import org.apache.commons.io.IOUtils;
>> -import org.apache.log4j.Logger;
>> -import org.libvirt.Connect;
>> -import org.libvirt.Domain;
>> -import org.libvirt.DomainBlockStats;
>> -import org.libvirt.DomainInfo;
>> -import org.libvirt.DomainInterfaceStats;
>> -import org.libvirt.DomainSnapshot;
>> -import org.libvirt.LibvirtException;
>> -import org.libvirt.NodeInfo;
>> -import org.libvirt.StorageVol;
>> -
>> -import javax.ejb.Local;
>> -import javax.naming.ConfigurationException;
>> -
>> -import java.io.BufferedOutputStream;
>> -import java.io.BufferedReader;
>> -import java.io.File;
>> -import java.io.FileNotFoundException;
>> -import java.io.FileOutputStream;
>> -import java.io.FileReader;
>> -import java.io.IOException;
>> -import java.io.InputStream;
>> -import java.io.InputStreamReader;
>> -import java.io.Reader;
>> -import java.net.InetAddress;
>> -import java.net.URI;
>> -import java.net.URISyntaxException;
>> -import java.net.URL;
>> -import java.net.URLConnection;
>> -import java.text.DateFormat;
>> -import java.text.MessageFormat;
>> -import java.text.SimpleDateFormat;
>> -import java.util.ArrayList;
>> -import java.util.Arrays;
>> -import java.util.Calendar;
>> -import java.util.Collections;
>> -import java.util.Comparator;
>> -import java.util.Date;
>> -import java.util.HashMap;
>> -import java.util.HashSet;
>> -import java.util.List;
>> -import java.util.Map;
>> -import java.util.Properties;
>> -import java.util.Set;
>> -import java.util.UUID;
>> -import java.util.concurrent.Callable;
>> -import java.util.concurrent.ConcurrentHashMap;
>> -import java.util.concurrent.ExecutionException;
>> -import java.util.concurrent.ExecutorService;
>> -import java.util.concurrent.Executors;
>> -import java.util.concurrent.Future;
>> -import java.util.concurrent.TimeoutException;
>> -import java.util.concurrent.TimeUnit;
>> -import java.util.regex.Matcher;
>> -import java.util.regex.Pattern;
>> -
>>   /**
>>    * LibvirtComputingResource execute requests on the computing/routing
>> host using
>>    * the libvirt API
>> @@ -2006,7 +2008,7 @@ public class LibvirtComputingResource extends
>> ServerResourceBase implements Serv
>>           }
>>             Domain vm = getDomain(conn, vmName);
>> -        vm.attachDevice(getVifDriver(nicTO.getType()).plug(nicTO, "Other
>> PV (32-bit)").toString());
>> +        vm.attachDevice(getVifDriver(nicTO.getType()).plug(nicTO, "Other
>> PV").toString());
>>       }
>>     @@ -2043,7 +2045,7 @@ public class LibvirtComputingResource extends
>> ServerResourceBase implements Serv
>>                   }
>>                   nicnum++;
>>               }
>> -            vm.attachDevice(getVifDriver(nic.getType()).plug(nic, "Other
>> PV (32-bit)").toString());
>> +            vm.attachDevice(getVifDriver(nic.getType()).plug(nic, "Other
>> PV").toString());
>>               return new PlugNicAnswer(cmd, true, "success");
>>           } catch (LibvirtException e) {
>>               String msg = " Plug Nic failed due to " + e.toString();
>> @@ -3641,6 +3643,7 @@ public class LibvirtComputingResource extends
>> ServerResourceBase implements Serv
>>           uuid = getUuid(uuid);
>>           vm.setDomUUID(uuid);
>>           vm.setDomDescription(vmTO.getOs());
>> +        vm.setPlatformEmulator(vmTO.getPlatformEmulator());
>>             GuestDef guest = new GuestDef();
>>   @@ -3924,7 +3927,7 @@ public class LibvirtComputingResource extends
>> ServerResourceBase implements Serv
>>                   volPath = physicalDisk.getPath();
>>               }
>>   -            DiskDef.diskBus diskBusType =
>> getGuestDiskModel(vmSpec.getOs());
>> +            DiskDef.diskBus diskBusType =
>> getGuestDiskModel(vmSpec.getPlatformEmulator());
>>               DiskDef disk = new DiskDef();
>>               if (volume.getType() == Volume.Type.ISO) {
>>                   if (volPath == null) {
>> @@ -4004,7 +4007,7 @@ public class LibvirtComputingResource extends
>> ServerResourceBase implements Serv
>>       }
>>         private void createVif(LibvirtVMDef vm, NicTO nic) throws
>> InternalErrorException, LibvirtException {
>> -        vm.getDevices().addDevice(getVifDriver(nic.getType()).plug(nic,
>> vm.getGuestOSType()).toString());
>> +        vm.getDevices().addDevice(getVifDriver(nic.getType()).plug(nic,
>> vm.getPlatformEmulator()).toString());
>>       }
>>         protected CheckSshAnswer execute(CheckSshCommand cmd) {
>> @@ -4938,16 +4941,15 @@ public class LibvirtComputingResource extends
>> ServerResourceBase implements Serv
>>           }
>>       }
>>   -    boolean isGuestPVEnabled(String guestOS) {
>> -        if (guestOS == null) {
>> +    boolean isGuestPVEnabled(String guestOSName) {
>> +        if (guestOSName == null) {
>>               return false;
>>           }
>> -        String guestOSName = KVMGuestOsMapper.getGuestOsName(guestOS);
>> -        if (guestOS.startsWith("Ubuntu") ||
>> guestOSName.startsWith("Fedora 13") || guestOSName.startsWith("Fedora 12")
>> || guestOSName.startsWith("Fedora 11") ||
>> +        if (guestOSName.startsWith("Ubuntu") ||
>> guestOSName.startsWith("Fedora 13") || guestOSName.startsWith("Fedora 12")
>> || guestOSName.startsWith("Fedora 11") ||
>>                   guestOSName.startsWith("Fedora 10") ||
>> guestOSName.startsWith("Fedora 9") || guestOSName.startsWith("CentOS 5.3")
>> || guestOSName.startsWith("CentOS 5.4") ||
>> -                guestOSName.startsWith("CentOS 5.5") ||
>> guestOS.startsWith("CentOS") || guestOS.startsWith("Fedora") ||
>> +                guestOSName.startsWith("CentOS 5.5") ||
>> guestOSName.startsWith("CentOS") || guestOSName.startsWith("Fedora") ||
>>                   guestOSName.startsWith("Red Hat Enterprise Linux 5.3")
>> || guestOSName.startsWith("Red Hat Enterprise Linux 5.4") ||
>> -                guestOSName.startsWith("Red Hat Enterprise Linux 5.5") ||
>> guestOSName.startsWith("Red Hat Enterprise Linux 6") ||
>> guestOS.startsWith("Debian GNU/Linux") ||
>> +                guestOSName.startsWith("Red Hat Enterprise Linux 5.5") ||
>> guestOSName.startsWith("Red Hat Enterprise Linux 6") ||
>> guestOSName.startsWith("Debian GNU/Linux") ||
>>                   guestOSName.startsWith("FreeBSD 10") ||
>> guestOSName.startsWith("Other PV")) {
>>               return true;
>>           } else {
>> @@ -4963,8 +4965,8 @@ public class LibvirtComputingResource extends
>> ServerResourceBase implements Serv
>>           }
>>       }
>>   -    private DiskDef.diskBus getGuestDiskModel(String guestOSType) {
>> -        if (isGuestPVEnabled(guestOSType)) {
>> +    private DiskDef.diskBus getGuestDiskModel(String platformEmulator) {
>> +        if (isGuestPVEnabled(platformEmulator)) {
>>               return DiskDef.diskBus.VIRTIO;
>>           } else {
>>               return DiskDef.diskBus.IDE;
>>
>>
>> http://git-wip-us.apache.org/repos/asf/cloudstack/blob/02bd3d06/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java
>> ----------------------------------------------------------------------
>> diff --git
>> a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java
>> b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java
>> index 4032305..f6c3edf 100644
>> ---
>> a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java
>> +++
>> b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java
>> @@ -28,6 +28,7 @@ public class LibvirtVMDef {
>>       private String _domName;
>>       private String _domUUID;
>>       private String _desc;
>> +    private String _platformEmulator;
>>       private final Map<String, Object> components = new HashMap<String,
>> Object>();
>>         public static class GuestDef {
>> @@ -1179,6 +1180,14 @@ public class LibvirtVMDef {
>>           return _desc;
>>       }
>>   +    public void setPlatformEmulator(String platformEmulator) {
>> +        _platformEmulator = platformEmulator;
>> +    }
>> +
>> +    public String getPlatformEmulator() {
>> +        return _platformEmulator;
>> +    }
>> +
>>       public void addComp(Object comp) {
>>           components.put(comp.getClass().toString(), comp);
>>       }
>>
>>
>> http://git-wip-us.apache.org/repos/asf/cloudstack/blob/02bd3d06/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/VifDriverBase.java
>> ----------------------------------------------------------------------
>> diff --git
>> a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/VifDriverBase.java
>> b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/VifDriverBase.java
>> index d89d71a..53e81fd 100644
>> ---
>> a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/VifDriverBase.java
>> +++
>> b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/VifDriverBase.java
>> @@ -47,8 +47,8 @@ public abstract class VifDriverBase implements VifDriver
>> {
>>       @Override
>>       public abstract void unplug(LibvirtVMDef.InterfaceDef iface);
>>   -    protected LibvirtVMDef.InterfaceDef.nicModel
>> getGuestNicModel(String guestOSType) {
>> -        if (_libvirtComputingResource.isGuestPVEnabled(guestOSType)) {
>> +    protected LibvirtVMDef.InterfaceDef.nicModel getGuestNicModel(String
>> platformEmulator) {
>> +        if (_libvirtComputingResource.isGuestPVEnabled(platformEmulator))
>> {
>>               return LibvirtVMDef.InterfaceDef.nicModel.VIRTIO;
>>           } else {
>>               return LibvirtVMDef.InterfaceDef.nicModel.E1000;
>>
>>
>> http://git-wip-us.apache.org/repos/asf/cloudstack/blob/02bd3d06/server/src/com/cloud/hypervisor/KVMGuru.java
>> ----------------------------------------------------------------------
>> diff --git a/server/src/com/cloud/hypervisor/KVMGuru.java
>> b/server/src/com/cloud/hypervisor/KVMGuru.java
>> index 174b32d..4225232 100644
>> --- a/server/src/com/cloud/hypervisor/KVMGuru.java
>> +++ b/server/src/com/cloud/hypervisor/KVMGuru.java
>> @@ -19,19 +19,28 @@ package com.cloud.hypervisor;
>>   import javax.ejb.Local;
>>   import javax.inject.Inject;
>>   +import org.apache.cloudstack.storage.command.StorageSubSystemCommand;
>> +
>>   import com.cloud.agent.api.Command;
>>   import com.cloud.agent.api.to.VirtualMachineTO;
>> +import com.cloud.host.HostVO;
>> +import com.cloud.host.dao.HostDao;
>>   import com.cloud.hypervisor.Hypervisor.HypervisorType;
>> +import com.cloud.storage.GuestOSHypervisorVO;
>>   import com.cloud.storage.GuestOSVO;
>>   import com.cloud.storage.dao.GuestOSDao;
>> +import com.cloud.storage.dao.GuestOSHypervisorDao;
>>   import com.cloud.utils.Pair;
>>   import com.cloud.vm.VirtualMachineProfile;
>> -import org.apache.cloudstack.storage.command.StorageSubSystemCommand;
>>     @Local(value = HypervisorGuru.class)
>>   public class KVMGuru extends HypervisorGuruBase implements
>> HypervisorGuru {
>>       @Inject
>>       GuestOSDao _guestOsDao;
>> +    @Inject
>> +    GuestOSHypervisorDao _guestOsHypervisorDao;
>> +    @Inject
>> +    HostDao _hostDao;
>>         @Override
>>       public HypervisorType getHypervisorType() {
>> @@ -50,6 +59,9 @@ public class KVMGuru extends HypervisorGuruBase
>> implements HypervisorGuru {
>>           // Determine the VM's OS description
>>           GuestOSVO guestOS =
>> _guestOsDao.findById(vm.getVirtualMachine().getGuestOSId());
>>           to.setOs(guestOS.getDisplayName());
>> +        HostVO host =
>> _hostDao.findById(vm.getVirtualMachine().getHostId());
>> +        GuestOSHypervisorVO guestOsMapping =
>> _guestOsHypervisorDao.findByOsIdAndHypervisor(guestOS.getId(),
>> getHypervisorType().toString(), host.getHypervisorVersion());
>> +        to.setPlatformEmulator(guestOsMapping.getGuestOsName());
>>             return to;
>>       }
>>
>>
>



-- 
Daan

Reply via email to