From c12d83601d5203ffee461901f92f21f3337769c3 Mon Sep 17 00:00:00 2001 From: Kishan Kavala Date: Mon, 23 May 2016 15:23:23 +0530 Subject: [PATCH] Bug-ID: CLOUDSTACK-8870: Skip external device usage collection if no external devices exist --- engine/schema/src/com/cloud/host/dao/HostDao.java | 2 ++ .../schema/src/com/cloud/host/dao/HostDaoImpl.java | 7 +++++++ .../network/ExternalDeviceUsageManagerImpl.java | 11 ++++++++++- .../ExternalLoadBalancerDeviceManagerImplTest.java | 13 +++++++++++++ 4 files changed, 32 insertions(+), 1 deletion(-) diff --git a/engine/schema/src/com/cloud/host/dao/HostDao.java b/engine/schema/src/com/cloud/host/dao/HostDao.java index 3cfdc94af85..88a354725a9 100644 --- a/engine/schema/src/com/cloud/host/dao/HostDao.java +++ b/engine/schema/src/com/cloud/host/dao/HostDao.java @@ -97,4 +97,6 @@ public interface HostDao extends GenericDao, StateDao listAllHostsByType(Host.Type type); HostVO findByPublicIp(String publicIp); + + List listByType(Type type); } diff --git a/engine/schema/src/com/cloud/host/dao/HostDaoImpl.java b/engine/schema/src/com/cloud/host/dao/HostDaoImpl.java index 54133b90d03..46f8a4da2bc 100644 --- a/engine/schema/src/com/cloud/host/dao/HostDaoImpl.java +++ b/engine/schema/src/com/cloud/host/dao/HostDaoImpl.java @@ -1137,4 +1137,11 @@ public class HostDaoImpl extends GenericDaoBase implements HostDao return listBy(sc); } + + @Override + public List listByType(Host.Type type) { + SearchCriteria sc = TypeSearch.create(); + sc.setParameters("type", type); + return listBy(sc); + } } diff --git a/server/src/com/cloud/network/ExternalDeviceUsageManagerImpl.java b/server/src/com/cloud/network/ExternalDeviceUsageManagerImpl.java index 59b398f5b5e..200b279bf92 100644 --- a/server/src/com/cloud/network/ExternalDeviceUsageManagerImpl.java +++ b/server/src/com/cloud/network/ExternalDeviceUsageManagerImpl.java @@ -340,6 +340,15 @@ public class ExternalDeviceUsageManagerImpl extends ManagerBase implements Exter @Override protected void runInContext() { + + // Check if there are any external devices + // Skip external device usage collection if none exist + + if(_hostDao.listByType(Host.Type.ExternalFirewall).isEmpty() && _hostDao.listByType(Host.Type.ExternalLoadBalancer).isEmpty()){ + s_logger.debug("External devices are not used. Skipping external device usage collection"); + return; + } + GlobalLock scanLock = GlobalLock.getInternLock("ExternalDeviceNetworkUsageManagerImpl"); try { if (scanLock.lock(20)) { @@ -356,7 +365,7 @@ public class ExternalDeviceUsageManagerImpl extends ManagerBase implements Exter } } - private void runExternalDeviceNetworkUsageTask() { + protected void runExternalDeviceNetworkUsageTask() { s_logger.debug("External devices stats collector is running..."); for (DataCenterVO zone : _dcDao.listAll()) { diff --git a/server/test/com/cloud/network/ExternalLoadBalancerDeviceManagerImplTest.java b/server/test/com/cloud/network/ExternalLoadBalancerDeviceManagerImplTest.java index 046bdb6475d..dbc31ba6ef4 100644 --- a/server/test/com/cloud/network/ExternalLoadBalancerDeviceManagerImplTest.java +++ b/server/test/com/cloud/network/ExternalLoadBalancerDeviceManagerImplTest.java @@ -20,11 +20,13 @@ package com.cloud.network; import java.lang.reflect.Field; import java.net.URI; import java.net.URISyntaxException; +import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import javax.inject.Inject; +import com.cloud.host.Host; import org.apache.cloudstack.engine.orchestration.service.NetworkOrchestrationService; import org.apache.cloudstack.framework.config.dao.ConfigurationDao; import org.junit.Assert; @@ -207,4 +209,15 @@ public class ExternalLoadBalancerDeviceManagerImplTest { HostVO hostVo = Mockito.mock(HostVO.class); Mockito.when(_hostDao.findById(Mockito.anyLong())).thenReturn(hostVo); } + + + @Test + public void testUsageTask() { + ExternalDeviceUsageManagerImpl.ExternalDeviceNetworkUsageTask usageTask = Mockito + .mock(ExternalDeviceUsageManagerImpl.ExternalDeviceNetworkUsageTask.class); + Mockito.when(_hostDao.listByType(Host.Type.ExternalFirewall)).thenReturn(new ArrayList()); + Mockito.when(_hostDao.listByType(Host.Type.ExternalLoadBalancer)).thenReturn(new ArrayList()); + usageTask.runInContext(); + Mockito.verify(usageTask, Mockito.times(0)).runExternalDeviceNetworkUsageTask(); + } }