You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by ke...@apache.org on 2013/12/07 00:49:03 UTC

git commit: updated refs/heads/4.3 to d931718

Updated Branches:
  refs/heads/4.3 3f526fb05 -> d931718ab


CLOUDSTACK-669: put system vm work under new vmsync model


Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/d931718a
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/d931718a
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/d931718a

Branch: refs/heads/4.3
Commit: d931718ab2d5149f7bbe61e137667d53ff832ca9
Parents: 3f526fb
Author: Kelven Yang <ke...@gmail.com>
Authored: Fri Dec 6 15:36:54 2013 -0800
Committer: Kelven Yang <ke...@gmail.com>
Committed: Fri Dec 6 15:48:10 2013 -0800

----------------------------------------------------------------------
 ...spring-engine-orchestration-core-context.xml | 14 +++++++--
 .../com/cloud/vm/VirtualMachineManagerImpl.java | 30 ++++++++++----------
 .../spring-server-core-managers-context.xml     |  4 ++-
 .../storage/snapshot/SnapshotSchedulerImpl.java | 12 ++++++--
 .../src/com/cloud/vm/SystemVmLoadScanner.java   | 14 +++++++--
 5 files changed, 52 insertions(+), 22 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/d931718a/engine/orchestration/resources/META-INF/cloudstack/core/spring-engine-orchestration-core-context.xml
----------------------------------------------------------------------
diff --git a/engine/orchestration/resources/META-INF/cloudstack/core/spring-engine-orchestration-core-context.xml b/engine/orchestration/resources/META-INF/cloudstack/core/spring-engine-orchestration-core-context.xml
index 880002c..0c76f00 100644
--- a/engine/orchestration/resources/META-INF/cloudstack/core/spring-engine-orchestration-core-context.xml
+++ b/engine/orchestration/resources/META-INF/cloudstack/core/spring-engine-orchestration-core-context.xml
@@ -20,11 +20,16 @@
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:context="http://www.springframework.org/schema/context"
        xmlns:aop="http://www.springframework.org/schema/aop"
+       xmlns:util="http://www.springframework.org/schema/util"
+       
        xsi:schemaLocation="http://www.springframework.org/schema/beans
                       http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
-                      http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
+                      http://www.springframework.org/schema/aop 
+                      http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
                       http://www.springframework.org/schema/context
-                      http://www.springframework.org/schema/context/spring-context-3.0.xsd"
+                      http://www.springframework.org/schema/context/spring-context-3.0.xsd
+                      http://www.springframework.org/schema/util
+                      http://www.springframework.org/schema/util/spring-util-3.0.xsd"
                       >
 
     <bean id="clusterBasedAgentLoadBalancerPlanner"
@@ -68,5 +73,10 @@
     <bean id="virtualMachineEntityImpl" class="org.apache.cloudstack.engine.cloud.entity.api.VirtualMachineEntityImpl" />
     
     <bean id="virtualMachinePowerStateSyncImpl" class="com.cloud.vm.VirtualMachinePowerStateSyncImpl" />
+    <bean id= "vmWorkJobDispatcher" class="com.cloud.vm.VmWorkJobDispatcher">
+        <property name="name">
+            <util:constant static-field="com.cloud.vm.VmWorkJobDispatcher.VM_WORK_JOB_DISPATCHER"/>
+        </property>
+    </bean>
     
 </beans>

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/d931718a/engine/orchestration/src/com/cloud/vm/VirtualMachineManagerImpl.java
----------------------------------------------------------------------
diff --git a/engine/orchestration/src/com/cloud/vm/VirtualMachineManagerImpl.java b/engine/orchestration/src/com/cloud/vm/VirtualMachineManagerImpl.java
index 164457a..841721d 100755
--- a/engine/orchestration/src/com/cloud/vm/VirtualMachineManagerImpl.java
+++ b/engine/orchestration/src/com/cloud/vm/VirtualMachineManagerImpl.java
@@ -4122,6 +4122,10 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
     	return null;
     }
     
+    //
+    // TODO build a common pattern to reduce code duplication in following methods
+    // no time for this at current iteration
+    //
     public Outcome<VirtualMachine> startVmThroughJobQueue(final String vmUuid, 
     	final Map<VirtualMachineProfile.Param, Object> params, 
     	final DeploymentPlan planToDeploy) {
@@ -4166,7 +4170,7 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
     	        
 	            // Transaction syntax sugar has a cost here
 	            context.putContextParameter("workJob", workJob);
-	            context.putContextParameter("jobId", new Long(vm.getId()));
+	            context.putContextParameter("jobId", new Long(workJob.getId()));
     		}
     	});
     	
@@ -4216,7 +4220,7 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
 		    	}
 		        
 	            context.putContextParameter("workJob", workJob);
