Tal Nisan has uploaded a new change for review.

Change subject: core,webadmin: Move storage type checks to domain instead of 
pool
......................................................................

core,webadmin: Move storage type checks to domain instead of pool

As a part of the effort to remove the type of storage pool, checks of the
storage type are changed to check the type on the storage domain instead of
the storage pool

Change-Id: I3db80f1749d93444e9cdac8038859b7d0865f6e5
Relates-To: https://bugzilla.redhat.com/1038053
Signed-off-by: Tal Nisan <[email protected]>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateAllSnapshotsFromVmCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ExportVmCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetDiskAlignmentCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/HibernateVmCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportVmCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/memory/LiveSnapshotMemoryImageBuilder.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/RemoveStoragePoolCommand.java
M 
backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/GetDiskAlignmentCommandTest.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/AbstractDiskModel.java
9 files changed, 55 insertions(+), 33 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/94/23294/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateAllSnapshotsFromVmCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateAllSnapshotsFromVmCommand.java
index fa9f0e0..e2b716f 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateAllSnapshotsFromVmCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateAllSnapshotsFromVmCommand.java
@@ -66,7 +66,7 @@
 public class CreateAllSnapshotsFromVmCommand<T extends 
CreateAllSnapshotsFromVmParameters> extends VmCommand<T> implements 
QuotaStorageDependent, TaskHandlerCommand<CreateAllSnapshotsFromVmParameters> {
 
     private List<DiskImage> cachedSelectedActiveDisks;
-    private Guid cachedStorageDomainId = Guid.Empty;
+    private StorageDomain cachedStorageDomain;
     private String cachedSnapshotIsBeingTakenMessage;
     private Guid newActiveSnapshotId = Guid.newGuid();
 
@@ -169,15 +169,15 @@
         setSucceeded(true);
     }
 
-    public Guid getStorageDomainIdForVmMemory() {
-        if (cachedStorageDomainId.equals(Guid.Empty) && getVm() != null) {
+    private StorageDomain getStorageDomainForVmMemory() {
+        if (cachedStorageDomain == null && getVm() != null) {
             long sizeNeeded = getVm().getTotalMemorySizeInBytes() / 
BYTES_IN_GB;
             StorageDomain storageDomain = 
VmHandler.findStorageDomainForMemory(getVm().getStoragePoolId(), sizeNeeded);
             if (storageDomain != null) {
-                cachedStorageDomainId = storageDomain.getId();
+                cachedStorageDomain = storageDomain;
             }
         }
-        return cachedStorageDomainId;
+        return cachedStorageDomain;
     }
 
     private MemoryImageBuilder createMemoryImageBuilder() {
@@ -190,7 +190,7 @@
         }
 
         if (getParameters().isSaveMemory() && isLiveSnapshotApplicable()) {
-            return new LiveSnapshotMemoryImageBuilder(getVm(), 
getStorageDomainIdForVmMemory(), getStoragePool(), this);
+            return new LiveSnapshotMemoryImageBuilder(getVm(), 
getStorageDomainForVmMemory(), getStoragePool(), this);
         }
 
         return new NullableMemoryImageBuilder();
@@ -468,7 +468,7 @@
             }
         }
 
