mirror of https://github.com/apache/cloudstack.git
Compare commits
13 Commits
62d4a55c16
...
7edc3b9639
| Author | SHA1 | Date |
|---|---|---|
|
|
7edc3b9639 | |
|
|
bce3e54a7e | |
|
|
6a9835904c | |
|
|
6846619a6f | |
|
|
d1eb2822d9 | |
|
|
6c1c286cb4 | |
|
|
3f6f11a9b0 | |
|
|
151444c7cf | |
|
|
47a6a81cde | |
|
|
0a1a90c42b | |
|
|
7b88ab6e41 | |
|
|
225341c116 | |
|
|
03ca32900e |
|
|
@ -78,6 +78,7 @@ public class UpdateNetworkOfferingCmd extends BaseCmd {
|
|||
|
||||
@Parameter(name = ApiConstants.DOMAIN_ID,
|
||||
type = CommandType.STRING,
|
||||
length = 4096,
|
||||
description = "The ID of the containing domain(s) as comma separated string, public for public offerings")
|
||||
private String domainIds;
|
||||
|
||||
|
|
|
|||
|
|
@ -75,6 +75,7 @@ public class UpdateDiskOfferingCmd extends BaseCmd {
|
|||
@Parameter(name = ApiConstants.ZONE_ID,
|
||||
type = CommandType.STRING,
|
||||
description = "The ID of the containing zone(s) as comma separated string, all for all zones offerings",
|
||||
length = 4096,
|
||||
since = "4.13")
|
||||
private String zoneIds;
|
||||
|
||||
|
|
|
|||
|
|
@ -69,6 +69,7 @@ public class UpdateServiceOfferingCmd extends BaseCmd {
|
|||
@Parameter(name = ApiConstants.ZONE_ID,
|
||||
type = CommandType.STRING,
|
||||
description = "The ID of the containing zone(s) as comma separated string, all for all zones offerings",
|
||||
length = 4096,
|
||||
since = "4.13")
|
||||
private String zoneIds;
|
||||
|
||||
|
|
|
|||
|
|
@ -65,6 +65,7 @@ public class UpdateVPCOfferingCmd extends BaseAsyncCmd {
|
|||
@Parameter(name = ApiConstants.ZONE_ID,
|
||||
type = CommandType.STRING,
|
||||
description = "The ID of the containing zone(s) as comma separated string, all for all zones offerings",
|
||||
length = 4096,
|
||||
since = "4.13")
|
||||
private String zoneIds;
|
||||
|
||||
|
|
|
|||
|
|
@ -48,7 +48,7 @@ public interface VolumeDao extends GenericDao<VolumeVO, Long>, StateDao<Volume.S
|
|||
|
||||
List<VolumeVO> findIncludingRemovedByInstanceAndType(long id, Volume.Type vType);
|
||||
|
||||
List<VolumeVO> findByInstanceIdAndPoolId(long instanceId, long poolId);
|
||||
List<VolumeVO> findNonDestroyedVolumesByInstanceIdAndPoolId(long instanceId, long poolId);
|
||||
|
||||
List<VolumeVO> findByInstanceIdDestroyed(long vmId);
|
||||
|
||||
|
|
@ -70,11 +70,11 @@ public interface VolumeDao extends GenericDao<VolumeVO, Long>, StateDao<Volume.S
|
|||
|
||||
List<VolumeVO> findCreatedByInstance(long id);
|
||||
|
||||
List<VolumeVO> findByPoolId(long poolId);
|
||||
List<VolumeVO> findNonDestroyedVolumesByPoolId(long poolId);
|
||||
|
||||
VolumeVO findByPoolIdName(long poolId, String name);
|
||||
|
||||
List<VolumeVO> findByPoolId(long poolId, Volume.Type volumeType);
|
||||
List<VolumeVO> findNonDestroyedVolumesByPoolId(long poolId, Volume.Type volumeType);
|
||||
|
||||
List<VolumeVO> findByPoolIdAndState(long poolid, Volume.State state);
|
||||
|
||||
|
|
|
|||
|
|
@ -135,7 +135,7 @@ public class VolumeDaoImpl extends GenericDaoBase<VolumeVO, Long> implements Vol
|
|||
}
|
||||
|
||||
@Override
|
||||
public List<VolumeVO> findByPoolId(long poolId) {
|
||||
public List<VolumeVO> findNonDestroyedVolumesByPoolId(long poolId) {
|
||||
SearchCriteria<VolumeVO> sc = AllFieldsSearch.create();
|
||||
sc.setParameters("poolId", poolId);
|
||||
sc.setParameters("notDestroyed", Volume.State.Destroy, Volume.State.Expunged);
|
||||
|
|
@ -144,7 +144,7 @@ public class VolumeDaoImpl extends GenericDaoBase<VolumeVO, Long> implements Vol
|
|||
}
|
||||
|
||||
@Override
|
||||
public List<VolumeVO> findByInstanceIdAndPoolId(long instanceId, long poolId) {
|
||||
public List<VolumeVO> findNonDestroyedVolumesByInstanceIdAndPoolId(long instanceId, long poolId) {
|
||||
SearchCriteria<VolumeVO> sc = AllFieldsSearch.create();
|
||||
sc.setParameters("instanceId", instanceId);
|
||||
sc.setParameters("poolId", poolId);
|
||||
|
|
@ -161,7 +161,7 @@ public class VolumeDaoImpl extends GenericDaoBase<VolumeVO, Long> implements Vol
|
|||
}
|
||||
|
||||
@Override
|
||||
public List<VolumeVO> findByPoolId(long poolId, Volume.Type volumeType) {
|
||||
public List<VolumeVO> findNonDestroyedVolumesByPoolId(long poolId, Volume.Type volumeType) {
|
||||
SearchCriteria<VolumeVO> sc = AllFieldsSearch.create();
|
||||
sc.setParameters("poolId", poolId);
|
||||
sc.setParameters("notDestroyed", Volume.State.Destroy, Volume.State.Expunged);
|
||||
|
|
|
|||
|
|
@ -31,4 +31,6 @@ public interface VMScheduledJobDao extends GenericDao<VMScheduledJobVO, Long> {
|
|||
int expungeJobsForSchedules(List<Long> scheduleId, Date dateAfter);
|
||||
|
||||
int expungeJobsBefore(Date currentTimestamp);
|
||||
|
||||
VMScheduledJobVO findByScheduleAndTimestamp(long scheduleId, Date scheduledTimestamp);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -39,6 +39,8 @@ public class VMScheduledJobDaoImpl extends GenericDaoBase<VMScheduledJobVO, Long
|
|||
|
||||
private final SearchBuilder<VMScheduledJobVO> expungeJobForScheduleSearch;
|
||||
|
||||
private final SearchBuilder<VMScheduledJobVO> scheduleAndTimestampSearch;
|
||||
|
||||
static final String SCHEDULED_TIMESTAMP = "scheduled_timestamp";
|
||||
|
||||
static final String VM_SCHEDULE_ID = "vm_schedule_id";
|
||||
|
|
@ -58,6 +60,11 @@ public class VMScheduledJobDaoImpl extends GenericDaoBase<VMScheduledJobVO, Long
|
|||
expungeJobForScheduleSearch.and(VM_SCHEDULE_ID, expungeJobForScheduleSearch.entity().getVmScheduleId(), SearchCriteria.Op.IN);
|
||||
expungeJobForScheduleSearch.and(SCHEDULED_TIMESTAMP, expungeJobForScheduleSearch.entity().getScheduledTime(), SearchCriteria.Op.GTEQ);
|
||||
expungeJobForScheduleSearch.done();
|
||||
|
||||
scheduleAndTimestampSearch = createSearchBuilder();
|
||||
scheduleAndTimestampSearch.and(VM_SCHEDULE_ID, scheduleAndTimestampSearch.entity().getVmScheduleId(), SearchCriteria.Op.EQ);
|
||||
scheduleAndTimestampSearch.and(SCHEDULED_TIMESTAMP, scheduleAndTimestampSearch.entity().getScheduledTime(), SearchCriteria.Op.EQ);
|
||||
scheduleAndTimestampSearch.done();
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -92,4 +99,12 @@ public class VMScheduledJobDaoImpl extends GenericDaoBase<VMScheduledJobVO, Long
|
|||
sc.setParameters(SCHEDULED_TIMESTAMP, date);
|
||||
return expunge(sc);
|
||||
}
|
||||
|
||||
@Override
|
||||
public VMScheduledJobVO findByScheduleAndTimestamp(long scheduleId, Date scheduledTimestamp) {
|
||||
SearchCriteria<VMScheduledJobVO> sc = scheduleAndTimestampSearch.create();
|
||||
sc.setParameters(VM_SCHEDULE_ID, scheduleId);
|
||||
sc.setParameters(SCHEDULED_TIMESTAMP, scheduledTimestamp);
|
||||
return findOneBy(sc);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -126,7 +126,7 @@ public class PrimaryDataStoreImpl implements PrimaryDataStore {
|
|||
|
||||
@Override
|
||||
public List<VolumeInfo> getVolumes() {
|
||||
List<VolumeVO> volumes = volumeDao.findByPoolId(getId());
|
||||
List<VolumeVO> volumes = volumeDao.findNonDestroyedVolumesByPoolId(getId());
|
||||
List<VolumeInfo> volumeInfos = new ArrayList<VolumeInfo>();
|
||||
for (VolumeVO volume : volumes) {
|
||||
volumeInfos.add(VolumeObject.getVolumeObject(this, volume));
|
||||
|
|
|
|||
|
|
@ -123,7 +123,7 @@ public class SiocManagerImpl implements SiocManager {
|
|||
|
||||
int limitIopsTotal = 0;
|
||||
|
||||
List<VolumeVO> volumes = volumeDao.findByPoolId(storagePoolId, null);
|
||||
List<VolumeVO> volumes = volumeDao.findNonDestroyedVolumesByPoolId(storagePoolId, null);
|
||||
|
||||
if (volumes != null && volumes.size() > 0) {
|
||||
Set<Long> instanceIds = new HashSet<>();
|
||||
|
|
|
|||
|
|
@ -563,7 +563,7 @@ public class DateraPrimaryDataStoreDriver implements PrimaryDataStoreDriver {
|
|||
private long getUsedBytes(StoragePool storagePool, long volumeIdToIgnore) {
|
||||
long usedSpaceBytes = 0;
|
||||
|
||||
List<VolumeVO> lstVolumes = _volumeDao.findByPoolId(storagePool.getId(), null);
|
||||
List<VolumeVO> lstVolumes = _volumeDao.findNonDestroyedVolumesByPoolId(storagePool.getId(), null);
|
||||
|
||||
if (lstVolumes != null) {
|
||||
for (VolumeVO volume : lstVolumes) {
|
||||
|
|
|
|||
|
|
@ -247,7 +247,7 @@ public class DateraHostListener implements HypervisorHostListener {
|
|||
List<String> storagePaths = new ArrayList<>();
|
||||
|
||||
// If you do not pass in null for the second parameter, you only get back applicable ROOT disks.
|
||||
List<VolumeVO> volumes = _volumeDao.findByPoolId(storagePoolId, null);
|
||||
List<VolumeVO> volumes = _volumeDao.findNonDestroyedVolumesByPoolId(storagePoolId, null);
|
||||
|
||||
if (volumes != null) {
|
||||
for (VolumeVO volume : volumes) {
|
||||
|
|
@ -317,7 +317,7 @@ public class DateraHostListener implements HypervisorHostListener {
|
|||
StoragePoolVO storagePool = _storagePoolDao.findById(storagePoolId);
|
||||
|
||||
// If you do not pass in null for the second parameter, you only get back applicable ROOT disks.
|
||||
List<VolumeVO> volumes = _volumeDao.findByPoolId(storagePoolId, null);
|
||||
List<VolumeVO> volumes = _volumeDao.findNonDestroyedVolumesByPoolId(storagePoolId, null);
|
||||
|
||||
if (volumes != null) {
|
||||
for (VolumeVO volume : volumes) {
|
||||
|
|
|
|||
|
|
@ -433,7 +433,7 @@ public class SolidFirePrimaryDataStoreDriver implements PrimaryDataStoreDriver {
|
|||
public long getUsedIops(StoragePool storagePool) {
|
||||
long usedIops = 0;
|
||||
|
||||
List<VolumeVO> volumes = volumeDao.findByPoolId(storagePool.getId(), null);
|
||||
List<VolumeVO> volumes = volumeDao.findNonDestroyedVolumesByPoolId(storagePool.getId(), null);
|
||||
|
||||
if (volumes != null) {
|
||||
for (VolumeVO volume : volumes) {
|
||||
|
|
|
|||
|
|
@ -199,7 +199,7 @@ public class SolidFireHostListener implements HypervisorHostListener {
|
|||
List<String> storagePaths = new ArrayList<>();
|
||||
|
||||
// If you do not pass in null for the second parameter, you only get back applicable ROOT disks.
|
||||
List<VolumeVO> volumes = volumeDao.findByPoolId(storagePoolId, null);
|
||||
List<VolumeVO> volumes = volumeDao.findNonDestroyedVolumesByPoolId(storagePoolId, null);
|
||||
|
||||
if (volumes != null) {
|
||||
for (VolumeVO volume : volumes) {
|
||||
|
|
@ -230,7 +230,7 @@ public class SolidFireHostListener implements HypervisorHostListener {
|
|||
StoragePoolVO storagePool = storagePoolDao.findById(storagePoolId);
|
||||
|
||||
// If you do not pass in null for the second parameter, you only get back applicable ROOT disks.
|
||||
List<VolumeVO> volumes = volumeDao.findByPoolId(storagePoolId, null);
|
||||
List<VolumeVO> volumes = volumeDao.findNonDestroyedVolumesByPoolId(storagePoolId, null);
|
||||
|
||||
if (volumes != null) {
|
||||
for (VolumeVO volume : volumes) {
|
||||
|
|
|
|||
|
|
@ -1276,7 +1276,7 @@ public class StorPoolPrimaryDataStoreDriver implements PrimaryDataStoreDriver {
|
|||
return volumeStats;
|
||||
}
|
||||
} else {
|
||||
List<VolumeVO> volumes = volumeDao.findByPoolId(storagePool.getId());
|
||||
List<VolumeVO> volumes = volumeDao.findNonDestroyedVolumesByPoolId(storagePool.getId());
|
||||
for (VolumeVO volume : volumes) {
|
||||
if (volume.getPath() != null && volume.getPath().equals(volumeId)) {
|
||||
long size = volume.getSize();
|
||||
|
|
|
|||
|
|
@ -1026,8 +1026,8 @@ public class ResourceManagerImpl extends ManagerBase implements ResourceManager,
|
|||
}
|
||||
|
||||
protected void destroyLocalStoragePoolVolumes(long poolId) {
|
||||
List<VolumeVO> rootDisks = volumeDao.findByPoolId(poolId);
|
||||
List<VolumeVO> dataVolumes = volumeDao.findByPoolId(poolId, Volume.Type.DATADISK);
|
||||
List<VolumeVO> rootDisks = volumeDao.findNonDestroyedVolumesByPoolId(poolId);
|
||||
List<VolumeVO> dataVolumes = volumeDao.findNonDestroyedVolumesByPoolId(poolId, Volume.Type.DATADISK);
|
||||
|
||||
List<VolumeVO> volumes = new ArrayList<>();
|
||||
addVolumesToList(volumes, rootDisks);
|
||||
|
|
|
|||
|
|
@ -1646,7 +1646,7 @@ public class StatsCollector extends ManagerBase implements ComponentMethodInterc
|
|||
List<StoragePoolVO> pools = _storagePoolDao.listAll();
|
||||
|
||||
for (StoragePoolVO pool : pools) {
|
||||
List<VolumeVO> volumes = _volsDao.findByPoolId(pool.getId(), null);
|
||||
List<VolumeVO> volumes = _volsDao.findNonDestroyedVolumesByPoolId(pool.getId(), null);
|
||||
for (VolumeVO volume : volumes) {
|
||||
if (!List.of(ImageFormat.QCOW2, ImageFormat.VHD, ImageFormat.OVA, ImageFormat.RAW).contains(volume.getFormat()) &&
|
||||
!List.of(Storage.StoragePoolType.PowerFlex, Storage.StoragePoolType.FiberChannel).contains(pool.getPoolType())) {
|
||||
|
|
|
|||
|
|
@ -1558,17 +1558,21 @@ public class StorageManagerImpl extends ManagerBase implements StorageManager, C
|
|||
|
||||
protected String getStoragePoolNonDestroyedVolumesLog(long storagePoolId) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
List<VolumeVO> nonDestroyedVols = volumeDao.findByPoolId(storagePoolId, null);
|
||||
List<VolumeVO> nonDestroyedVols = volumeDao.findNonDestroyedVolumesByPoolId(storagePoolId, null);
|
||||
VMInstanceVO volInstance;
|
||||
List<String> logMessageInfo = new ArrayList<>();
|
||||
|
||||
sb.append("[");
|
||||
for (VolumeVO vol : nonDestroyedVols) {
|
||||
volInstance = _vmInstanceDao.findById(vol.getInstanceId());
|
||||
if (volInstance != null) {
|
||||
logMessageInfo.add(String.format("Volume [%s] (attached to VM [%s])", vol.getUuid(), volInstance.getUuid()));
|
||||
if (vol.getInstanceId() != null) {
|
||||
volInstance = _vmInstanceDao.findById(vol.getInstanceId());
|
||||
if (volInstance != null) {
|
||||
logMessageInfo.add(String.format("Volume [%s] (attached to VM [%s])", vol.getUuid(), volInstance.getUuid()));
|
||||
} else {
|
||||
logMessageInfo.add(String.format("Volume [%s] (attached VM with ID [%d] doesn't exists)", vol.getUuid(), vol.getInstanceId()));
|
||||
}
|
||||
} else {
|
||||
logMessageInfo.add(String.format("Volume [%s]", vol.getUuid()));
|
||||
logMessageInfo.add(String.format("Volume [%s] (not attached to any VM)", vol.getUuid()));
|
||||
}
|
||||
}
|
||||
sb.append(String.join(", ", logMessageInfo));
|
||||
|
|
@ -2640,7 +2644,7 @@ public class StorageManagerImpl extends ManagerBase implements StorageManager, C
|
|||
|
||||
for (String childDatastoreUUID : childDatastoreUUIDs) {
|
||||
StoragePoolVO dataStoreVO = _storagePoolDao.findPoolByUUID(childDatastoreUUID);
|
||||
List<VolumeVO> allVolumes = volumeDao.findByPoolId(dataStoreVO.getId());
|
||||
List<VolumeVO> allVolumes = volumeDao.findNonDestroyedVolumesByPoolId(dataStoreVO.getId());
|
||||
allVolumes.removeIf(volumeVO -> volumeVO.getInstanceId() == null);
|
||||
allVolumes.removeIf(volumeVO -> volumeVO.getState() != Volume.State.Ready);
|
||||
for (VolumeVO volume : allVolumes) {
|
||||
|
|
|
|||
|
|
@ -91,7 +91,7 @@ public class StoragePoolAutomationImpl implements StoragePoolAutomation {
|
|||
boolean restart = !CollectionUtils.isEmpty(upPools);
|
||||
|
||||
// 2. Get a list of all the ROOT volumes within this storage pool
|
||||
List<VolumeVO> allVolumes = volumeDao.findByPoolId(pool.getId());
|
||||
List<VolumeVO> allVolumes = volumeDao.findNonDestroyedVolumesByPoolId(pool.getId());
|
||||
// 3. Enqueue to the work queue
|
||||
enqueueMigrationsForVolumes(allVolumes, pool);
|
||||
// 4. Process the queue
|
||||
|
|
|
|||
|
|
@ -2261,7 +2261,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
|
|||
private List<String> getVolumesByHost(HostVO host, StoragePool pool){
|
||||
List<VMInstanceVO> vmsPerHost = _vmInstanceDao.listByHostId(host.getId());
|
||||
return vmsPerHost.stream()
|
||||
.flatMap(vm -> _volsDao.findByInstanceIdAndPoolId(vm.getId(),pool.getId()).stream().map(vol ->
|
||||
.flatMap(vm -> _volsDao.findNonDestroyedVolumesByInstanceIdAndPoolId(vm.getId(),pool.getId()).stream().map(vol ->
|
||||
vol.getState() == Volume.State.Ready ? (vol.getFormat() == ImageFormat.OVA ? vol.getChainInfo() : vol.getPath()) : null).filter(Objects::nonNull))
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
|
|
|||
|
|
@ -162,7 +162,13 @@ public class VMSchedulerImpl extends ManagerBase implements VMScheduler, Configu
|
|||
}
|
||||
|
||||
Date scheduledDateTime = Date.from(ts.toInstant());
|
||||
VMScheduledJobVO scheduledJob = new VMScheduledJobVO(vmSchedule.getVmId(), vmSchedule.getId(), vmSchedule.getAction(), scheduledDateTime);
|
||||
VMScheduledJobVO scheduledJob = vmScheduledJobDao.findByScheduleAndTimestamp(vmSchedule.getId(), scheduledDateTime);
|
||||
if (scheduledJob != null) {
|
||||
logger.trace("Job is already scheduled for schedule {} at {}", vmSchedule, scheduledDateTime);
|
||||
return scheduledDateTime;
|
||||
}
|
||||
|
||||
scheduledJob = new VMScheduledJobVO(vmSchedule.getVmId(), vmSchedule.getId(), vmSchedule.getAction(), scheduledDateTime);
|
||||
try {
|
||||
vmScheduledJobDao.persist(scheduledJob);
|
||||
ActionEventUtils.onScheduledActionEvent(User.UID_SYSTEM, vm.getAccountId(), actionEventMap.get(vmSchedule.getAction()),
|
||||
|
|
|
|||
|
|
@ -198,8 +198,8 @@ public class ResourceManagerImplTest {
|
|||
|
||||
rootDisks = Arrays.asList(rootDisk1, rootDisk2);
|
||||
dataDisks = Collections.singletonList(dataDisk);
|
||||
when(volumeDao.findByPoolId(poolId)).thenReturn(rootDisks);
|
||||
when(volumeDao.findByPoolId(poolId, Volume.Type.DATADISK)).thenReturn(dataDisks);
|
||||
when(volumeDao.findNonDestroyedVolumesByPoolId(poolId)).thenReturn(rootDisks);
|
||||
when(volumeDao.findNonDestroyedVolumesByPoolId(poolId, Volume.Type.DATADISK)).thenReturn(dataDisks);
|
||||
}
|
||||
|
||||
@After
|
||||
|
|
@ -564,22 +564,22 @@ public class ResourceManagerImplTest {
|
|||
|
||||
@Test
|
||||
public void testDestroyLocalStoragePoolVolumesOnlyRootDisks() {
|
||||
when(volumeDao.findByPoolId(poolId, Volume.Type.DATADISK)).thenReturn(null);
|
||||
when(volumeDao.findNonDestroyedVolumesByPoolId(poolId, Volume.Type.DATADISK)).thenReturn(null);
|
||||
resourceManager.destroyLocalStoragePoolVolumes(poolId);
|
||||
verify(volumeDao, times(rootDisks.size())).updateAndRemoveVolume(any(VolumeVO.class));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDestroyLocalStoragePoolVolumesOnlyDataDisks() {
|
||||
when(volumeDao.findByPoolId(poolId)).thenReturn(null);
|
||||
when(volumeDao.findNonDestroyedVolumesByPoolId(poolId)).thenReturn(null);
|
||||
resourceManager.destroyLocalStoragePoolVolumes(poolId);
|
||||
verify(volumeDao, times(dataDisks.size())).updateAndRemoveVolume(any(VolumeVO.class));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDestroyLocalStoragePoolVolumesNoDisks() {
|
||||
when(volumeDao.findByPoolId(poolId)).thenReturn(null);
|
||||
when(volumeDao.findByPoolId(poolId, Volume.Type.DATADISK)).thenReturn(null);
|
||||
when(volumeDao.findNonDestroyedVolumesByPoolId(poolId)).thenReturn(null);
|
||||
when(volumeDao.findNonDestroyedVolumesByPoolId(poolId, Volume.Type.DATADISK)).thenReturn(null);
|
||||
resourceManager.destroyLocalStoragePoolVolumes(poolId);
|
||||
verify(volumeDao, never()).updateAndRemoveVolume(any(VolumeVO.class));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -531,7 +531,7 @@ public class StorageManagerImplTest {
|
|||
}
|
||||
|
||||
@Test
|
||||
public void getStoragePoolNonDestroyedVolumesLogTestNonDestroyedVolumesReturnLog() {
|
||||
public void getStoragePoolNonDestroyedVolumesLogTestNonDestroyedVolumes_VMAttachedLogs() {
|
||||
Mockito.doReturn(1L).when(storagePoolVOMock).getId();
|
||||
Mockito.doReturn(1L).when(volume1VOMock).getInstanceId();
|
||||
Mockito.doReturn("786633d1-a942-4374-9d56-322dd4b0d202").when(volume1VOMock).getUuid();
|
||||
|
|
@ -539,7 +539,7 @@ public class StorageManagerImplTest {
|
|||
Mockito.doReturn("ffb46333-e983-4c21-b5f0-51c5877a3805").when(volume2VOMock).getUuid();
|
||||
Mockito.doReturn("58760044-928f-4c4e-9fef-d0e48423595e").when(vmInstanceVOMock).getUuid();
|
||||
|
||||
Mockito.when(_volumeDao.findByPoolId(storagePoolVOMock.getId(), null)).thenReturn(List.of(volume1VOMock, volume2VOMock));
|
||||
Mockito.when(_volumeDao.findNonDestroyedVolumesByPoolId(storagePoolVOMock.getId(), null)).thenReturn(List.of(volume1VOMock, volume2VOMock));
|
||||
Mockito.doReturn(vmInstanceVOMock).when(vmInstanceDao).findById(Mockito.anyLong());
|
||||
|
||||
String log = storageManagerImpl.getStoragePoolNonDestroyedVolumesLog(storagePoolVOMock.getId());
|
||||
|
|
@ -548,6 +548,58 @@ public class StorageManagerImplTest {
|
|||
Assert.assertEquals(expected, log);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getStoragePoolNonDestroyedVolumesLogTestNonDestroyedVolumes_VMLogForOneVolume() {
|
||||
Mockito.doReturn(1L).when(storagePoolVOMock).getId();
|
||||
Mockito.doReturn(null).when(volume1VOMock).getInstanceId();
|
||||
Mockito.doReturn("786633d1-a942-4374-9d56-322dd4b0d202").when(volume1VOMock).getUuid();
|
||||
Mockito.doReturn(1L).when(volume2VOMock).getInstanceId();
|
||||
Mockito.doReturn("ffb46333-e983-4c21-b5f0-51c5877a3805").when(volume2VOMock).getUuid();
|
||||
Mockito.doReturn("58760044-928f-4c4e-9fef-d0e48423595e").when(vmInstanceVOMock).getUuid();
|
||||
|
||||
Mockito.when(_volumeDao.findNonDestroyedVolumesByPoolId(storagePoolVOMock.getId(), null)).thenReturn(List.of(volume1VOMock, volume2VOMock));
|
||||
Mockito.doReturn(vmInstanceVOMock).when(vmInstanceDao).findById(Mockito.anyLong());
|
||||
|
||||
String log = storageManagerImpl.getStoragePoolNonDestroyedVolumesLog(storagePoolVOMock.getId());
|
||||
String expected = String.format("[Volume [%s] (not attached to any VM), Volume [%s] (attached to VM [%s])]", volume1VOMock.getUuid(), volume2VOMock.getUuid(), vmInstanceVOMock.getUuid());
|
||||
|
||||
Assert.assertEquals(expected, log);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getStoragePoolNonDestroyedVolumesLogTestNonDestroyedVolumes_NotAttachedLogs() {
|
||||
Mockito.doReturn(1L).when(storagePoolVOMock).getId();
|
||||
Mockito.doReturn(null).when(volume1VOMock).getInstanceId();
|
||||
Mockito.doReturn("786633d1-a942-4374-9d56-322dd4b0d202").when(volume1VOMock).getUuid();
|
||||
Mockito.doReturn(null).when(volume2VOMock).getInstanceId();
|
||||
Mockito.doReturn("ffb46333-e983-4c21-b5f0-51c5877a3805").when(volume2VOMock).getUuid();
|
||||
|
||||
Mockito.when(_volumeDao.findNonDestroyedVolumesByPoolId(storagePoolVOMock.getId(), null)).thenReturn(List.of(volume1VOMock, volume2VOMock));
|
||||
|
||||
String log = storageManagerImpl.getStoragePoolNonDestroyedVolumesLog(storagePoolVOMock.getId());
|
||||
String expected = String.format("[Volume [%s] (not attached to any VM), Volume [%s] (not attached to any VM)]", volume1VOMock.getUuid(), volume2VOMock.getUuid());
|
||||
|
||||
Assert.assertEquals(expected, log);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getStoragePoolNonDestroyedVolumesLogTestNonDestroyedVolumes_VMNotExistsLog() {
|
||||
Mockito.doReturn(1L).when(storagePoolVOMock).getId();
|
||||
Mockito.doReturn(1L).when(volume1VOMock).getInstanceId();
|
||||
Mockito.doReturn("786633d1-a942-4374-9d56-322dd4b0d202").when(volume1VOMock).getUuid();
|
||||
Mockito.doReturn(1L).when(volume2VOMock).getInstanceId();
|
||||
Mockito.doReturn("ffb46333-e983-4c21-b5f0-51c5877a3805").when(volume2VOMock).getUuid();
|
||||
|
||||
Mockito.when(_volumeDao.findNonDestroyedVolumesByPoolId(storagePoolVOMock.getId(), null)).thenReturn(List.of(volume1VOMock, volume2VOMock));
|
||||
Mockito.doReturn(null).when(vmInstanceDao).findById(Mockito.anyLong());
|
||||
|
||||
String log = storageManagerImpl.getStoragePoolNonDestroyedVolumesLog(storagePoolVOMock.getId());
|
||||
String expected = String.format("[Volume [%s] (attached VM with ID [%d] doesn't exists), Volume [%s] (attached VM with ID [%d] doesn't exists)]",
|
||||
volume1VOMock.getUuid(), volume1VOMock.getInstanceId(), volume2VOMock.getUuid(), volume2VOMock.getInstanceId());
|
||||
|
||||
Assert.assertEquals(expected, log);
|
||||
}
|
||||
|
||||
private ChangeStoragePoolScopeCmd mockChangeStoragePooolScopeCmd(String newScope) {
|
||||
ChangeStoragePoolScopeCmd cmd = new ChangeStoragePoolScopeCmd();
|
||||
ReflectionTestUtils.setField(cmd, "id", 1L);
|
||||
|
|
|
|||
|
|
@ -218,18 +218,19 @@ export const notifierPlugin = {
|
|||
if (error.response.status) {
|
||||
msg = `${i18n.global.t('message.request.failed')} (${error.response.status})`
|
||||
}
|
||||
if (error.message) {
|
||||
desc = error.message
|
||||
}
|
||||
if (error.response.headers && 'x-description' in error.response.headers) {
|
||||
if (error.response.headers?.['x-description']) {
|
||||
desc = error.response.headers['x-description']
|
||||
}
|
||||
if (desc === '' && error.response.data) {
|
||||
} else if (error.response.data) {
|
||||
const responseKey = _.findKey(error.response.data, 'errortext')
|
||||
if (responseKey) {
|
||||
desc = error.response.data[responseKey].errortext
|
||||
} else if (typeof error.response.data === 'string') {
|
||||
desc = error.response.data
|
||||
}
|
||||
}
|
||||
if (!desc && error.message) {
|
||||
desc = error.message
|
||||
}
|
||||
}
|
||||
let countNotify = store.getters.countNotify
|
||||
countNotify++
|
||||
|
|
|
|||
|
|
@ -638,11 +638,7 @@ export default {
|
|||
this.$emit('refresh-data')
|
||||
this.closeAction()
|
||||
}).catch(e => {
|
||||
this.$notification.error({
|
||||
message: this.$t('message.upload.failed'),
|
||||
description: `${this.$t('message.upload.template.failed.description')} - ${e}`,
|
||||
duration: 0
|
||||
})
|
||||
this.$notifyError(e)
|
||||
})
|
||||
},
|
||||
fetchCustomHypervisorName () {
|
||||
|
|
|
|||
Loading…
Reference in New Issue