mirror of
https://github.com/apache/cloudstack.git
synced 2025-11-03 04:12:31 +01:00
Bug 7409: Implement forcely-cancelling mechenism for jobs that have been staying in queue for too long
1) introduced a global configuration variable job.cancel.threshold.minutes 2) Default value for the job.cancel.threshold.minutes is 60 minutes, if a job has been staying in processing state for over 60 minutes, system will forcely remove it from the queue to allow others to run
This commit is contained in:
parent
6cade1aa1d
commit
ea88089fd2
@ -46,6 +46,7 @@ import com.cloud.async.dao.AsyncJobDao;
|
||||
import com.cloud.cluster.ClusterManager;
|
||||
import com.cloud.cluster.ClusterManagerListener;
|
||||
import com.cloud.cluster.ManagementServerHostVO;
|
||||
import com.cloud.configuration.Config;
|
||||
import com.cloud.configuration.dao.ConfigurationDao;
|
||||
import com.cloud.exception.InvalidParameterValueException;
|
||||
import com.cloud.exception.PermissionDeniedException;
|
||||
@ -82,6 +83,7 @@ public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListe
|
||||
private AccountDao _accountDao;
|
||||
private AsyncJobDao _jobDao;
|
||||
private long _jobExpireSeconds = 86400; // 1 day
|
||||
private long _jobCancelThresholdSeconds = 3600; // 1 hour
|
||||
private ApiDispatcher _dispatcher;
|
||||
|
||||
private final ScheduledExecutorService _heartbeatScheduler =
|
||||
@ -549,6 +551,18 @@ public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListe
|
||||
}
|
||||
}
|
||||
|
||||
// forcely cancel blocking queue items if they've been staying there for too long
|
||||
List<SyncQueueItemVO> blockItems = _queueMgr.getBlockedQueueItems(_jobCancelThresholdSeconds*1000, false);
|
||||
if(blockItems != null && blockItems.size() > 0) {
|
||||
for(SyncQueueItemVO item : blockItems) {
|
||||
if(item.getContentType().equalsIgnoreCase("AsyncJob"))
|
||||
completeAsyncJob(item.getContentId(), 2, 0, "Job is cancelled as it has been blocking others for too long");
|
||||
|
||||
// purge the item and resume queue processing
|
||||
_queueMgr.purgeItem(item.getId());
|
||||
}
|
||||
}
|
||||
|
||||
s_logger.trace("End cleanup expired async-jobs");
|
||||
} catch(Throwable e) {
|
||||
s_logger.error("Unexpected exception when trying to execute queue item, ", e);
|
||||
@ -596,10 +610,13 @@ public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListe
|
||||
throw new ConfigurationException("Unable to get the configuration dao.");
|
||||
}
|
||||
|
||||
Map<String, String> configs = configDao.getConfiguration("management-server", params);
|
||||
|
||||
int expireMinutes = NumbersUtil.parseInt(configs.get("job.expire.minutes"), 24*60);
|
||||
int expireMinutes = NumbersUtil.parseInt(
|
||||
configDao.getValue(Config.JobExpireMinutes.key()), 24*60);
|
||||
_jobExpireSeconds = (long)expireMinutes*60;
|
||||
|
||||
_jobCancelThresholdSeconds = NumbersUtil.parseInt(
|
||||
configDao.getValue(Config.JobCancelThresholdMinutes.key()), 60);
|
||||
_jobCancelThresholdSeconds *= 60;
|
||||
|
||||
_accountDao = locator.getDao(AccountDao.class);
|
||||
if (_accountDao == null) {
|
||||
|
||||
@ -29,5 +29,6 @@ public interface SyncQueueManager extends Manager {
|
||||
public void purgeItem(long queueItemId);
|
||||
|
||||
public List<SyncQueueItemVO> getActiveQueueItems(Long msid, boolean exclusive);
|
||||
public List<SyncQueueItemVO> getBlockedQueueItems(long thresholdMs, boolean exclusive);
|
||||
public void resetQueueProcess(long msid);
|
||||
}
|
||||
|
||||
@ -33,8 +33,6 @@ import com.cloud.async.dao.SyncQueueItemDao;
|
||||
import com.cloud.utils.DateUtil;
|
||||
import com.cloud.utils.component.ComponentLocator;
|
||||
import com.cloud.utils.db.DB;
|
||||
import com.cloud.utils.db.SearchBuilder;
|
||||
import com.cloud.utils.db.SearchCriteria;
|
||||
import com.cloud.utils.db.Transaction;
|
||||
import com.cloud.utils.exception.CloudRuntimeException;
|
||||
|
||||
@ -204,6 +202,11 @@ public class SyncQueueManagerImpl implements SyncQueueManager {
|
||||
return _syncQueueItemDao.getActiveQueueItems(msid, exclusive);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<SyncQueueItemVO> getBlockedQueueItems(long thresholdMs, boolean exclusive) {
|
||||
return _syncQueueItemDao.getBlockedQueueItems(thresholdMs, exclusive);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void resetQueueProcess(long msid) {
|
||||
_syncQueueDao.resetQueueProcessing(msid);
|
||||
|
||||
@ -18,13 +18,14 @@
|
||||
|
||||
package com.cloud.async.dao;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import com.cloud.async.SyncQueueItemVO;
|
||||
import com.cloud.utils.db.GenericDao;
|
||||
|
||||
public interface SyncQueueItemDao extends GenericDao<SyncQueueItemVO, Long> {
|
||||
public SyncQueueItemVO getNextQueueItem(long queueId);
|
||||
public List<SyncQueueItemVO> getNextQueueItems(int maxItems);
|
||||
public List<SyncQueueItemVO> getActiveQueueItems(Long msid, boolean exclusive);
|
||||
public List<SyncQueueItemVO> getActiveQueueItems(Long msid, boolean exclusive);
|
||||
public List<SyncQueueItemVO> getBlockedQueueItems(long thresholdMs, boolean exclusive);
|
||||
}
|
||||
|
||||
@ -22,6 +22,7 @@ import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.TimeZone;
|
||||
|
||||
@ -30,16 +31,20 @@ import javax.ejb.Local;
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
import com.cloud.async.SyncQueueItemVO;
|
||||
import com.cloud.async.SyncQueueVO;
|
||||
import com.cloud.utils.DateUtil;
|
||||
import com.cloud.utils.db.Filter;
|
||||
import com.cloud.utils.db.GenericDaoBase;
|
||||
import com.cloud.utils.db.JoinBuilder;
|
||||
import com.cloud.utils.db.SearchBuilder;
|
||||
import com.cloud.utils.db.SearchCriteria;
|
||||
import com.cloud.utils.db.Transaction;
|
||||
|
||||
@Local(value = { SyncQueueItemDao.class })
|
||||
public class SyncQueueItemDaoImpl extends GenericDaoBase<SyncQueueItemVO, Long> implements SyncQueueItemDao {
|
||||
private static final Logger s_logger = Logger.getLogger(SyncQueueItemDaoImpl.class);
|
||||
private static final Logger s_logger = Logger.getLogger(SyncQueueItemDaoImpl.class);
|
||||
|
||||
private final SyncQueueDao _syncQueueDao = new SyncQueueDaoImpl();
|
||||
|
||||
@Override
|
||||
public SyncQueueItemVO getNextQueueItem(long queueId) {
|
||||
@ -109,5 +114,30 @@ public class SyncQueueItemDaoImpl extends GenericDaoBase<SyncQueueItemVO, Long>
|
||||
if(exclusive)
|
||||
return lockRows(sc, filter, true);
|
||||
return listBy(sc, filter);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<SyncQueueItemVO> getBlockedQueueItems(long thresholdMs, boolean exclusive) {
|
||||
Date cutTime = DateUtil.currentGMTTime();
|
||||
cutTime = new Date(cutTime.getTime() - thresholdMs);
|
||||
|
||||
SearchBuilder<SyncQueueVO> sbQueue = _syncQueueDao.createSearchBuilder();
|
||||
sbQueue.and("lastProcessTime", sbQueue.entity().getLastProcessTime(), SearchCriteria.Op.NNULL);
|
||||
sbQueue.and("lastProcessTime2", sbQueue.entity().getLastProcessTime(), SearchCriteria.Op.LT);
|
||||
|
||||
SearchBuilder<SyncQueueItemVO> sbItem = createSearchBuilder();
|
||||
sbItem.join("queueItemJoinQueue", sbQueue, sbQueue.entity().getId(), sbItem.entity().getQueueId(), JoinBuilder.JoinType.INNER);
|
||||
sbItem.and("lastProcessMsid", sbItem.entity().getLastProcessMsid(), SearchCriteria.Op.NNULL);
|
||||
sbItem.and("lastProcessNumber", sbItem.entity().getLastProcessNumber(), SearchCriteria.Op.NNULL);
|
||||
|
||||
sbQueue.done();
|
||||
sbItem.done();
|
||||
|
||||
SearchCriteria<SyncQueueItemVO> sc = sbItem.create();
|
||||
sc.setJoinParameters("queueItemJoinQueue", "lastProcessTime2", cutTime);
|
||||
|
||||
if(exclusive)
|
||||
return lockRows(sc, null, true);
|
||||
return listBy(sc, null);
|
||||
}
|
||||
}
|
||||
|
||||
@ -112,6 +112,7 @@ public enum Config {
|
||||
|
||||
// Advanced
|
||||
JobExpireMinutes("Advanced", ManagementServer.class, String.class, "job.expire.minutes", "1440", "Time (in minutes) for async-jobs to be kept in system", null),
|
||||
JobCancelThresholdMinutes("Advanced", ManagementServer.class, String.class, "job.cancel.threshold.minutes", "60", "Time (in minutes) for async-jobs to be forcely cancelled if it has been in process for long", null),
|
||||
|
||||
AccountCleanupInterval("Advanced", ManagementServer.class, Integer.class, "account.cleanup.interval", "86400", "The interval in seconds between cleanup for removed accounts", null),
|
||||
AllowPublicUserTemplates("Advanced", ManagementServer.class, Integer.class, "allow.public.user.templates", "true", "If false, users will not be able to create public templates.", null),
|
||||
|
||||
@ -24,160 +24,160 @@
|
||||
-->
|
||||
<components.xml>
|
||||
<management-server class="com.vmops.server.ManagementServerImpl">
|
||||
<dao name="domain router" class="com.vmops.vm.dao.DomainRouterDaoImpl"/>
|
||||
<dao name="host" class="com.vmops.host.dao.HostDaoImpl"/>
|
||||
<dao name="VM Instance" class="com.vmops.vm.dao.VMInstanceDaoImpl"/>
|
||||
<dao name="User VM" class="com.vmops.vm.dao.UserVmDaoImpl"/>
|
||||
<dao name="ServiceOffering" class="com.vmops.service.dao.ServiceOfferingDaoImpl">
|
||||
<dao name="domain router" class="com.cloud.vm.dao.DomainRouterDaoImpl"/>
|
||||
<dao name="host" class="com.cloud.host.dao.HostDaoImpl"/>
|
||||
<dao name="VM Instance" class="com.cloud.vm.dao.VMInstanceDaoImpl"/>
|
||||
<dao name="User VM" class="com.cloud.vm.dao.UserVmDaoImpl"/>
|
||||
<dao name="ServiceOffering" class="com.cloud.service.dao.ServiceOfferingDaoImpl">
|
||||
<param name="cache.size">50</param>
|
||||
<param name="cache.time.to.live">-1</param>
|
||||
</dao>
|
||||
<dao name="DiskOffering" class="com.vmops.storage.dao.DiskOfferingDaoImpl"/>
|
||||
<dao name="VMDisk" class="com.vmops.storage.dao.VmDiskDaoImpl"/>
|
||||
<dao name="host zone" class="com.vmops.dc.dao.DataCenterDaoImpl">
|
||||
<dao name="DiskOffering" class="com.cloud.storage.dao.DiskOfferingDaoImpl"/>
|
||||
<dao name="VMDisk" class="com.cloud.storage.dao.VmDiskDaoImpl"/>
|
||||
<dao name="host zone" class="com.cloud.dc.dao.DataCenterDaoImpl">
|
||||
<param name="cache.size">50</param>
|
||||
<param name="cache.time.to.live">-1</param>
|
||||
</dao>
|
||||
<dao name="host pod" class="com.vmops.dc.dao.HostPodDaoImpl">
|
||||
<dao name="host pod" class="com.cloud.dc.dao.HostPodDaoImpl">
|
||||
<param name="cache.size">50</param>
|
||||
<param name="cache.time.to.live">-1</param>
|
||||
</dao>
|
||||
<dao name="vlan" class="com.vmops.dc.dao.VlanDaoImpl">
|
||||
<dao name="vlan" class="com.cloud.dc.dao.VlanDaoImpl">
|
||||
</dao>
|
||||
<dao name="Volume" class="com.vmops.storage.dao.VolumeDaoImpl"/>
|
||||
<dao name="Events" class="com.vmops.event.dao.EventDaoImpl"/>
|
||||
<dao name="VM Template" class="com.vmops.storage.dao.VMTemplateDaoImpl">
|
||||
<dao name="Volume" class="com.cloud.storage.dao.VolumeDaoImpl"/>
|
||||
<dao name="Events" class="com.cloud.event.dao.EventDaoImpl"/>
|
||||
<dao name="VM Template" class="com.cloud.storage.dao.VMTemplateDaoImpl">
|
||||
<param name="cache.size">50</param>
|
||||
<param name="cache.time.to.live">-1</param>
|
||||
<param name="routing.uniquename">routing</param>
|
||||
</dao>
|
||||
<dao name="User" class="com.vmops.user.dao.UserDaoImpl">
|
||||
<dao name="User" class="com.cloud.user.dao.UserDaoImpl">
|
||||
<param name="cache.size">5000</param>
|
||||
<param name="cache.time.to.live">300</param>
|
||||
</dao>
|
||||
<dao name="UserStats" class="com.vmops.user.dao.UserStatisticsDaoImpl"/>
|
||||
<dao name="Disk Template" class="com.vmops.storage.dao.DiskTemplateDaoImpl">
|
||||
<dao name="UserStats" class="com.cloud.user.dao.UserStatisticsDaoImpl"/>
|
||||
<dao name="Disk Template" class="com.cloud.storage.dao.DiskTemplateDaoImpl">
|
||||
<param name="cache.size">50</param>
|
||||
<param name="cache.time.to.live">-1</param>
|
||||
</dao>
|
||||
<dao name="Firewall Rules" class="com.vmops.network.dao.FirewallRulesDaoImpl"/>
|
||||
<dao name="Security Group" class="com.vmops.network.dao.SecurityGroupDaoImpl"/>
|
||||
<dao name="Load Balancer" class="com.vmops.network.dao.LoadBalancerDaoImpl"/>
|
||||
<dao name="Network Rule Config" class="com.vmops.network.dao.NetworkRuleConfigDaoImpl"/>
|
||||
<dao name="Security Group Mapping" class="com.vmops.network.dao.SecurityGroupVMMapDaoImpl"/>
|
||||
<dao name="Load Balancer Mapping" class="com.vmops.network.dao.LoadBalancerVMMapDaoImpl"/>
|
||||
<dao name="IP Addresses" class="com.vmops.network.dao.IPAddressDaoImpl"/>
|
||||
<dao name="Datacenter IP Addresses" class="com.vmops.dc.dao.DataCenterIpAddressDaoImpl"/>
|
||||
<dao name="Pricing" class="com.vmops.pricing.dao.PricingDaoImpl"/>
|
||||
<dao name="Usage" class="com.vmops.usage.dao.UsageDaoImpl"/>
|
||||
<dao name="UsageJob" class="com.vmops.usage.dao.UsageJobDaoImpl"/>
|
||||
<dao name="Alert" class="com.vmops.alert.dao.AlertDaoImpl"/>
|
||||
<dao name="Capacity" class="com.vmops.capacity.dao.CapacityDaoImpl"/>
|
||||
<dao name="Domain" class="com.vmops.domain.dao.DomainDaoImpl"/>
|
||||
<dao name="Account" class="com.vmops.user.dao.AccountDaoImpl"/>
|
||||
<dao name="Limit" class="com.vmops.configuration.dao.LimitDaoImpl"/>
|
||||
<dao name="UserAccount" class="com.vmops.user.dao.UserAccountDaoImpl"/>
|
||||
<dao name="Usage IPAddress" class="com.vmops.usage.dao.UsageIPAddressDaoImpl"/>
|
||||
<dao name="VM Template Host" class="com.vmops.storage.dao.VMTemplateHostDaoImpl"/>
|
||||
<dao name="Upload" class="com.vmops.storage.dao.UploadDaoImpl"/>
|
||||
<dao name="VM Template Pool" class="com.vmops.storage.dao.VMTemplatePoolDaoImpl"/>
|
||||
<dao name="Launch Permission" class="com.vmops.storage.dao.LaunchPermissionDaoImpl"/>
|
||||
<dao name="Configuration" class="com.vmops.configuration.dao.ConfigurationDaoImpl"/>
|
||||
<dao name="HA" class="com.vmops.ha.dao.HighAvailabilityDaoImpl"/>
|
||||
<dao name="Console Proxy" class="com.vmops.vm.dao.ConsoleProxyDaoImpl"/>
|
||||
<dao name="Upgrade" class="com.vmops.maint.dao.AgentUpgradeDaoImpl"/>
|
||||
<dao name="Management Server Host" class="com.vmops.cluster.dao.ManagementServerHostDaoImpl"/>
|
||||
<dao name="Snapshot" class="com.vmops.storage.dao.SnapshotDaoImpl"/>
|
||||
<dao name="ScheduledVMBackup" class="com.vmops.user.dao.ScheduledVMBackupDaoImpl"/>
|
||||
<dao name="AsyncJobDao" class="com.vmops.async.dao.AsyncJobDaoImpl"/>
|
||||
<dao name="SyncQueueDao" class="com.vmops.async.dao.SyncQueueDaoImpl"/>
|
||||
<dao name="SyncQueueItemDao" class="com.vmops.async.dao.SyncQueueItemDaoImpl"/>
|
||||
<dao name="GuestOSDao" class="com.vmops.storage.dao.GuestOSDaoImpl"/>
|
||||
<dao name="Firewall Rules" class="com.cloud.network.dao.FirewallRulesDaoImpl"/>
|
||||
<dao name="Security Group" class="com.cloud.network.dao.SecurityGroupDaoImpl"/>
|
||||
<dao name="Load Balancer" class="com.cloud.network.dao.LoadBalancerDaoImpl"/>
|
||||
<dao name="Network Rule Config" class="com.cloud.network.dao.NetworkRuleConfigDaoImpl"/>
|
||||
<dao name="Security Group Mapping" class="com.cloud.network.dao.SecurityGroupVMMapDaoImpl"/>
|
||||
<dao name="Load Balancer Mapping" class="com.cloud.network.dao.LoadBalancerVMMapDaoImpl"/>
|
||||
<dao name="IP Addresses" class="com.cloud.network.dao.IPAddressDaoImpl"/>
|
||||
<dao name="Datacenter IP Addresses" class="com.cloud.dc.dao.DataCenterIpAddressDaoImpl"/>
|
||||
<dao name="Pricing" class="com.cloud.pricing.dao.PricingDaoImpl"/>
|
||||
<dao name="Usage" class="com.cloud.usage.dao.UsageDaoImpl"/>
|
||||
<dao name="UsageJob" class="com.cloud.usage.dao.UsageJobDaoImpl"/>
|
||||
<dao name="Alert" class="com.cloud.alert.dao.AlertDaoImpl"/>
|
||||
<dao name="Capacity" class="com.cloud.capacity.dao.CapacityDaoImpl"/>
|
||||
<dao name="Domain" class="com.cloud.domain.dao.DomainDaoImpl"/>
|
||||
<dao name="Account" class="com.cloud.user.dao.AccountDaoImpl"/>
|
||||
<dao name="Limit" class="com.cloud.configuration.dao.LimitDaoImpl"/>
|
||||
<dao name="UserAccount" class="com.cloud.user.dao.UserAccountDaoImpl"/>
|
||||
<dao name="Usage IPAddress" class="com.cloud.usage.dao.UsageIPAddressDaoImpl"/>
|
||||
<dao name="VM Template Host" class="com.cloud.storage.dao.VMTemplateHostDaoImpl"/>
|
||||
<dao name="Upload" class="com.cloud.storage.dao.UploadDaoImpl"/>
|
||||
<dao name="VM Template Pool" class="com.cloud.storage.dao.VMTemplatePoolDaoImpl"/>
|
||||
<dao name="Launch Permission" class="com.cloud.storage.dao.LaunchPermissionDaoImpl"/>
|
||||
<dao name="Configuration" class="com.cloud.configuration.dao.ConfigurationDaoImpl"/>
|
||||
<dao name="HA" class="com.cloud.ha.dao.HighAvailabilityDaoImpl"/>
|
||||
<dao name="Console Proxy" class="com.cloud.vm.dao.ConsoleProxyDaoImpl"/>
|
||||
<dao name="Upgrade" class="com.cloud.maint.dao.AgentUpgradeDaoImpl"/>
|
||||
<dao name="Management Server Host" class="com.cloud.cluster.dao.ManagementServerHostDaoImpl"/>
|
||||
<dao name="Snapshot" class="com.cloud.storage.dao.SnapshotDaoImpl"/>
|
||||
<dao name="ScheduledVMBackup" class="com.cloud.user.dao.ScheduledVMBackupDaoImpl"/>
|
||||
<dao name="AsyncJobDao" class="com.cloud.async.dao.AsyncJobDaoImpl"/>
|
||||
<dao name="SyncQueueDao" class="com.cloud.async.dao.SyncQueueDaoImpl"/>
|
||||
<dao name="SyncQueueItemDao" class="com.cloud.async.dao.SyncQueueItemDaoImpl"/>
|
||||
<dao name="GuestOSDao" class="com.cloud.storage.dao.GuestOSDaoImpl"/>
|
||||
|
||||
<dao name="StoragePoolDao" class="com.vmops.storage.dao.StoragePoolDaoImpl"/>
|
||||
<dao name="StoragePoolHostDao" class="com.vmops.storage.dao.StoragePoolHostDaoImpl"/>
|
||||
<dao name="HostDetails" class="com.vmops.host.dao.DetailsDaoImpl"/>
|
||||
<dao name="StoragePoolDao" class="com.cloud.storage.dao.StoragePoolDaoImpl"/>
|
||||
<dao name="StoragePoolHostDao" class="com.cloud.storage.dao.StoragePoolHostDaoImpl"/>
|
||||
<dao name="HostDetails" class="com.cloud.host.dao.DetailsDaoImpl"/>
|
||||
|
||||
|
||||
|
||||
<adapters key="com.vmops.agent.manager.allocator.HostAllocator">
|
||||
<adapter name="FirstFitRouting" class="com.vmops.agent.manager.allocator.impl.FirstFitRoutingAllocator"/>
|
||||
<adapter name="FirstFit" class="com.vmops.agent.manager.allocator.impl.FirstFitAllocator"/>
|
||||
<adapters key="com.cloud.agent.manager.allocator.HostAllocator">
|
||||
<adapter name="FirstFitRouting" class="com.cloud.agent.manager.allocator.impl.FirstFitRoutingAllocator"/>
|
||||
<adapter name="FirstFit" class="com.cloud.agent.manager.allocator.impl.FirstFitAllocator"/>
|
||||
</adapters>
|
||||
<adapters key="com.vmops.agent.manager.allocator.StorageAllocator">
|
||||
<adapter name="Storage" class="com.vmops.agent.manager.allocator.impl.FirstFitStorageAllocator">
|
||||
<adapters key="com.cloud.agent.manager.allocator.StorageAllocator">
|
||||
<adapter name="Storage" class="com.cloud.agent.manager.allocator.impl.FirstFitStorageAllocator">
|
||||
<param name="storage.overprovisioning.factor">2</param>
|
||||
</adapter>
|
||||
<adapter name="Storage" class="com.vmops.agent.manager.allocator.impl.RandomStoragePoolAllocator">
|
||||
<adapter name="Storage" class="com.cloud.agent.manager.allocator.impl.RandomStoragePoolAllocator">
|
||||
<param name="storage.overprovisioning.factor">2</param>
|
||||
</adapter>
|
||||
</adapters>
|
||||
<adapters key="com.vmops.agent.manager.allocator.PodAllocator">
|
||||
<adapter name="User First" class="com.vmops.agent.manager.allocator.impl.UserConcentratedAllocator"/>
|
||||
<adapters key="com.cloud.agent.manager.allocator.PodAllocator">
|
||||
<adapter name="User First" class="com.cloud.agent.manager.allocator.impl.UserConcentratedAllocator"/>
|
||||
</adapters>
|
||||
|
||||
|
||||
<adapters key="com.vmops.consoleproxy.ConsoleProxyAllocator">
|
||||
<adapter name="Balance" class="com.vmops.consoleproxy.ConsoleProxyBalanceAllocator"/>
|
||||
<adapters key="com.cloud.consoleproxy.ConsoleProxyAllocator">
|
||||
<adapter name="Balance" class="com.cloud.consoleproxy.ConsoleProxyBalanceAllocator"/>
|
||||
</adapters>
|
||||
|
||||
|
||||
<adapters key="com.vmops.server.auth.UserAuthenticator">
|
||||
<adapter name="MD5" class="com.vmops.server.auth.MD5UserAuthenticator"/>
|
||||
<adapters key="com.cloud.server.auth.UserAuthenticator">
|
||||
<adapter name="MD5" class="com.cloud.server.auth.MD5UserAuthenticator"/>
|
||||
</adapters>
|
||||
<adapters key="com.vmops.ha.Investigator">
|
||||
<adapter name="SimpleInvestigator" class="com.vmops.ha.CheckOnAgentInvestigator"/>
|
||||
<adapter name="PingInvestigator" class="com.vmops.ha.InvestigatorImpl"/>
|
||||
<adapters key="com.cloud.ha.Investigator">
|
||||
<adapter name="SimpleInvestigator" class="com.cloud.ha.CheckOnAgentInvestigator"/>
|
||||
<adapter name="PingInvestigator" class="com.cloud.ha.InvestigatorImpl"/>
|
||||
</adapters>
|
||||
<adapters key="com.vmops.ha.FenceBuilder">
|
||||
<adapter name="StorageFenceBuilder" class="com.vmops.ha.StorageFence"/>
|
||||
<adapters key="com.cloud.ha.FenceBuilder">
|
||||
<adapter name="StorageFenceBuilder" class="com.cloud.ha.StorageFence"/>
|
||||
</adapters>
|
||||
<adapters key="com.vmops.cluster.ClusterServiceAdapter">
|
||||
<adapter name="ClusterService" class="com.vmops.cluster.ClusterServiceServletAdapter"/>
|
||||
<adapters key="com.cloud.cluster.ClusterServiceAdapter">
|
||||
<adapter name="ClusterService" class="com.cloud.cluster.ClusterServiceServletAdapter"/>
|
||||
</adapters>
|
||||
<adapters key="com.vmops.resource.Discoverer">
|
||||
<adapter name="XenServer" class="com.vmops.resource.xen.XenServerDiscoverer"/>
|
||||
<adapter name="SecondaryStorage" class="com.vmops.storage.secondary.SecondaryStorageDiscoverer"/>
|
||||
<adapter name="DummyHostServer" class="com.vmops.resource.DummyHostDiscoverer"/>
|
||||
<adapters key="com.cloud.resource.Discoverer">
|
||||
<adapter name="XenServer" class="com.cloud.resource.xen.XenServerDiscoverer"/>
|
||||
<adapter name="SecondaryStorage" class="com.cloud.storage.secondary.SecondaryStorageDiscoverer"/>
|
||||
<adapter name="DummyHostServer" class="com.cloud.resource.DummyHostDiscoverer"/>
|
||||
</adapters>
|
||||
<manager name="account manager" class="com.vmops.user.AccountManagerImpl">
|
||||
<manager name="account manager" class="com.cloud.user.AccountManagerImpl">
|
||||
</manager>
|
||||
<manager name="agent manager" class="com.vmops.agent.manager.ClusteredAgentManagerImpl">
|
||||
<manager name="agent manager" class="com.cloud.agent.manager.ClusteredAgentManagerImpl">
|
||||
</manager>
|
||||
<manager name="configuration manager" class="com.vmops.configuration.ConfigurationManagerImpl">
|
||||
<manager name="configuration manager" class="com.cloud.configuration.ConfigurationManagerImpl">
|
||||
<param name="premium">true</param>
|
||||
</manager>
|
||||
<manager name="network manager" class="com.vmops.network.NetworkManagerImpl">
|
||||
<manager name="network manager" class="com.cloud.network.NetworkManagerImpl">
|
||||
</manager>
|
||||
<manager name="download manager" class="com.vmops.storage.download.DownloadMonitorImpl">
|
||||
<manager name="download manager" class="com.cloud.storage.download.DownloadMonitorImpl">
|
||||
</manager>
|
||||
<manager name="upload manager" class="com.cloud.storage.upload.UploadMonitorImpl">
|
||||
</manager>
|
||||
<manager name="console proxy manager" class="com.vmops.consoleproxy.ConsoleProxyManagerImpl">
|
||||
<manager name="console proxy manager" class="com.cloud.consoleproxy.ConsoleProxyManagerImpl">
|
||||
</manager>
|
||||
<manager name="vm manager" class="com.vmops.vm.UserVmManagerImpl"/>
|
||||
<manager name="upgrade manager" class="com.vmops.maint.UpgradeManagerImpl">
|
||||
<manager name="vm manager" class="com.cloud.vm.UserVmManagerImpl"/>
|
||||
<manager name="upgrade manager" class="com.cloud.maint.UpgradeManagerImpl">
|
||||
</manager>
|
||||
<manager name="StorageManager" class="com.vmops.storage.StorageManagerImpl">
|
||||
<manager name="StorageManager" class="com.cloud.storage.StorageManagerImpl">
|
||||
</manager>
|
||||
<manager name="HA Manager" class="com.vmops.ha.HighAvailabilityManagerExtImpl">
|
||||
<manager name="HA Manager" class="com.cloud.ha.HighAvailabilityManagerExtImpl">
|
||||
</manager>
|
||||
<manager name="Cluster Manager" class="com.vmops.cluster.ClusterManagerImpl">
|
||||
<manager name="Cluster Manager" class="com.cloud.cluster.ClusterManagerImpl">
|
||||
</manager>
|
||||
<manager name="SyncQueueManager" class="com.vmops.async.SyncQueueManagerImpl">
|
||||
<manager name="SyncQueueManager" class="com.cloud.async.SyncQueueManagerImpl">
|
||||
</manager>
|
||||
<manager name="AsyncJobManager" class="com.vmops.async.AsyncJobManagerImpl">
|
||||
<manager name="AsyncJobManager" class="com.cloud.async.AsyncJobManagerImpl">
|
||||
</manager>
|
||||
<manager name="AsyncJobExecutorContext" class="com.vmops.async.AsyncJobExecutorContextImpl">
|
||||
<manager name="AsyncJobExecutorContext" class="com.cloud.async.AsyncJobExecutorContextImpl">
|
||||
</manager>
|
||||
|
||||
<manager name="Alert Manager" class="com.vmops.alert.AlertManagerImpl">
|
||||
<manager name="Alert Manager" class="com.cloud.alert.AlertManagerImpl">
|
||||
</manager>
|
||||
<manager name="Template Manager" class="com.vmops.template.TemplateManagerImpl">
|
||||
<manager name="Template Manager" class="com.cloud.template.TemplateManagerImpl">
|
||||
</manager>
|
||||
<adapters key="com.vmops.alert.AlertAdapter">
|
||||
<adapter name="ClusterAlert" class="com.vmops.alert.ClusterAlertAdapter"/>
|
||||
<adapter name="ConsoleProxyAlert" class="com.vmops.alert.ConsoleProxyAlertAdapter"/>
|
||||
<adapters key="com.cloud.alert.AlertAdapter">
|
||||
<adapter name="ClusterAlert" class="com.cloud.alert.ClusterAlertAdapter"/>
|
||||
<adapter name="ConsoleProxyAlert" class="com.cloud.alert.ConsoleProxyAlertAdapter"/>
|
||||
</adapters>
|
||||
</management-server>
|
||||
|
||||
|
||||
@ -20,8 +20,6 @@ package com.cloud.async;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import junit.framework.Assert;
|
||||
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
import com.cloud.utils.component.ComponentLocator;
|
||||
@ -34,7 +32,7 @@ public class TestSyncQueueManager extends ComponentTestCase {
|
||||
|
||||
private volatile int count = 0;
|
||||
private volatile long expectingCurrent = 1;
|
||||
|
||||
|
||||
public void leftOverItems() {
|
||||
SyncQueueManager mgr = ComponentLocator.getCurrentLocator().getManager(
|
||||
SyncQueueManager.class);
|
||||
@ -198,5 +196,21 @@ public class TestSyncQueueManager extends ComponentTestCase {
|
||||
for(int q = 1; q <= queues; q++)
|
||||
for(int i = 0; i < totalRuns; i++)
|
||||
mgr.queue("vm_instance", q, "Async-job", i+1);
|
||||
}
|
||||
}
|
||||
|
||||
public void testSyncQueue() {
|
||||
final SyncQueueManager mgr = ComponentLocator.getCurrentLocator().getManager(
|
||||
SyncQueueManager.class);
|
||||
|
||||
mgr.queue("vm_instance", 1, "Async-job", 1);
|
||||
mgr.queue("vm_instance", 1, "Async-job", 2);
|
||||
mgr.queue("vm_instance", 1, "Async-job", 3);
|
||||
mgr.dequeueFromAny(100L, 1);
|
||||
|
||||
List<SyncQueueItemVO> l = mgr.getBlockedQueueItems(100000, false);
|
||||
for(SyncQueueItemVO item : l) {
|
||||
System.out.println("Blocked item. " + item.getContentType() + "-" + item.getContentId());
|
||||
mgr.purgeItem(item.getId());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
<components.xml>
|
||||
<management-server class="com.vmops.async.TestSyncQueueManager">
|
||||
<dao name="sync queue dao" class="com.vmops.async.dao.SyncQueueDaoImpl"/>
|
||||
<dao name="sync queue item dao" class="com.vmops.async.dao.SyncQueueItemDaoImpl"/>
|
||||
<manager name="sync queue manager" class="com.vmops.async.SyncQueueManagerImpl">
|
||||
<management-server class="com.cloud.async.TestSyncQueueManager">
|
||||
<dao name="sync queue dao" class="com.cloud.async.dao.SyncQueueDaoImpl"/>
|
||||
<dao name="sync queue item dao" class="com.cloud.async.dao.SyncQueueItemDaoImpl"/>
|
||||
<manager name="sync queue manager" class="com.cloud.async.SyncQueueManagerImpl">
|
||||
</manager>
|
||||
</management-server>
|
||||
</components.xml>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user