-	            context.putContextParameter("jobId", new Long(vm.getId()));
+	            context.putContextParameter("jobId", new Long(workJob.getId()));
     		}
 		});
 
@@ -4268,7 +4272,7 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
 		    	}
 		        
 	            context.putContextParameter("workJob", workJob);
-	            context.putContextParameter("jobId", new Long(vm.getId()));
+	            context.putContextParameter("jobId", new Long(workJob.getId()));
     		}
 		});
 
@@ -4318,7 +4322,7 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
 		            _jobMgr.submitAsyncJob(workJob, VmWorkJobDispatcher.VM_WORK_QUEUE, vm.getId());
 		        }
 	            context.putContextParameter("workJob", workJob);
-	            context.putContextParameter("jobId", new Long(vm.getId()));
+	            context.putContextParameter("jobId", new Long(workJob.getId()));
 	    	}
     	});
     	
@@ -4372,7 +4376,7 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
 		            _jobMgr.submitAsyncJob(workJob, VmWorkJobDispatcher.VM_WORK_QUEUE, vm.getId());
 		        }
 	            context.putContextParameter("workJob", workJob);
-	            context.putContextParameter("jobId", new Long(vm.getId()));
+	            context.putContextParameter("jobId", new Long(workJob.getId()));
 	    	}
     	});
     	
@@ -4383,10 +4387,6 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
         	VirtualMachine.PowerState.PowerOn, vm.getId(), destHostId);
     }
     
-    //
-    // TODO build a common pattern to reduce code duplication in following methods
-    // no time for this at current iteration
-    //
     public Outcome<VirtualMachine> migrateVmForScaleThroughJobQueue(
     	final String vmUuid, final long srcHostId, final DeployDestination dest, final Long newSvcOfferingId) {
     	
@@ -4429,7 +4429,7 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
 		            _jobMgr.submitAsyncJob(workJob, VmWorkJobDispatcher.VM_WORK_QUEUE, vm.getId());
 		        }
 	            context.putContextParameter("workJob", workJob);
-	            context.putContextParameter("jobId", new Long(vm.getId()));
+	            context.putContextParameter("jobId", new Long(workJob.getId()));
 	    	}
     	});
     	
@@ -4481,7 +4481,7 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
 		            _jobMgr.submitAsyncJob(workJob, VmWorkJobDispatcher.VM_WORK_QUEUE, vm.getId());
 		        }
 	            context.putContextParameter("workJob", workJob);
-	            context.putContextParameter("jobId", new Long(vm.getId()));
+	            context.putContextParameter("jobId", new Long(workJob.getId()));
 	    	}
     	});
     	
@@ -4531,7 +4531,7 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
 		            _jobMgr.submitAsyncJob(workJob, VmWorkJobDispatcher.VM_WORK_QUEUE, vm.getId());
 		        }
 	            context.putContextParameter("workJob", workJob);
-	            context.putContextParameter("jobId", new Long(vm.getId()));
+	            context.putContextParameter("jobId", new Long(workJob.getId()));
 	    	}
     	});
     	
@@ -4581,7 +4581,7 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
 		            _jobMgr.submitAsyncJob(workJob, VmWorkJobDispatcher.VM_WORK_QUEUE, vm.getId());
 		        }
 	            context.putContextParameter("workJob", workJob);
-	            context.putContextParameter("jobId", new Long(vm.getId()));
+	            context.putContextParameter("jobId", new Long(workJob.getId()));
 	    	}
     	});
     	
@@ -4631,7 +4631,7 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
 		            _jobMgr.submitAsyncJob(workJob, VmWorkJobDispatcher.VM_WORK_QUEUE, vm.getId());
 		        }
 	            context.putContextParameter("workJob", workJob);
-	            context.putContextParameter("jobId", new Long(vm.getId()));
+	            context.putContextParameter("jobId", new Long(workJob.getId()));
 	    	}
     	});
     	
@@ -4683,7 +4683,7 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
 		            _jobMgr.submitAsyncJob(workJob, VmWorkJobDispatcher.VM_WORK_QUEUE, vm.getId());
 		        }
 	            context.putContextParameter("workJob", workJob);
-	            context.putContextParameter("jobId", new Long(vm.getId()));
+	            context.putContextParameter("jobId", new Long(workJob.getId()));
 	    	}
     	});
     	

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/d931718a/server/resources/META-INF/cloudstack/core/spring-server-core-managers-context.xml
----------------------------------------------------------------------
diff --git a/server/resources/META-INF/cloudstack/core/spring-server-core-managers-context.xml b/server/resources/META-INF/cloudstack/core/spring-server-core-managers-context.xml
index 2a080f9..bcb218a 100644
--- a/server/resources/META-INF/cloudstack/core/spring-server-core-managers-context.xml
+++ b/server/resources/META-INF/cloudstack/core/spring-server-core-managers-context.xml
@@ -158,7 +158,9 @@
 
     <bean id="snapshotManagerImpl" class="com.cloud.storage.snapshot.SnapshotManagerImpl" />
 
-    <bean id="snapshotSchedulerImpl" class="com.cloud.storage.snapshot.SnapshotSchedulerImpl" />
+    <bean id="snapshotSchedulerImpl" class="com.cloud.storage.snapshot.SnapshotSchedulerImpl" >
+        <property name="asyncJobDispatcher" ref="ApiAsyncJobDispatcher" />
+    </bean>
     <bean id="storageNetworkManagerImpl" class="com.cloud.network.StorageNetworkManagerImpl" />
     <bean id="taggedResourceManagerImpl" class="com.cloud.tags.TaggedResourceManagerImpl" />
     <bean id="resourceMetaDataManagerImpl" class="com.cloud.metadata.ResourceMetaDataManagerImpl" />

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/d931718a/server/src/com/cloud/storage/snapshot/SnapshotSchedulerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/storage/snapshot/SnapshotSchedulerImpl.java b/server/src/com/cloud/storage/snapshot/SnapshotSchedulerImpl.java
index a113558..1f1c8aa 100644
--- a/server/src/com/cloud/storage/snapshot/SnapshotSchedulerImpl.java
+++ b/server/src/com/cloud/storage/snapshot/SnapshotSchedulerImpl.java
@@ -72,8 +72,8 @@ public class SnapshotSchedulerImpl extends ManagerBase implements SnapshotSchedu
 
     @Inject
     protected AsyncJobDao _asyncJobDao;
-    @Inject
     protected AsyncJobDispatcher _asyncDispatcher;
+    
     @Inject protected SnapshotDao             _snapshotDao;
     @Inject protected SnapshotScheduleDao     _snapshotScheduleDao;
     @Inject protected SnapshotPolicyDao       _snapshotPolicyDao;
@@ -86,7 +86,15 @@ public class SnapshotSchedulerImpl extends ManagerBase implements SnapshotSchedu
     private Timer      _testClockTimer;
     private Date       _currentTimestamp;
     private TestClock  _testTimerTask;
-
+    
+    public AsyncJobDispatcher getAsyncJobDispatcher() {
+    	return _asyncDispatcher;
+    }
+    
+    public void setAsyncJobDispatcher(AsyncJobDispatcher dispatcher) {
+    	_asyncDispatcher = dispatcher;
+    }
+    
     private Date getNextScheduledTime(long policyId, Date currentTimestamp) {
         SnapshotPolicyVO policy = _snapshotPolicyDao.findById(policyId);
         Date nextTimestamp = null;

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/d931718a/server/src/com/cloud/vm/SystemVmLoadScanner.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/vm/SystemVmLoadScanner.java b/server/src/com/cloud/vm/SystemVmLoadScanner.java
index 6e55216..1141664 100644
--- a/server/src/com/cloud/vm/SystemVmLoadScanner.java
+++ b/server/src/com/cloud/vm/SystemVmLoadScanner.java
@@ -21,6 +21,8 @@ import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.TimeUnit;
 
 import org.apache.log4j.Logger;
+import org.apache.cloudstack.context.CallContext;
+import org.apache.cloudstack.framework.jobs.AsyncJobExecutionContext;
 import org.apache.cloudstack.managed.context.ManagedContextRunnable;
 
 import com.cloud.utils.Pair;
@@ -40,7 +42,7 @@ public class SystemVmLoadScanner<T> {
     private final SystemVmLoadScanHandler<T> _scanHandler;
     private final ScheduledExecutorService _capacityScanScheduler;
     private final GlobalLock _capacityScanLock;
-
+    
     public SystemVmLoadScanner(SystemVmLoadScanHandler<T> scanHandler) {
         _scanHandler = scanHandler;
         _capacityScanScheduler = Executors.newScheduledThreadPool(1, new NamedThreadFactory(scanHandler.getScanHandlerName()));
@@ -67,8 +69,16 @@ public class SystemVmLoadScanner<T> {
 
             @Override
             protected void runInContext() {
-                try {
+            	try {
+                	CallContext callContext = CallContext.current();
+                	assert(callContext != null);
+                	
+                	AsyncJobExecutionContext.registerPseudoExecutionContext(
+                		callContext.getCallingAccountId(), callContext.getCallingUserId());
+            		
                     reallyRun();
+                    
+                    AsyncJobExecutionContext.unregister();
                 } catch (Throwable e) {
                     s_logger.warn("Unexpected exception " + e.getMessage(), e);
                 }