mirror of https://github.com/apache/cloudstack.git
Fix to make recovered volumes be accounted for by Usage (#6772)
This commit is contained in:
parent
f7b29856d1
commit
d6044fb5a6
|
|
@ -165,4 +165,6 @@ public interface VolumeApiService {
|
|||
boolean validateVolumeSizeInBytes(long size);
|
||||
|
||||
Volume changeDiskOfferingForVolume(ChangeOfferingForVolumeCmd cmd) throws ResourceAllocationException;
|
||||
|
||||
void publishVolumeCreationUsageEvent(Volume volume);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1709,9 +1709,30 @@ public class VolumeApiServiceImpl extends ManagerBase implements VolumeApiServic
|
|||
_resourceLimitMgr.incrementResourceCount(volume.getAccountId(), ResourceType.volume, volume.isDisplay());
|
||||
_resourceLimitMgr.incrementResourceCount(volume.getAccountId(), ResourceType.primary_storage, volume.isDisplay(), new Long(volume.getSize()));
|
||||
|
||||
|
||||
publishVolumeCreationUsageEvent(volume);
|
||||
|
||||
return volume;
|
||||
}
|
||||
|
||||
public void publishVolumeCreationUsageEvent(Volume volume) {
|
||||
Long diskOfferingId = volume.getDiskOfferingId();
|
||||
Long offeringId = null;
|
||||
if (diskOfferingId != null) {
|
||||
DiskOfferingVO offering = _diskOfferingDao.findById(diskOfferingId);
|
||||
if (offering != null && !offering.isComputeOnly()) {
|
||||
offeringId = offering.getId();
|
||||
}
|
||||
}
|
||||
UsageEventUtils
|
||||
.publishUsageEvent(EventTypes.EVENT_VOLUME_CREATE, volume.getAccountId(), volume.getDataCenterId(), volume.getId(), volume.getName(), offeringId,
|
||||
volume.getTemplateId(), volume.getSize(), Volume.class.getName(), volume.getUuid(), volume.isDisplay());
|
||||
|
||||
s_logger.debug(String.format("Volume [%s] has been successfully recovered, thus a new usage event %s has been published.", volume.getUuid(), EventTypes.EVENT_VOLUME_CREATE));
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
@ActionEvent(eventType = EventTypes.EVENT_VOLUME_CHANGE_DISK_OFFERING, eventDescription = "Changing disk offering of a volume")
|
||||
public Volume changeDiskOfferingForVolume(ChangeOfferingForVolumeCmd cmd) throws ResourceAllocationException {
|
||||
|
|
|
|||
|
|
@ -2323,18 +2323,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
|
|||
for (VolumeVO volume : volumes) {
|
||||
if (volume.getVolumeType().equals(Volume.Type.ROOT)) {
|
||||
// Create an event
|
||||
Long templateId = volume.getTemplateId();
|
||||
Long diskOfferingId = volume.getDiskOfferingId();
|
||||
Long offeringId = null;
|
||||
if (diskOfferingId != null) {
|
||||
DiskOfferingVO offering = _diskOfferingDao.findById(diskOfferingId);
|
||||
if (offering != null && !offering.isComputeOnly()) {
|
||||
offeringId = offering.getId();
|
||||
}
|
||||
}
|
||||
UsageEventUtils
|
||||
.publishUsageEvent(EventTypes.EVENT_VOLUME_CREATE, volume.getAccountId(), volume.getDataCenterId(), volume.getId(), volume.getName(), offeringId,
|
||||
templateId, volume.getSize(), Volume.class.getName(), volume.getUuid(), volume.isDisplayVolume());
|
||||
_volumeService.publishVolumeCreationUsageEvent(volume);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -35,6 +35,8 @@ import java.util.List;
|
|||
import java.util.UUID;
|
||||
import java.util.concurrent.ExecutionException;
|
||||
|
||||
import com.cloud.event.EventTypes;
|
||||
import com.cloud.event.UsageEventUtils;
|
||||
import com.cloud.service.ServiceOfferingVO;
|
||||
import com.cloud.service.dao.ServiceOfferingDao;
|
||||
import org.apache.cloudstack.acl.ControlledEntity;
|
||||
|
|
@ -69,7 +71,10 @@ import org.mockito.InjectMocks;
|
|||
import org.mockito.Mock;
|
||||
import org.mockito.Mockito;
|
||||
import org.mockito.Spy;
|
||||
import org.mockito.runners.MockitoJUnitRunner;
|
||||
import org.powermock.api.mockito.PowerMockito;
|
||||
import org.powermock.core.classloader.annotations.PowerMockIgnore;
|
||||
import org.powermock.core.classloader.annotations.PrepareForTest;
|
||||
import org.powermock.modules.junit4.PowerMockRunner;
|
||||
import org.springframework.test.util.ReflectionTestUtils;
|
||||
|
||||
import com.cloud.api.query.dao.ServiceOfferingJoinDao;
|
||||
|
|
@ -109,12 +114,13 @@ import com.cloud.vm.dao.VMInstanceDao;
|
|||
import com.cloud.vm.snapshot.VMSnapshotVO;
|
||||
import com.cloud.vm.snapshot.dao.VMSnapshotDao;
|
||||
|
||||
@RunWith(MockitoJUnitRunner.class)
|
||||
@RunWith(PowerMockRunner.class)
|
||||
@PowerMockIgnore("javax.management.*")
|
||||
public class VolumeApiServiceImplTest {
|
||||
|
||||
@Spy
|
||||
@InjectMocks
|
||||
private VolumeApiServiceImpl volumeApiServiceImpl;
|
||||
private VolumeApiServiceImpl volumeApiServiceImpl = new VolumeApiServiceImpl();
|
||||
@Mock
|
||||
private SnapshotManager snapshotManagerMock;
|
||||
@Mock
|
||||
|
|
@ -189,6 +195,10 @@ public class VolumeApiServiceImplTest {
|
|||
private long vmInstanceMockId = 1123l;
|
||||
private long volumeSizeMock = 456789921939l;
|
||||
|
||||
private long diskOfferingMockId = 100203L;
|
||||
|
||||
private long offeringMockId = 31902L;
|
||||
|
||||
@Before
|
||||
public void setup() throws InterruptedException, ExecutionException {
|
||||
Mockito.lenient().doReturn(volumeMockId).when(volumeDataStoreVoMock).getVolumeId();
|
||||
|
|
@ -1245,4 +1255,68 @@ public class VolumeApiServiceImplTest {
|
|||
boolean result = volumeApiServiceImpl.isNewDiskOfferingTheSameAndCustomServiceOffering(existingDiskOffering, newDiskOffering);
|
||||
Assert.assertEquals(expectedResult, result);
|
||||
}
|
||||
|
||||
@Test
|
||||
@PrepareForTest(UsageEventUtils.class)
|
||||
public void publishVolumeCreationUsageEventTestNullDiskOfferingId() {
|
||||
Mockito.doReturn(null).when(volumeVoMock).getDiskOfferingId();
|
||||
PowerMockito.mockStatic(UsageEventUtils.class);
|
||||
|
||||
volumeApiServiceImpl.publishVolumeCreationUsageEvent(volumeVoMock);
|
||||
|
||||
PowerMockito.verifyStatic(UsageEventUtils.class);
|
||||
UsageEventUtils.publishUsageEvent(EventTypes.EVENT_VOLUME_CREATE, volumeVoMock.getAccountId(), volumeVoMock.getDataCenterId(), volumeVoMock.getId(), volumeVoMock.getName(),
|
||||
null, volumeVoMock.getTemplateId(), volumeVoMock.getSize(), Volume.class.getName(), volumeVoMock.getUuid(), volumeVoMock.isDisplay());
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
@PrepareForTest(UsageEventUtils.class)
|
||||
public void publishVolumeCreationUsageEventTestNullDiskOfferingVo() {
|
||||
Mockito.doReturn(diskOfferingMockId).when(volumeVoMock).getDiskOfferingId();
|
||||
Mockito.doReturn(null).when(_diskOfferingDao).findById(diskOfferingMockId);
|
||||
PowerMockito.mockStatic(UsageEventUtils.class);
|
||||
|
||||
volumeApiServiceImpl.publishVolumeCreationUsageEvent(volumeVoMock);
|
||||
|
||||
PowerMockito.verifyStatic(UsageEventUtils.class);
|
||||
UsageEventUtils.publishUsageEvent(EventTypes.EVENT_VOLUME_CREATE, volumeVoMock.getAccountId(), volumeVoMock.getDataCenterId(), volumeVoMock.getId(), volumeVoMock.getName(),
|
||||
null, volumeVoMock.getTemplateId(), volumeVoMock.getSize(), Volume.class.getName(), volumeVoMock.getUuid(), volumeVoMock.isDisplay());
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
@PrepareForTest(UsageEventUtils.class)
|
||||
public void publishVolumeCreationUsageEventTestDiskOfferingVoTypeNotDisk() {
|
||||
Mockito.doReturn(diskOfferingMockId).when(volumeVoMock).getDiskOfferingId();
|
||||
Mockito.doReturn(newDiskOfferingMock).when(_diskOfferingDao).findById(diskOfferingMockId);
|
||||
Mockito.doReturn(true).when(newDiskOfferingMock).isComputeOnly();
|
||||
|
||||
PowerMockito.mockStatic(UsageEventUtils.class);
|
||||
|
||||
volumeApiServiceImpl.publishVolumeCreationUsageEvent(volumeVoMock);
|
||||
|
||||
PowerMockito.verifyStatic(UsageEventUtils.class);
|
||||
UsageEventUtils.publishUsageEvent(EventTypes.EVENT_VOLUME_CREATE, volumeVoMock.getAccountId(), volumeVoMock.getDataCenterId(), volumeVoMock.getId(), volumeVoMock.getName(),
|
||||
null, volumeVoMock.getTemplateId(), volumeVoMock.getSize(), Volume.class.getName(), volumeVoMock.getUuid(), volumeVoMock.isDisplay());
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
@PrepareForTest(UsageEventUtils.class)
|
||||
public void publishVolumeCreationUsageEventTestOfferingIdNotNull() {
|
||||
Mockito.doReturn(diskOfferingMockId).when(volumeVoMock).getDiskOfferingId();
|
||||
Mockito.doReturn(newDiskOfferingMock).when(_diskOfferingDao).findById(diskOfferingMockId);
|
||||
Mockito.doReturn(false).when(newDiskOfferingMock).isComputeOnly();
|
||||
Mockito.doReturn(offeringMockId).when(newDiskOfferingMock).getId();
|
||||
|
||||
PowerMockito.mockStatic(UsageEventUtils.class);
|
||||
|
||||
volumeApiServiceImpl.publishVolumeCreationUsageEvent(volumeVoMock);
|
||||
|
||||
PowerMockito.verifyStatic(UsageEventUtils.class);
|
||||
UsageEventUtils.publishUsageEvent(EventTypes.EVENT_VOLUME_CREATE, volumeVoMock.getAccountId(), volumeVoMock.getDataCenterId(), volumeVoMock.getId(), volumeVoMock.getName(),
|
||||
offeringMockId, volumeVoMock.getTemplateId(), volumeVoMock.getSize(), Volume.class.getName(), volumeVoMock.getUuid(), volumeVoMock.isDisplay());
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue