mirror of
https://github.com/apache/cloudstack
synced 2026-09-03 18:59:29 +00:00
guard against stopping stats background threads (#13659)
* guard against stopping stats background threats * stats cleanup test * override annotation, and specic and generic enough catch --------- Co-authored-by: Daan Hoogland <dahn@apache.org>
This commit is contained in:
parent
69fc541737
commit
1e5d534c3c
@ -1285,14 +1285,24 @@ public class StatsCollector extends ManagerBase implements ComponentMethodInterc
|
||||
* can be enabled/disabled independently.</p>
|
||||
*/
|
||||
class VmStatsCleaner extends ManagedContextRunnable{
|
||||
@Override
|
||||
protected void runInContext() {
|
||||
cleanUpVirtualMachineStats();
|
||||
try {
|
||||
cleanUpVirtualMachineStats();
|
||||
} catch (RuntimeException e) {
|
||||
logger.error("Error trying to clean up VM stats", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class VolumeStatsCleaner extends ManagedContextRunnable{
|
||||
@Override
|
||||
protected void runInContext() {
|
||||
cleanUpVolumeStats();
|
||||
try {
|
||||
cleanUpVolumeStats();
|
||||
} catch (RuntimeException e) {
|
||||
logger.error("Error trying to clean up Volume stats", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -335,6 +335,49 @@ public class StatsCollectorTest {
|
||||
Mockito.verify(vmStatsDaoMock).removeAllByTimestampLessThan(Mockito.any(), Mockito.anyLong());
|
||||
}
|
||||
|
||||
private void setVmDiskStatsMaxRetentionTimeValue(String value) {
|
||||
StatsCollector.vmDiskStatsMaxRetentionTime = new ConfigKey<Integer>("Advanced", Integer.class, "vm.disk.stats.max.retention.time", value,
|
||||
"The maximum time (in minutes) for keeping Volume stats records in the database. The Volume stats cleanup process will be disabled if this is set to 0 or less than 0.", true);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void cleanUpVolumeStatsTestIsDisabled() {
|
||||
setVmDiskStatsMaxRetentionTimeValue("0");
|
||||
|
||||
statsCollector.cleanUpVolumeStats();
|
||||
|
||||
Mockito.verify(volumeStatsDao, Mockito.never()).removeAllByTimestampLessThan(Mockito.any(), Mockito.anyLong());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void cleanUpVolumeStatsTestIsEnabled() {
|
||||
setVmDiskStatsMaxRetentionTimeValue("1");
|
||||
|
||||
statsCollector.cleanUpVolumeStats();
|
||||
|
||||
Mockito.verify(volumeStatsDao).removeAllByTimestampLessThan(Mockito.any(), Mockito.anyLong());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void vmStatsCleanerTestCatchesCloudRuntimeExceptionAndKeepsRunning() {
|
||||
Mockito.doThrow(new CloudRuntimeException("Communications link failure")).when(statsCollector).cleanUpVirtualMachineStats();
|
||||
StatsCollector.VmStatsCleaner vmStatsCleaner = statsCollector.new VmStatsCleaner();
|
||||
|
||||
vmStatsCleaner.run();
|
||||
|
||||
Mockito.verify(statsCollector).cleanUpVirtualMachineStats();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void volumeStatsCleanerTestCatchesCloudRuntimeExceptionAndKeepsRunning() {
|
||||
Mockito.doThrow(new CloudRuntimeException("Communications link failure")).when(statsCollector).cleanUpVolumeStats();
|
||||
StatsCollector.VolumeStatsCleaner volumeStatsCleaner = statsCollector.new VolumeStatsCleaner();
|
||||
|
||||
volumeStatsCleaner.run();
|
||||
|
||||
Mockito.verify(statsCollector).cleanUpVolumeStats();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void persistVirtualMachineStatsTestPersistsSuccessfully() {
|
||||
statsCollector.msId = 1L;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user