-        if (getParameters().isSaveMemory() && 
Guid.Empty.equals(getStorageDomainIdForVmMemory())) {
+        if (getParameters().isSaveMemory() && getStorageDomainForVmMemory() == 
null) {
             return 
failCanDoAction(VdcBllMessages.ACTION_TYPE_FAILED_NO_SUITABLE_DOMAIN_FOUND);
         }
 
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ExportVmCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ExportVmCommand.java
index 8303a32..c4d5c72 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ExportVmCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ExportVmCommand.java
@@ -341,7 +341,7 @@
 
         // if the data domains are block based storage, the memory volume type 
is preallocated
         // so we need to use copy collapse in order to convert it to be 
sparsed in the export domain
-        if (getStoragePool().getStorageType().isBlockDomain()) {
+        if (getStorageDomain().getStorageType().isBlockDomain()) {
             params.setUseCopyCollapse(true);
             params.setVolumeType(VolumeType.Sparse);
             params.setVolumeFormat(VolumeFormat.RAW);
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetDiskAlignmentCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetDiskAlignmentCommand.java
index c87f990..2faf9a8 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetDiskAlignmentCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetDiskAlignmentCommand.java
@@ -19,6 +19,7 @@
 import org.ovirt.engine.core.common.businessentities.DiskImage;
 import org.ovirt.engine.core.common.businessentities.ImageStatus;
 import org.ovirt.engine.core.common.businessentities.LunDisk;
+import org.ovirt.engine.core.common.businessentities.StorageDomainStatic;
 import org.ovirt.engine.core.common.businessentities.StoragePool;
 import org.ovirt.engine.core.common.businessentities.VDS;
 import org.ovirt.engine.core.common.businessentities.VDSStatus;
@@ -100,17 +101,22 @@
             return 
failCanDoAction(VdcBllMessages.ACTION_TYPE_FAILED_DISK_NOT_EXIST);
         }
 
+        if (getVm() == null) {
+            addCanDoActionMessage(String.format("$diskAliases %1$s", 
getDiskAlias()));
+            return 
failCanDoAction(VdcBllMessages.ACTION_TYPE_FAILED_DISK_IS_NOT_VM_DISK);
+        }
+
         if (getDiskType() == DiskStorageType.IMAGE) {
             DiskImagesValidator diskImagesValidator = new 
DiskImagesValidator(Arrays.asList((DiskImage) getDisk()));
             if (!validate(diskImagesValidator.diskImagesNotLocked()) ||
                     !validate(diskImagesValidator.diskImagesNotIllegal())) {
                 return false;
             }
-        }
 
-        if (getVm() == null) {
-            addCanDoActionMessage(String.format("$diskAliases %1$s", 
getDiskAlias()));
-            return 
failCanDoAction(VdcBllMessages.ACTION_TYPE_FAILED_DISK_IS_NOT_VM_DISK);
+            StorageDomainStatic sds = 
getStorageDomainStaticDAO().get(((DiskImage)getDisk()).getStorageIds().get(0));
+            if (!sds.getStorageType().isBlockDomain()) {
+                return 
failCanDoAction(VdcBllMessages.ACTION_TYPE_FAILED_ALIGNMENT_SCAN_STORAGE_TYPE);
+            }
         }
 
         if (isImageExclusiveLockNeeded() && getVm().isRunningOrPaused()) {
@@ -124,10 +130,6 @@
         StoragePool sp = getStoragePoolDao().get(getStoragePoolId());
         if (!validate(new StoragePoolValidator(sp).isUp())) {
             return false;
-        }
-
-        if (!sp.getStorageType().isBlockDomain()) {
-            return 
failCanDoAction(VdcBllMessages.ACTION_TYPE_FAILED_ALIGNMENT_SCAN_STORAGE_TYPE);
         }
 
         return true;
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/HibernateVmCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/HibernateVmCommand.java
index c371611..212d5d1 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/HibernateVmCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/HibernateVmCommand.java
@@ -372,7 +372,7 @@
     }
 
     private VolumeType getMemoryVolumeType() {
-        return getMemoryVolumeTypeForPool(getStoragePool().getStorageType());
+        return getMemoryVolumeTypeForPool(getStorageDomain().getStorageType());
     }
 
     /**
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportVmCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportVmCommand.java
index ad8d2dd..e0fb21b 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportVmCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportVmCommand.java
@@ -52,6 +52,7 @@
 import org.ovirt.engine.core.common.businessentities.Snapshot.SnapshotStatus;
 import org.ovirt.engine.core.common.businessentities.Snapshot.SnapshotType;
 import org.ovirt.engine.core.common.businessentities.StorageDomain;
+import org.ovirt.engine.core.common.businessentities.StorageDomainStatic;
 import org.ovirt.engine.core.common.businessentities.StorageDomainType;
 import org.ovirt.engine.core.common.businessentities.VDSGroup;
 import org.ovirt.engine.core.common.businessentities.VM;
@@ -722,6 +723,7 @@
 
     private MoveOrCopyImageGroupParameters 
buildMoveOrCopyImageGroupParametersForMemoryDumpImage(Guid containerID,
             Guid storageId, Guid imageId, Guid volumeId) {
+
         MoveOrCopyImageGroupParameters params = new 
MoveOrCopyImageGroupParameters(containerID,
                 imageId, volumeId, imageId, volumeId, storageId, 
getMoveOrCopyImageOperation());
         params.setParentCommand(getActionType());
@@ -733,7 +735,8 @@
         params.setEntityInfo(new EntityInfo(VdcObjectType.VM, 
getVm().getId()));
         params.setParentParameters(getParameters());
 
-        if (getStoragePool().getStorageType().isBlockDomain()) {
+        StorageDomainStatic storageDomain = 
getStorageDomainStaticDAO().get(storageId);
+        if (storageDomain != null && 
storageDomain.getStorageType().isBlockDomain()) {
             params.setUseCopyCollapse(true);
             params.setVolumeType(VolumeType.Preallocated);
             params.setVolumeFormat(VolumeFormat.RAW);
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/memory/LiveSnapshotMemoryImageBuilder.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/memory/LiveSnapshotMemoryImageBuilder.java
index e2676ca..f1b83a6 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/memory/LiveSnapshotMemoryImageBuilder.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/memory/LiveSnapshotMemoryImageBuilder.java
@@ -4,6 +4,7 @@
 import org.ovirt.engine.core.bll.HibernateVmCommand;
 import org.ovirt.engine.core.bll.tasks.TaskHandlerCommand;
 import org.ovirt.engine.core.common.VdcObjectType;
+import org.ovirt.engine.core.common.businessentities.StorageDomain;
 import org.ovirt.engine.core.common.businessentities.StoragePool;
 import org.ovirt.engine.core.common.businessentities.VM;
 import org.ovirt.engine.core.common.businessentities.VolumeFormat;
@@ -22,7 +23,7 @@
     private static final String CREATE_IMAGE_FOR_VM_TASK_KEY = 
"CREATE_IMAGE_FOR_VM_TASK_KEY";
     private static final String CREATE_IMAGE_FOR_MEMORY_DUMP_TASK_KEY = 
"CREATE_IMAGE_FOR_MEMORY_DUMP_TASK_KEY";
 
-    private Guid storageDomainId;
+    private StorageDomain storageDomain;
     private Guid memoryDumpImageGroupId;
     private Guid memoryDumpVolumeId;
     private Guid vmConfImageGroupId;
@@ -31,11 +32,11 @@
     private TaskHandlerCommand<?> enclosingCommand;
     private StoragePool storagePool;
 
-    public LiveSnapshotMemoryImageBuilder(VM vm, Guid storageDomainId,
+    public LiveSnapshotMemoryImageBuilder(VM vm, StorageDomain storageDomain,
             StoragePool storagePool, TaskHandlerCommand<?> enclosingCommand) {
         this.vm = vm;
         this.enclosingCommand = enclosingCommand;
-        this.storageDomainId = storageDomainId;
+        this.storageDomain = storageDomain;
         this.storagePool = storagePool;
         this.memoryDumpImageGroupId = Guid.newGuid();
         this.memoryDumpVolumeId = Guid.newGuid();
@@ -57,7 +58,7 @@
                         VDSCommandType.CreateImage,
                         new CreateImageVDSCommandParameters(
                                 storagePool.getId(),
-                                storageDomainId,
+                                storageDomain.getId(),
                                 vmConfImageGroupId,
                                 HibernateVmCommand.META_DATA_SIZE_IN_BYTES,
                                 VolumeType.Sparse,
@@ -87,10 +88,10 @@
                         VDSCommandType.CreateImage,
                         new CreateImageVDSCommandParameters(
                                 storagePool.getId(),
-                                storageDomainId,
+                                storageDomain.getId(),
                                 memoryDumpImageGroupId,
                                 vm.getTotalMemorySizeInBytes(),
-                                
HibernateVmCommand.getMemoryVolumeTypeForPool(storagePool.getStorageType()),
+                                
HibernateVmCommand.getMemoryVolumeTypeForPool(storageDomain.getStorageType()),
                                 VolumeFormat.RAW,
                                 memoryDumpVolumeId,
                                 ""));
@@ -106,13 +107,13 @@
                         retVal.getCreationInfo(),
                         enclosingCommand.getActionType(),
                         VdcObjectType.Storage,
-                        storageDomainId);
+                        storageDomain.getId());
         enclosingCommand.getTaskIdList().add(guid);
     }
 
     public String getVolumeStringRepresentation() {
         return MemoryUtils.createMemoryStateString(
-                storageDomainId,
+                storageDomain.getId(),
                 storagePool.getId(),
                 memoryDumpImageGroupId,
                 memoryDumpVolumeId,
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/RemoveStoragePoolCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/RemoveStoragePoolCommand.java
index 0907702..91fd054 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/RemoveStoragePoolCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/RemoveStoragePoolCommand.java
@@ -201,7 +201,7 @@
         setSucceeded(true);
         if (!getStoragePool().isLocal()) {
             for (VDS vds : vdss) {
-                
StorageHelperDirector.getInstance().getItem(getStoragePool().getStorageType())
+                
StorageHelperDirector.getInstance().getItem(masterDomain.getStorageType())
                         .disconnectStorageFromDomainByVdsId(masterDomain, 
vds.getId());
             }
         } else {
@@ -215,7 +215,7 @@
             } catch (VdcBLLException e) {
                 // Do nothing, exception already printed at logs
             }
-            
StorageHelperDirector.getInstance().getItem(getStoragePool().getStorageType())
+            
StorageHelperDirector.getInstance().getItem(masterDomain.getStorageType())
                     .disconnectStorageFromDomainByVdsId(masterDomain, 
vdss.get(0).getId());
             removeDomainFromDb(masterDomain);
         }
diff --git 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/GetDiskAlignmentCommandTest.java
 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/GetDiskAlignmentCommandTest.java
index 5578e29..0e822c8 100644
--- 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/GetDiskAlignmentCommandTest.java
+++ 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/GetDiskAlignmentCommandTest.java
@@ -4,6 +4,8 @@
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.when;
 
+import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collections;
 
 import org.junit.Before;
@@ -16,6 +18,7 @@
 import org.ovirt.engine.core.common.action.GetDiskAlignmentParameters;
 import org.ovirt.engine.core.common.businessentities.DiskImage;
 import org.ovirt.engine.core.common.businessentities.ImageStatus;
+import org.ovirt.engine.core.common.businessentities.StorageDomain;
 import org.ovirt.engine.core.common.businessentities.StoragePool;
 import org.ovirt.engine.core.common.businessentities.StoragePoolStatus;
 import org.ovirt.engine.core.common.businessentities.StorageType;
@@ -29,6 +32,7 @@
 import org.ovirt.engine.core.common.businessentities.VMStatus;
 import org.ovirt.engine.core.common.errors.VdcBllMessages;
 import org.ovirt.engine.core.compat.Guid;
+import org.ovirt.engine.core.dao.StorageDomainStaticDAO;
 import org.ovirt.engine.core.dao.StoragePoolDAO;
 import org.ovirt.engine.core.dao.VdsDAO;
 import org.ovirt.engine.core.dao.VdsGroupDAO;
@@ -54,6 +58,9 @@
     private VdsDAO vdsDao;
 
     @Mock
+    private StorageDomainStaticDAO storageDomainStaticDAO;
+
+    @Mock
     private StoragePoolDAO spDao;
 
     @Mock
@@ -64,12 +71,13 @@
 
     private GetDiskAlignmentCommand<GetDiskAlignmentParameters> cmd;
 
-    private Guid vmId, diskId, poolId, groupId, vdsId;
+    private Guid vmId, diskId, poolId, storageDomainId, groupId, vdsId;
     private DiskImage disk;
     private VM vm;
     private VDS vds;
     private VmDevice vmDevice;
     private StoragePool storagePool;
+    private StorageDomain storageDomain;
     private VDSGroup vdsGroup;
 
     @Before
@@ -77,6 +85,7 @@
         vmId = Guid.newGuid();
         diskId = Guid.newGuid();
         poolId = Guid.newGuid();
+        storageDomainId = Guid.newGuid();
         groupId = Guid.newGuid();
         vdsId = Guid.newGuid();
 
@@ -84,6 +93,7 @@
         disk.setId(diskId);
         disk.setVmEntityType(VmEntityType.VM);
         disk.setImageStatus(ImageStatus.OK);
+        disk.setStorageIds(new 
ArrayList<Guid>(Arrays.asList(storageDomainId)));
 
         vm = new VM();
         vm.setId(vmId);
@@ -103,13 +113,16 @@
 
         storagePool = new StoragePool();
         storagePool.setStatus(StoragePoolStatus.Up);
-        storagePool.setStorageType(StorageType.ISCSI);
+
+        storageDomain = new StorageDomain();
+        storageDomain.setStorageType(StorageType.ISCSI);
 
         when(vmDao.getVmsListForDisk(diskId, 
Boolean.FALSE)).thenReturn(Collections.singletonList(vm));
         when(vmDeviceDao.get(vmDeviceId)).thenReturn(vmDevice);
         when(vdsDao.getAllForVdsGroupWithStatus(groupId, 
VDSStatus.Up)).thenReturn(Collections.singletonList(vds));
         when(spDao.get(poolId)).thenReturn(storagePool);
         when(vdsGroupDao.get(groupId)).thenReturn(vdsGroup);
+        
when(storageDomainStaticDAO.get(storageDomainId)).thenReturn(storageDomain.getStorageStaticData());
 
         cmd = spy(new GetDiskAlignmentCommand<GetDiskAlignmentParameters>(new 
GetDiskAlignmentParameters(diskId)));
 
@@ -118,6 +131,7 @@
         doReturn(vmDao).when(cmd).getVmDAO();
         doReturn(spDao).when(cmd).getStoragePoolDao();
         doReturn(vdsGroupDao).when(cmd).getVdsGroupDAO();
+        doReturn(storageDomainStaticDAO).when(cmd).getStorageDomainStaticDAO();
     }
 
     /* Tests for canDoAction() flow */
@@ -172,7 +186,7 @@
 
     @Test
     public void testCanDoActionStoragePoolFile() {
-        storagePool.setStorageType(StorageType.NFS);
+        storageDomain.setStorageType(StorageType.NFS);
         CanDoActionTestUtils.runAndAssertCanDoActionFailure(cmd,
                 VdcBllMessages.ACTION_TYPE_FAILED_ALIGNMENT_SCAN_STORAGE_TYPE);
     }
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/AbstractDiskModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/AbstractDiskModel.java
index 85ef1cd..9613a8f 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/AbstractDiskModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/AbstractDiskModel.java
@@ -648,7 +648,7 @@
         }
 
         VolumeType volumeType = (VolumeType) getVolumeType().getSelectedItem();
-        StorageType storageType = ((StoragePool) 
getDataCenter().getSelectedItem()).getStorageType();
+        StorageType storageType = ((StorageDomain) 
getStorageDomain().getSelectedItem()).getStorageType();
 
         updateVolumeFormat(volumeType, storageType);
         updateShareable(volumeType, storageType);
@@ -710,7 +710,6 @@
             return;
         }
 
-        updateVolumeType(datacenter.getStorageType());
         updateShareableDiskEnabled(datacenter);
         updateDirectLunDiskEnabled(datacenter);
         updateInterface(isInVm ? getVm().getVdsGroupCompatibilityVersion() : 
null);
@@ -724,6 +723,9 @@
     }
 
     private void storageDomain_SelectedItemChanged() {
+        if (getStorageDomain().getSelectedItem() != null) {
+            
updateVolumeType(((StorageDomain)getStorageDomain().getSelectedItem()).getStorageType());
+        }
         updateQuota((StoragePool) getDataCenter().getSelectedItem());
     }
 


-- 
To view, visit http://gerrit.ovirt.org/23294
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I3db80f1749d93444e9cdac8038859b7d0865f6e5
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Tal Nisan <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to