More Managed Context changes
diff --git a/agent/src/com/cloud/agent/Agent.java b/agent/src/com/cloud/agent/Agent.java index f309474..c713e45 100755 --- a/agent/src/com/cloud/agent/Agent.java +++ b/agent/src/com/cloud/agent/Agent.java
@@ -26,7 +26,6 @@ import java.util.List; import java.util.Map; import java.util.Timer; -import java.util.TimerTask; import java.util.concurrent.ExecutorService; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.SynchronousQueue; @@ -36,6 +35,7 @@ import javax.naming.ConfigurationException; +import org.apache.cloudstack.managed.context.ManagedContextTimerTask; import org.apache.log4j.Logger; import com.cloud.agent.api.AgentControlAnswer; @@ -731,7 +731,7 @@ } } - public class WatchTask extends TimerTask { + public class WatchTask extends ManagedContextTimerTask { protected Request _request; protected Agent _agent; protected Link _link; @@ -744,7 +744,7 @@ } @Override - public void run() { + protected void runInContext() { if (s_logger.isTraceEnabled()) { s_logger.trace("Scheduling " + (_request instanceof Response ? "Ping" : "Watch Task")); } @@ -760,7 +760,7 @@ } } - public class StartupTask extends TimerTask { + public class StartupTask extends ManagedContextTimerTask { protected Link _link; protected volatile boolean cancelled = false; @@ -782,7 +782,7 @@ } @Override - public synchronized void run() { + protected synchronized void runInContext() { if (!cancelled) { if (s_logger.isInfoEnabled()) { s_logger.info("The startup command is now cancelled");
diff --git a/agent/src/com/cloud/agent/resource/consoleproxy/ConsoleProxyResource.java b/agent/src/com/cloud/agent/resource/consoleproxy/ConsoleProxyResource.java index ee5c361..6f49f47 100644 --- a/agent/src/com/cloud/agent/resource/consoleproxy/ConsoleProxyResource.java +++ b/agent/src/com/cloud/agent/resource/consoleproxy/ConsoleProxyResource.java
@@ -32,6 +32,7 @@ import javax.naming.ConfigurationException; +import org.apache.cloudstack.managed.context.ManagedContextRunnable; import org.apache.log4j.Logger; import com.cloud.agent.Agent.ExitStatus; @@ -357,8 +358,9 @@ private void launchConsoleProxy(final byte[] ksBits, final String ksPassword, final String encryptorPassword) { final Object resource = this; if (_consoleProxyMain == null) { - _consoleProxyMain = new Thread(new Runnable() { - public void run() { + _consoleProxyMain = new Thread(new ManagedContextRunnable() { + @Override + protected void runInContext() { try { Class<?> consoleProxyClazz = Class.forName("com.cloud.consoleproxy.ConsoleProxy"); try {
diff --git a/api/src/org/apache/cloudstack/context/CallContext.java b/api/src/org/apache/cloudstack/context/CallContext.java index f10444e..a9867d3 100644 --- a/api/src/org/apache/cloudstack/context/CallContext.java +++ b/api/src/org/apache/cloudstack/context/CallContext.java
@@ -200,14 +200,14 @@ s_logger.trace("Popping from NDC: " + contextId); } } - + Stack<CallContext> stack = s_currentContextStack.get(); stack.pop(); - + if ( ! stack.isEmpty() ) { s_currentContext.set(stack.peek()); } - + return context; }
diff --git a/awsapi/src/com/cloud/bridge/service/controller/s3/ServiceProvider.java b/awsapi/src/com/cloud/bridge/service/controller/s3/ServiceProvider.java index a0892cc..2623efe 100644 --- a/awsapi/src/com/cloud/bridge/service/controller/s3/ServiceProvider.java +++ b/awsapi/src/com/cloud/bridge/service/controller/s3/ServiceProvider.java
@@ -35,6 +35,7 @@ import javax.inject.Inject; import org.apache.axis2.AxisFault; +import org.apache.cloudstack.managed.context.ManagedContextTimerTask; import org.apache.log4j.Logger; import org.apache.log4j.xml.DOMConfigurator; import org.springframework.stereotype.Component; @@ -280,10 +281,9 @@ } private TimerTask getHeartbeatTask() { - return new TimerTask() { - + return new ManagedContextTimerTask() { @Override - public void run() { + protected void runInContext() { try { mhost.setLastHeartbeatTime(DateHelper.currentGMTTime()); mhostDao.updateHeartBeat(mhost);
diff --git a/client/tomcatconf/applicationContext.xml.in b/client/tomcatconf/applicationContext.xml.in index 9b6636a..6dda5c7 100644 --- a/client/tomcatconf/applicationContext.xml.in +++ b/client/tomcatconf/applicationContext.xml.in
@@ -53,6 +53,22 @@ </bean> <!-- + Managed Context + --> + <bean id="ManagedContext" class="org.apache.cloudstack.managed.context.impl.DefaultManagedContext" > + <property name="listeners"> + <list> + <bean class="org.apache.cloudstack.context.CallContextListener" /> + </list> + </property> + </bean> + + <bean class="org.apache.cloudstack.managed.context.ManagedContextRunnable" factory-method="initializeGlobalContext" + autowire-candidate="false" > + <constructor-arg><ref bean="ManagedContext"/></constructor-arg> + </bean> + + <!-- RPC/Async/EventBus -->
diff --git a/core/src/com/cloud/storage/template/HttpTemplateDownloader.java b/core/src/com/cloud/storage/template/HttpTemplateDownloader.java index 8789615..f0f1962 100644 --- a/core/src/com/cloud/storage/template/HttpTemplateDownloader.java +++ b/core/src/com/cloud/storage/template/HttpTemplateDownloader.java
@@ -40,7 +40,7 @@ import org.apache.commons.httpclient.methods.GetMethod; import org.apache.commons.httpclient.params.HttpMethodParams; import org.apache.log4j.Logger; - +import org.apache.cloudstack.managed.context.ManagedContextRunnable; import org.apache.cloudstack.storage.command.DownloadCommand.ResourceType; import com.cloud.agent.api.storage.Proxy; @@ -52,7 +52,7 @@ * Download a template file using HTTP * */ -public class HttpTemplateDownloader implements TemplateDownloader { +public class HttpTemplateDownloader extends ManagedContextRunnable implements TemplateDownloader { public static final Logger s_logger = Logger.getLogger(HttpTemplateDownloader.class.getName()); private static final MultiThreadedHttpConnectionManager s_httpClientManager = new MultiThreadedHttpConnectionManager(); @@ -350,7 +350,7 @@ } @Override - public void run() { + protected void runInContext() { try { download(resume, completionCallback); } catch (Throwable t) {
diff --git a/core/src/com/cloud/storage/template/S3TemplateDownloader.java b/core/src/com/cloud/storage/template/S3TemplateDownloader.java index 05ed64b..dd595ea 100644 --- a/core/src/com/cloud/storage/template/S3TemplateDownloader.java +++ b/core/src/com/cloud/storage/template/S3TemplateDownloader.java
@@ -50,6 +50,7 @@ import com.amazonaws.services.s3.transfer.TransferManager; import com.amazonaws.services.s3.transfer.Upload; +import org.apache.cloudstack.managed.context.ManagedContextRunnable; import org.apache.cloudstack.storage.command.DownloadCommand.ResourceType; import com.cloud.agent.api.storage.Proxy; @@ -62,7 +63,7 @@ * Download a template file using HTTP * */ -public class S3TemplateDownloader implements TemplateDownloader { +public class S3TemplateDownloader extends ManagedContextRunnable implements TemplateDownloader { public static final Logger s_logger = Logger.getLogger(S3TemplateDownloader.class.getName()); private static final MultiThreadedHttpConnectionManager s_httpClientManager = new MultiThreadedHttpConnectionManager(); @@ -361,7 +362,7 @@ } @Override - public void run() { + protected void runInContext() { try { download(resume, completionCallback); } catch (Throwable t) {
diff --git a/core/src/com/cloud/storage/template/TemplateDownloaderBase.java b/core/src/com/cloud/storage/template/TemplateDownloaderBase.java index bdbdd45..7cbd4ef 100644 --- a/core/src/com/cloud/storage/template/TemplateDownloaderBase.java +++ b/core/src/com/cloud/storage/template/TemplateDownloaderBase.java
@@ -18,11 +18,12 @@ import java.io.File; +import org.apache.cloudstack.managed.context.ManagedContextRunnable; import org.apache.log4j.Logger; import com.cloud.storage.StorageLayer; -public abstract class TemplateDownloaderBase implements TemplateDownloader { +public abstract class TemplateDownloaderBase extends ManagedContextRunnable implements TemplateDownloader { private static final Logger s_logger = Logger.getLogger(TemplateDownloaderBase.class); protected String _downloadUrl; @@ -123,7 +124,7 @@ } @Override - public void run() { + protected void runInContext() { try { download(_resume, _callback); } catch (Exception e) {
diff --git a/engine/orchestration/src/com/cloud/agent/manager/AgentAttache.java b/engine/orchestration/src/com/cloud/agent/manager/AgentAttache.java index 67deba0..5b1007b 100755 --- a/engine/orchestration/src/com/cloud/agent/manager/AgentAttache.java +++ b/engine/orchestration/src/com/cloud/agent/manager/AgentAttache.java
@@ -31,6 +31,7 @@ import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; +import org.apache.cloudstack.managed.context.ManagedContextRunnable; import org.apache.log4j.Logger; import com.cloud.agent.Listener; @@ -497,14 +498,14 @@ */ protected abstract boolean isClosed(); - protected class Alarm implements Runnable { + protected class Alarm extends ManagedContextRunnable { long _seq; public Alarm(long seq) { _seq = seq; } @Override - public void run() { + protected void runInContext() { try { Listener listener = unregisterListener(_seq); if (listener != null) {
diff --git a/engine/orchestration/src/com/cloud/agent/manager/AgentManagerImpl.java b/engine/orchestration/src/com/cloud/agent/manager/AgentManagerImpl.java index 6b521a2..4202015 100755 --- a/engine/orchestration/src/com/cloud/agent/manager/AgentManagerImpl.java +++ b/engine/orchestration/src/com/cloud/agent/manager/AgentManagerImpl.java
@@ -1016,7 +1016,7 @@ return attache; } - protected class SimulateStartTask extends ManagedContextRunnable implements Runnable { + protected class SimulateStartTask extends ManagedContextRunnable { ServerResource resource; Map<String, String> details; long id; @@ -1056,7 +1056,7 @@ } } - protected class HandleAgentConnectTask extends ManagedContextRunnable implements Runnable { + protected class HandleAgentConnectTask extends ManagedContextRunnable { Link _link; Command[] _cmds; Request _request;
diff --git a/framework/cluster/src/com/cloud/cluster/ClusterManagerImpl.java b/framework/cluster/src/com/cloud/cluster/ClusterManagerImpl.java index f19bb3c..56d405e 100644 --- a/framework/cluster/src/com/cloud/cluster/ClusterManagerImpl.java +++ b/framework/cluster/src/com/cloud/cluster/ClusterManagerImpl.java
@@ -218,18 +218,18 @@ } private Runnable getClusterPduSendingTask() { - return new Runnable() { + return new ManagedContextRunnable() { @Override - public void run() { + protected void runInContext() { onSendingClusterPdu(); } }; } private Runnable getClusterPduNotificationTask() { - return new Runnable() { + return new ManagedContextRunnable() { @Override - public void run() { + protected void runInContext() { onNotifyingClusterPdu(); } }; @@ -290,9 +290,9 @@ if(pdu == null) continue; - _executor.execute(new Runnable() { + _executor.execute(new ManagedContextRunnable() { @Override - public void run() { + protected void runInContext() { if(pdu.getPduType() == ClusterServicePdu.PDU_TYPE_RESPONSE) { ClusterServiceRequestPdu requestPdu = popRequestPdu(pdu.getAckSequenceId()); if(requestPdu != null) { @@ -529,9 +529,9 @@ } private Runnable getHeartbeatTask() { - return new Runnable() { + return new ManagedContextRunnable() { @Override - public void run() { + protected void runInContext() { Transaction txn = Transaction.open("ClusterHeartbeat"); try { Profiler profiler = new Profiler();
diff --git a/framework/db/src/com/cloud/utils/db/ConnectionConcierge.java b/framework/db/src/com/cloud/utils/db/ConnectionConcierge.java index 0294334..c3c24f9 100644 --- a/framework/db/src/com/cloud/utils/db/ConnectionConcierge.java +++ b/framework/db/src/com/cloud/utils/db/ConnectionConcierge.java
@@ -30,6 +30,7 @@ import javax.management.StandardMBean; +import org.apache.cloudstack.managed.context.ManagedContextRunnable; import org.apache.log4j.Logger; import com.cloud.utils.concurrency.NamedThreadFactory; @@ -198,10 +199,9 @@ _executor = Executors.newScheduledThreadPool(1, new NamedThreadFactory("ConnectionConcierge")); - _executor.scheduleAtFixedRate(new Runnable() { - + _executor.scheduleAtFixedRate(new ManagedContextRunnable() { @Override - public void run() { + protected void runInContext() { s_logger.trace("connection concierge keep alive task"); for (Map.Entry<String, ConnectionConcierge> entry : _conns.entrySet()) { ConnectionConcierge concierge = entry.getValue();
diff --git a/framework/ipc/src/org/apache/cloudstack/framework/client/ClientTransportProvider.java b/framework/ipc/src/org/apache/cloudstack/framework/client/ClientTransportProvider.java index 023b318..923578c 100644 --- a/framework/ipc/src/org/apache/cloudstack/framework/client/ClientTransportProvider.java +++ b/framework/ipc/src/org/apache/cloudstack/framework/client/ClientTransportProvider.java
@@ -27,6 +27,7 @@ import org.apache.cloudstack.framework.transport.TransportEndpoint; import org.apache.cloudstack.framework.transport.TransportEndpointSite; import org.apache.cloudstack.framework.transport.TransportProvider; +import org.apache.cloudstack.managed.context.ManagedContextRunnable; import com.cloud.utils.concurrency.NamedThreadFactory; @@ -62,10 +63,9 @@ _executor = Executors.newFixedThreadPool(_poolSize, new NamedThreadFactory("Transport-Worker")); _connection = new ClientTransportConnection(this); - _executor.execute(new Runnable() { - - @Override - public void run() { + _executor.execute(new ManagedContextRunnable() { + @Override + protected void runInContext() { try { _connection.connect(_serverAddress, _serverPort); } catch(Throwable e) {
diff --git a/framework/ipc/src/org/apache/cloudstack/framework/server/ServerTransportProvider.java b/framework/ipc/src/org/apache/cloudstack/framework/server/ServerTransportProvider.java index b19a7c9..45c3e2a 100644 --- a/framework/ipc/src/org/apache/cloudstack/framework/server/ServerTransportProvider.java +++ b/framework/ipc/src/org/apache/cloudstack/framework/server/ServerTransportProvider.java
@@ -31,6 +31,7 @@ import org.apache.cloudstack.framework.transport.TransportEndpointSite; import org.apache.cloudstack.framework.transport.TransportPdu; import org.apache.cloudstack.framework.transport.TransportProvider; +import org.apache.cloudstack.managed.context.ManagedContextRunnable; import org.apache.log4j.Logger; import com.cloud.utils.concurrency.NamedThreadFactory; @@ -132,11 +133,10 @@ @Override public void requestSiteOutput(final TransportEndpointSite site) { - _executor.execute(new Runnable() { - - @Override - public void run() { - try { + _executor.execute(new ManagedContextRunnable() { + @Override + protected void runInContext() { + try { site.processOutput(); site.ackOutputProcessSignal(); } catch(Throwable e) {
diff --git a/framework/jobs/src/org/apache/cloudstack/framework/jobs/impl/AsyncJobManagerImpl.java b/framework/jobs/src/org/apache/cloudstack/framework/jobs/impl/AsyncJobManagerImpl.java index c6332b7..93d50c1 100644 --- a/framework/jobs/src/org/apache/cloudstack/framework/jobs/impl/AsyncJobManagerImpl.java +++ b/framework/jobs/src/org/apache/cloudstack/framework/jobs/impl/AsyncJobManagerImpl.java
@@ -490,9 +490,9 @@ } private Runnable getExecutorRunnable(final AsyncJob job) { - return new Runnable() { + return new ManagedContextRunnable() { @Override - public void run() { + protected void runInContext() { Transaction txn = null; long runNumber = getJobRunNumber(); @@ -687,9 +687,9 @@ } private Runnable getHeartbeatTask() { - return new Runnable() { + return new ManagedContextRunnable() { @Override - public void run() { + protected void runInContext() { Transaction txn = Transaction.open("AsyncJobManagerImpl.getHeartbeatTask"); try { List<SyncQueueItemVO> l = _queueMgr.dequeueFromAny(getMsid(), MAX_ONETIME_SCHEDULE_SIZE);
diff --git a/framework/managed-context/src/main/java/org/apache/cloudstack/managed/context/ManagedContextRunnable.java b/framework/managed-context/src/main/java/org/apache/cloudstack/managed/context/ManagedContextRunnable.java index 5308e89..2f3d0c8 100644 --- a/framework/managed-context/src/main/java/org/apache/cloudstack/managed/context/ManagedContextRunnable.java +++ b/framework/managed-context/src/main/java/org/apache/cloudstack/managed/context/ManagedContextRunnable.java
@@ -18,6 +18,7 @@ */ package org.apache.cloudstack.managed.context; +import org.apache.cloudstack.managed.context.impl.DefaultManagedContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -26,13 +27,17 @@ private static final int SLEEP_COUNT = 120; private static final Logger log = LoggerFactory.getLogger(ManagedContextRunnable.class); + private static final ManagedContext DEFAULT_MANAGED_CONTEXT = new DefaultManagedContext(); private static ManagedContext context; + private static boolean managedContext = false; + /* This is slightly dirty, but the idea is that we only save the ManagedContext * in a static global. Any ManagedContextListener can be a fully managed object * and not have to rely on global statics */ public static ManagedContext initializeGlobalContext(ManagedContext context) { + setManagedContext(true); return ManagedContextRunnable.context = context; } @@ -43,13 +48,15 @@ public void run() { runInContext(); } - }); } protected abstract void runInContext(); protected ManagedContext getContext() { + if ( ! managedContext ) + return DEFAULT_MANAGED_CONTEXT; + for ( int i = 0 ; i < SLEEP_COUNT ; i++ ) { if ( context == null ) { try { @@ -67,4 +74,13 @@ throw new RuntimeException("Failed to obtain ManagedContext"); } -} + + public static boolean isManagedContext() { + return managedContext; + } + + public static void setManagedContext(boolean managedContext) { + ManagedContextRunnable.managedContext = managedContext; + } + +} \ No newline at end of file
diff --git a/plugins/event-bus/rabbitmq/src/org/apache/cloudstack/mom/rabbitmq/RabbitMQEventBus.java b/plugins/event-bus/rabbitmq/src/org/apache/cloudstack/mom/rabbitmq/RabbitMQEventBus.java index 1c0c6be..478c8d7 100644 --- a/plugins/event-bus/rabbitmq/src/org/apache/cloudstack/mom/rabbitmq/RabbitMQEventBus.java +++ b/plugins/event-bus/rabbitmq/src/org/apache/cloudstack/mom/rabbitmq/RabbitMQEventBus.java
@@ -20,7 +20,9 @@ package org.apache.cloudstack.mom.rabbitmq; import com.rabbitmq.client.*; + import org.apache.cloudstack.framework.events.*; +import org.apache.cloudstack.managed.context.ManagedContextRunnable; import org.apache.log4j.Logger; import com.cloud.utils.Ternary; @@ -28,6 +30,7 @@ import javax.ejb.Local; import javax.naming.ConfigurationException; + import java.io.IOException; import java.net.ConnectException; import java.util.Map; @@ -493,12 +496,13 @@ } // retry logic to connect back to AMQP server after loss of connection - private class ReconnectionTask implements Runnable { + private class ReconnectionTask extends ManagedContextRunnable { boolean connected = false; Connection connection = null; - public void run() { + @Override + protected void runInContext() { while (!connected) { try {
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/KVMHAMonitor.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/KVMHAMonitor.java index 0e4d9ee..1117110 100644 --- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/KVMHAMonitor.java +++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/KVMHAMonitor.java
@@ -20,7 +20,10 @@ import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; + +import org.apache.cloudstack.managed.context.ManagedContextRunnable; import org.apache.log4j.Logger; + import com.cloud.utils.script.Script; import org.libvirt.Connect; @@ -68,10 +71,10 @@ } } - private class Monitor implements Runnable { + private class Monitor extends ManagedContextRunnable { @Override - public void run() { + protected void runInContext() { synchronized (_storagePool) { for (String uuid : _storagePool.keySet()) { NfsStoragePool primaryStoragePool = _storagePool.get(uuid);
diff --git a/plugins/hypervisors/ucs/src/com/cloud/ucs/manager/UcsManagerImpl.java b/plugins/hypervisors/ucs/src/com/cloud/ucs/manager/UcsManagerImpl.java index 125faba..9dfe91d 100755 --- a/plugins/hypervisors/ucs/src/com/cloud/ucs/manager/UcsManagerImpl.java +++ b/plugins/hypervisors/ucs/src/com/cloud/ucs/manager/UcsManagerImpl.java
@@ -31,7 +31,6 @@ import javax.naming.ConfigurationException; import org.apache.log4j.Logger; - import org.apache.cloudstack.api.AddUcsManagerCmd; import org.apache.cloudstack.api.AssociateUcsProfileToBladeCmd; import org.apache.cloudstack.api.DeleteUcsManagerCmd; @@ -43,6 +42,7 @@ import org.apache.cloudstack.api.response.UcsManagerResponse; import org.apache.cloudstack.api.response.UcsProfileResponse; import org.apache.cloudstack.framework.config.dao.ConfigurationDao; +import org.apache.cloudstack.managed.context.ManagedContextRunnable; import com.cloud.configuration.Config; import com.cloud.dc.ClusterDetailsDao;
diff --git a/server/src/com/cloud/storage/snapshot/SnapshotSchedulerImpl.java b/server/src/com/cloud/storage/snapshot/SnapshotSchedulerImpl.java index 1cddfa7..15e9cd3 100644 --- a/server/src/com/cloud/storage/snapshot/SnapshotSchedulerImpl.java +++ b/server/src/com/cloud/storage/snapshot/SnapshotSchedulerImpl.java
@@ -33,12 +33,10 @@ import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.command.user.snapshot.CreateSnapshotCmd; -import org.apache.cloudstack.context.ServerContexts; import org.apache.cloudstack.framework.config.dao.ConfigurationDao; import org.apache.cloudstack.framework.jobs.AsyncJobManager; import org.apache.cloudstack.framework.jobs.dao.AsyncJobDao; import org.apache.cloudstack.framework.jobs.impl.AsyncJobVO; -import org.apache.cloudstack.managed.context.ManagedContext; import org.apache.cloudstack.managed.context.ManagedContextTimerTask; import com.cloud.api.ApiDispatcher;
diff --git a/server/src/com/cloud/user/AccountManagerImpl.java b/server/src/com/cloud/user/AccountManagerImpl.java index 078ed34..ae93548 100755 --- a/server/src/com/cloud/user/AccountManagerImpl.java +++ b/server/src/com/cloud/user/AccountManagerImpl.java
@@ -50,7 +50,6 @@ import org.apache.cloudstack.api.command.admin.user.RegisterCmd; import org.apache.cloudstack.api.command.admin.user.UpdateUserCmd; import org.apache.cloudstack.context.CallContext; -import org.apache.cloudstack.context.ServerContexts; import org.apache.cloudstack.engine.orchestration.service.NetworkOrchestrationService; import org.apache.cloudstack.framework.config.dao.ConfigurationDao; import org.apache.cloudstack.managed.context.ManagedContextRunnable;
diff --git a/server/src/com/cloud/vm/UserVmManagerImpl.java b/server/src/com/cloud/vm/UserVmManagerImpl.java index aa2d98b..68c0c77 100755 --- a/server/src/com/cloud/vm/UserVmManagerImpl.java +++ b/server/src/com/cloud/vm/UserVmManagerImpl.java
@@ -61,7 +61,6 @@ import org.apache.cloudstack.api.command.user.vmgroup.CreateVMGroupCmd; import org.apache.cloudstack.api.command.user.vmgroup.DeleteVMGroupCmd; import org.apache.cloudstack.context.CallContext; -import org.apache.cloudstack.context.ServerContexts; import org.apache.cloudstack.engine.cloud.entity.api.VirtualMachineEntity; import org.apache.cloudstack.engine.orchestration.service.NetworkOrchestrationService; import org.apache.cloudstack.engine.orchestration.service.VolumeOrchestrationService;
diff --git a/usage/src/com/cloud/usage/UsageManagerImpl.java b/usage/src/com/cloud/usage/UsageManagerImpl.java index d2a7cc0..81217a3 100644 --- a/usage/src/com/cloud/usage/UsageManagerImpl.java +++ b/usage/src/com/cloud/usage/UsageManagerImpl.java
@@ -37,6 +37,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.framework.config.dao.ConfigurationDao; import org.apache.cloudstack.managed.context.ManagedContext; +import org.apache.cloudstack.managed.context.ManagedContextRunnable; import org.apache.cloudstack.usage.UsageTypes; import org.springframework.stereotype.Component; @@ -1661,8 +1662,9 @@ m_usageVMSnapshotDao.persist(vsVO); } - private class Heartbeat implements Runnable { - public void run() { + private class Heartbeat extends ManagedContextRunnable { + @Override + protected void runInContext() { Transaction usageTxn = Transaction.open(Transaction.USAGE_DB); try { if(!m_heartbeatLock.lock(3)) { // 3 second timeout @@ -1767,8 +1769,9 @@ } } - private class SanityCheck implements Runnable { - public void run() { + private class SanityCheck extends ManagedContextRunnable { + @Override + protected void runInContext() { UsageSanityChecker usc = new UsageSanityChecker(); try { String errors = usc.runSanityCheck();
diff --git a/vmware-base/src/com/cloud/hypervisor/vmware/util/VmwareContextPool.java b/vmware-base/src/com/cloud/hypervisor/vmware/util/VmwareContextPool.java index 18af7cd..c36b3a8 100644 --- a/vmware-base/src/com/cloud/hypervisor/vmware/util/VmwareContextPool.java +++ b/vmware-base/src/com/cloud/hypervisor/vmware/util/VmwareContextPool.java
@@ -23,6 +23,8 @@ import java.util.Timer; import java.util.TimerTask; +import org.apache.cloudstack.managed.context.ManagedContextRunnable; +import org.apache.cloudstack.managed.context.ManagedContextTimerTask; import org.apache.log4j.Logger; public class VmwareContextPool { @@ -117,9 +119,9 @@ } private TimerTask getTimerTask() { - return new TimerTask() { - @Override - public void run() { + return new ManagedContextTimerTask() { + @Override + protected void runInContext() { try { // doIdleCheck();