Gilad Chaplik has uploaded a new change for review. Change subject: engine: integrate new scheduling arch ......................................................................
engine: integrate new scheduling arch In run/migrate vm commands Change-Id: I0cb15af2d6fb0a5bb1df8023862641a3d648f7ec Signed-off-by: Gilad Chaplik <[email protected]> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MigrateVmCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MigrateVmToServerCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommandBase.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsGroupCommandBase.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsGroupOperationCommandBase.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmPoolCommandBase.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GlusterHookCommandBase.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GlusterVolumeCommandBase.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/RunVmValidator.java M backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/RunVmCommandTest.java M backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/UpdateVmCommandTest.java M backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/auditloghandling/AuditLogableBase.java 13 files changed, 59 insertions(+), 59 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/77/16377/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MigrateVmCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MigrateVmCommand.java index 5ec81c7..c2cd80b 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MigrateVmCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MigrateVmCommand.java @@ -1,10 +1,11 @@ package org.ovirt.engine.core.bll; +import java.util.ArrayList; import java.util.List; import org.ovirt.engine.core.bll.job.ExecutionHandler; +import org.ovirt.engine.core.bll.scheduling.SchedulingManager; import org.ovirt.engine.core.bll.scheduling.VdsFreeMemoryChecker; -import org.ovirt.engine.core.bll.scheduling.VdsSelector; import org.ovirt.engine.core.bll.snapshots.SnapshotsValidator; import org.ovirt.engine.core.bll.validator.DiskImagesValidator; import org.ovirt.engine.core.common.AuditLogType; @@ -14,7 +15,6 @@ import org.ovirt.engine.core.common.businessentities.MigrationSupport; import org.ovirt.engine.core.common.businessentities.VDS; import org.ovirt.engine.core.common.businessentities.VDSStatus; -import org.ovirt.engine.core.common.businessentities.VDSType; import org.ovirt.engine.core.common.businessentities.VM; import org.ovirt.engine.core.common.businessentities.VMStatus; import org.ovirt.engine.core.common.businessentities.network.Network; @@ -40,7 +40,6 @@ public MigrateVmCommand(T parameters) { super(parameters); - setVdsSelector(new VdsSelector(getVm(), getVdsDestinationId(), new VdsFreeMemoryChecker(this))); forcedMigrationForNonMigratableVM = parameters.isForceMigrationForNonMigratableVM(); } @@ -83,8 +82,15 @@ protected void initVdss() { setVdsIdRef(new Guid(getVm().getRunOnVds().toString())); - Guid vdsToRunOn = getVdsSelector().getVdsToRunOn(getVdsDAO() - .getAllOfTypes(new VDSType[] { VDSType.VDS, VDSType.oVirtNode }), getRunVdssList(), true); + VDS destVds = getDestinationVds(); + Guid vdsToRunOn = + SchedulingManager.getInstance().schedule(getVdsGroup(), + getVm(), + getRunVdssList(), + getParameters().getInitialHosts(), + destVds == null ? null : destVds.getId(), + new ArrayList<String>(), + new VdsFreeMemoryChecker(this)); setVdsDestinationId(vdsToRunOn); if (vdsToRunOn != null && !Guid.Empty.equals(vdsToRunOn)) { getRunVdssList().add(vdsToRunOn); @@ -269,11 +275,12 @@ // This check was added to prevent migration of VM while its disks are being migrated // TODO: replace it with a better solution && validate(new DiskImagesValidator(ImagesHandler.getPluggedImagesForVm(vm.getId())).diskImagesNotLocked()) - && getVdsSelector().canFindVdsToRunOn(getVdsDAO() - .getAllOfTypes(new VDSType[] { VDSType.VDS, VDSType.oVirtNode }), + && SchedulingManager.getInstance().canSchedule(getVdsGroup(), + getVm(), getRunVdssList(), - getReturnValue().getCanDoActionMessages(), - true); + getParameters().getInitialHosts(), + getVdsDestinationId(), + getReturnValue().getCanDoActionMessages()); } @Override diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MigrateVmToServerCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MigrateVmToServerCommand.java index 195040b..802ab91 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MigrateVmToServerCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MigrateVmToServerCommand.java @@ -11,7 +11,6 @@ public MigrateVmToServerCommand(T parameters) { super(parameters); setVdsDestinationId(parameters.getVdsId()); - getVdsSelector().setDestinationVdsId(getVdsDestinationId()); } @Override diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommand.java index bcbcfe0..46dac82 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommand.java @@ -21,8 +21,8 @@ import org.ovirt.engine.core.bll.quota.QuotaConsumptionParameter; import org.ovirt.engine.core.bll.quota.QuotaVdsDependent; import org.ovirt.engine.core.bll.quota.QuotaVdsGroupConsumptionParameter; +import org.ovirt.engine.core.bll.scheduling.SchedulingManager; import org.ovirt.engine.core.bll.scheduling.VdsFreeMemoryChecker; -import org.ovirt.engine.core.bll.scheduling.VdsSelector; import org.ovirt.engine.core.bll.utils.PermissionSubject; import org.ovirt.engine.core.bll.utils.VmDeviceUtils; import org.ovirt.engine.core.bll.validator.RunVmValidator; @@ -49,7 +49,6 @@ import org.ovirt.engine.core.common.businessentities.StorageDomainStatus; import org.ovirt.engine.core.common.businessentities.StorageDomainType; import org.ovirt.engine.core.common.businessentities.VDS; -import org.ovirt.engine.core.common.businessentities.VDSType; import org.ovirt.engine.core.common.businessentities.VM; import org.ovirt.engine.core.common.businessentities.VMStatus; import org.ovirt.engine.core.common.businessentities.VmDevice; @@ -143,9 +142,6 @@ } if (getVm() != null) { - Guid destVdsId = (getDestinationVds() != null) ? (Guid) getDestinationVds().getId() : null; - setVdsSelector(new VdsSelector(getVm(), destVdsId, new VdsFreeMemoryChecker(this))); - refreshBootParameters(runVmParameters); getVm().setLastStartTime(new Date()); @@ -643,9 +639,15 @@ protected boolean getVdsToRunOn() { // use destination vds or default vds or none - List<VDS> vdsList = getVdsDAO() - .getAllOfTypes(new VDSType[] { VDSType.VDS, VDSType.oVirtNode }); - Guid vdsToRunOn = getVdsSelector().getVdsToRunOn(vdsList, getRunVdssList(), false); + VDS destinationVds = getDestinationVds(); + Guid vdsToRunOn = + SchedulingManager.getInstance().schedule(getVdsGroup(), + getVm(), + getRunVdssList(), + null, + destinationVds == null ? null : destinationVds.getId(), + new ArrayList<String>(), + new VdsFreeMemoryChecker(this)); setVdsId(vdsToRunOn); if (vdsToRunOn != null && !Guid.Empty.equals(vdsToRunOn)) { getRunVdssList().add(vdsToRunOn); @@ -765,6 +767,7 @@ } List<String> messages = getReturnValue().getCanDoActionMessages(); List<Disk> vmDisks = getDiskDao().getAllForVm(vm.getId(), true); + VDS destVds = getDestinationVds(); boolean canDoAction = getRunVmValidator().canRunVm(vm, messages, @@ -775,8 +778,9 @@ getParameters().getDiskPath(), getParameters().getFloppyPath(), getParameters().getRunAsStateless(), - getVdsSelector(), - getRunVdssList()) && + getRunVdssList(), + destVds == null ? null : destVds.getId(), + getVdsGroup()) && validateNetworkInterfaces(); // check for Vm Payload diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommandBase.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommandBase.java index 49c3cc9..45fcb80 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommandBase.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommandBase.java @@ -16,7 +16,6 @@ import org.ovirt.engine.core.bll.job.ExecutionHandler; import org.ovirt.engine.core.bll.job.JobRepositoryFactory; import org.ovirt.engine.core.bll.scheduling.RunVmDelayer; -import org.ovirt.engine.core.bll.scheduling.VdsSelector; import org.ovirt.engine.core.bll.snapshots.SnapshotsValidator; import org.ovirt.engine.core.bll.storage.StorageHelperDirector; import org.ovirt.engine.core.common.action.VmOperationParameterBase; @@ -52,7 +51,6 @@ private static Log log = LogFactory.getLog(RunVmCommandBase.class); protected static final HashMap<Guid, Integer> _vds_pending_vm_count = new HashMap<Guid, Integer>(); - private VdsSelector privateVdsSelector; protected boolean _isRerun = false; protected VDS _destinationVds; private SnapshotsValidator snapshotsValidator=new SnapshotsValidator(); @@ -67,14 +65,6 @@ } protected abstract VDS getDestinationVds(); - - protected VdsSelector getVdsSelector() { - return privateVdsSelector; - } - - protected void setVdsSelector(VdsSelector value) { - privateVdsSelector = value; - } public SnapshotsValidator getSnapshotsValidator() { return snapshotsValidator; diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsGroupCommandBase.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsGroupCommandBase.java index 8c689da..d523823 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsGroupCommandBase.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsGroupCommandBase.java @@ -22,7 +22,7 @@ } @Override - protected VDSGroup getVdsGroup() { + public VDSGroup getVdsGroup() { if (_vdsGroup == null) { _vdsGroup = getVdsGroupDAO().get(getParameters().getVdsGroupId()); } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsGroupOperationCommandBase.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsGroupOperationCommandBase.java index 8056bab..a0de92e 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsGroupOperationCommandBase.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsGroupOperationCommandBase.java @@ -23,7 +23,7 @@ } @Override - protected VDSGroup getVdsGroup() { + public VDSGroup getVdsGroup() { return getParameters().getVdsGroup(); } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmPoolCommandBase.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmPoolCommandBase.java index f0e39bd..a52678b 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmPoolCommandBase.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmPoolCommandBase.java @@ -5,9 +5,6 @@ import java.util.LinkedList; import java.util.List; -import org.ovirt.engine.core.bll.scheduling.NonWaitingDelayer; -import org.ovirt.engine.core.bll.scheduling.VdsFreeMemoryChecker; -import org.ovirt.engine.core.bll.scheduling.VdsSelector; import org.ovirt.engine.core.bll.snapshots.SnapshotsValidator; import org.ovirt.engine.core.bll.storage.StoragePoolValidator; import org.ovirt.engine.core.bll.utils.PermissionSubject; @@ -22,11 +19,14 @@ import org.ovirt.engine.core.common.businessentities.DiskImage; import org.ovirt.engine.core.common.businessentities.Snapshot.SnapshotType; import org.ovirt.engine.core.common.businessentities.StoragePool; +import org.ovirt.engine.core.common.businessentities.VDSGroup; import org.ovirt.engine.core.common.businessentities.VM; import org.ovirt.engine.core.common.businessentities.VmPool; import org.ovirt.engine.core.common.businessentities.VmPoolMap; +import org.ovirt.engine.core.common.businessentities.VmType; import org.ovirt.engine.core.common.businessentities.tags; import org.ovirt.engine.core.common.errors.VdcBllMessages; +import org.ovirt.engine.core.common.osinfo.OsRepositoryImpl; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.dal.dbbroker.DbFacade; import org.ovirt.engine.core.dao.DiskDao; @@ -213,7 +213,7 @@ protected static boolean canRunPoolVm(Guid vmId, ArrayList<String> messages) { VM vm = DbFacade.getInstance().getVmDao().get(vmId); - + VDSGroup vdsGroup = DbFacade.getInstance().getVdsGroupDao().get(vm.getVdsGroupId()); if (vm == null) { messages.add(VdcBllMessages.ACTION_TYPE_FAILED_VM_NOT_FOUND.name()); return false; @@ -224,11 +224,7 @@ VmHandler.updateNetworkInterfacesFromDb(vm); RunVmParams runVmParams = new RunVmParams(vmId); - VdsSelector vdsSelector = - new VdsSelector(vm, - runVmParams.getDestinationVdsId() != null ? - runVmParams.getDestinationVdsId() : vm.getDedicatedVmForVds(), - new VdsFreeMemoryChecker(new NonWaitingDelayer())); + runVmParams.setUseVnc(OsRepositoryImpl.INSTANCE.isLinux(vm.getVmOsId()) || vm.getVmType() == VmType.Server); return getRunVmValidator().canRunVm(vm, messages, @@ -239,8 +235,9 @@ runVmParams.getDiskPath(), runVmParams.getFloppyPath(), runVmParams.getRunAsStateless(), - vdsSelector, - new ArrayList<Guid>()); + new ArrayList<Guid>(), + null, + vdsGroup); } private static DiskDao getDiskDao() { diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GlusterHookCommandBase.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GlusterHookCommandBase.java index 82ab56e..52ff42e 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GlusterHookCommandBase.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GlusterHookCommandBase.java @@ -28,7 +28,7 @@ } @Override - protected VDSGroup getVdsGroup() { + public VDSGroup getVdsGroup() { if (getGlusterHook() != null) { setVdsGroupId(getGlusterHook().getClusterId()); } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GlusterVolumeCommandBase.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GlusterVolumeCommandBase.java index 01f341d..99447a5 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GlusterVolumeCommandBase.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GlusterVolumeCommandBase.java @@ -27,7 +27,7 @@ } @Override - protected VDSGroup getVdsGroup() { + public VDSGroup getVdsGroup() { if (getGlusterVolume() != null) { setVdsGroupId(getGlusterVolume().getClusterId()); } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/RunVmValidator.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/RunVmValidator.java index 3207948..c69e17a 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/RunVmValidator.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/RunVmValidator.java @@ -13,7 +13,7 @@ import org.ovirt.engine.core.bll.IsoDomainListSyncronizer; import org.ovirt.engine.core.bll.ValidationResult; import org.ovirt.engine.core.bll.interfaces.BackendInternal; -import org.ovirt.engine.core.bll.scheduling.VdsSelector; +import org.ovirt.engine.core.bll.scheduling.SchedulingManager; import org.ovirt.engine.core.bll.snapshots.SnapshotsValidator; import org.ovirt.engine.core.bll.storage.StoragePoolValidator; import org.ovirt.engine.core.common.VdcActionUtils; @@ -26,8 +26,8 @@ import org.ovirt.engine.core.common.businessentities.StorageDomain; import org.ovirt.engine.core.common.businessentities.StoragePool; import org.ovirt.engine.core.common.businessentities.VDS; +import org.ovirt.engine.core.common.businessentities.VDSGroup; import org.ovirt.engine.core.common.businessentities.VDSStatus; -import org.ovirt.engine.core.common.businessentities.VDSType; import org.ovirt.engine.core.common.businessentities.VM; import org.ovirt.engine.core.common.businessentities.VMStatus; import org.ovirt.engine.core.common.config.Config; @@ -354,8 +354,9 @@ String diskPath, String floppyPath, Boolean runAsStateless, - VdsSelector vdsSelector, - List<Guid> vdsBlackList) { + List<Guid> vdsBlackList, + Guid destVds, + VDSGroup vdsGroup) { if (!validateVmProperties(vm, messages)) { return false; } @@ -406,10 +407,12 @@ return false; } } - if (!vdsSelector.canFindVdsToRunOn(getVdsDao().getAllOfTypes(new VDSType[] { VDSType.VDS, VDSType.oVirtNode }), + if (!SchedulingManager.getInstance().canSchedule(vdsGroup, + vm, vdsBlackList, - messages, - false)) { + null, + destVds, + messages)) { return false; } result = validateVmStatusUsingMatrix(vm); diff --git a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/RunVmCommandTest.java b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/RunVmCommandTest.java index 03def2d..8769d14 100644 --- a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/RunVmCommandTest.java +++ b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/RunVmCommandTest.java @@ -28,7 +28,6 @@ import org.mockito.runners.MockitoJUnitRunner; import org.mockito.stubbing.Answer; import org.ovirt.engine.core.bll.interfaces.BackendInternal; -import org.ovirt.engine.core.bll.scheduling.VdsSelector; import org.ovirt.engine.core.bll.snapshots.SnapshotsValidator; import org.ovirt.engine.core.bll.validator.RunVmValidator; import org.ovirt.engine.core.common.action.RunVmParams; @@ -38,6 +37,7 @@ import org.ovirt.engine.core.common.businessentities.IVdsAsyncCommand; import org.ovirt.engine.core.common.businessentities.StorageDomain; import org.ovirt.engine.core.common.businessentities.StoragePool; +import org.ovirt.engine.core.common.businessentities.VDSGroup; import org.ovirt.engine.core.common.businessentities.VM; import org.ovirt.engine.core.common.businessentities.VMStatus; import org.ovirt.engine.core.common.businessentities.VmPayload; @@ -320,11 +320,10 @@ final VM vm = new VM(); vm.setStatus(VMStatus.Down); doReturn(new StoragePool()).when(command).getStoragePool(); - VdsSelector vdsSelector = mock(VdsSelector.class); - doReturn(vdsSelector).when(command).getVdsSelector(); doReturn(vm).when(command).getVm(); doReturn(true).when(command).validateNetworkInterfaces(); doReturn(true).when(command).checkPayload(any(VmPayload.class), anyString()); + doReturn(new VDSGroup()).when(command).getVdsGroup(); assertTrue(command.canDoAction()); assertTrue(command.getReturnValue().getCanDoActionMessages().isEmpty()); } @@ -363,8 +362,9 @@ anyString(), anyString(), anyBoolean(), - any(VdsSelector.class), - Matchers.anyListOf(Guid.class))).thenReturn(true); + Matchers.anyListOf(Guid.class), + any(Guid.class), + any(VDSGroup.class))).thenReturn(true); doReturn(runVmValidator).when(command).getRunVmValidator(); return runVmValidator; } diff --git a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/UpdateVmCommandTest.java b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/UpdateVmCommandTest.java index d8a9c43..e917ca8 100644 --- a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/UpdateVmCommandTest.java +++ b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/UpdateVmCommandTest.java @@ -97,7 +97,7 @@ command = spy(new UpdateVmCommand<VmManagementParametersBase>(params) { @Override - protected VDSGroup getVdsGroup() { + public VDSGroup getVdsGroup() { return group; } }); diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/auditloghandling/AuditLogableBase.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/auditloghandling/AuditLogableBase.java index 78e921c..cb99998 100644 --- a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/auditloghandling/AuditLogableBase.java +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/auditloghandling/AuditLogableBase.java @@ -404,7 +404,7 @@ mVdsGroupId = value; } - protected VDSGroup getVdsGroup() { + public VDSGroup getVdsGroup() { if (mVdsGroup == null) { if (mVdsGroupId != null) { mVdsGroup = getVdsGroupDAO().get(mVdsGroupId); -- To view, visit http://gerrit.ovirt.org/16377 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I0cb15af2d6fb0a5bb1df8023862641a3d648f7ec Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Gilad Chaplik <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
