Updated Branches:
  refs/heads/vmsync b8261b870 -> 688b047c2

Made it all work on startup


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

Branch: refs/heads/vmsync
Commit: 688b047c2a666388c0627f62a8aab212bdd1d9a0
Parents: b8261b8
Author: Alex Huang <alex.hu...@gmail.com>
Authored: Mon Jun 3 17:10:28 2013 -0700
Committer: Alex Huang <alex.hu...@gmail.com>
Committed: Mon Jun 3 17:10:28 2013 -0700

----------------------------------------------------------------------
 .../exception/ConcurrentOperationException.java    |    4 ++
 .../org/apache/cloudstack/context/CallContext.java |    2 +-
 client/tomcatconf/applicationContext.xml.in        |    1 -
 .../apache/cloudstack/framework/jobs/AsyncJob.java |    3 +
 .../src/com/cloud/async/AsyncJobManagerImpl.java   |    1 -
 .../src/com/cloud/servlet/CloudStartupServlet.java |   18 +++++++-
 .../com/cloud/vm/VirtualMachineManagerImpl.java    |   34 ++++++++------
 server/src/com/cloud/vm/VmWorkConstants.java       |   28 ------------
 server/src/com/cloud/vm/VmWorkJobDispatcher.java   |    9 +++-
 .../com/cloud/vm/VmWorkTestApiJobDispatcher.java   |    6 +-
 10 files changed, 52 insertions(+), 54 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/688b047c/api/src/com/cloud/exception/ConcurrentOperationException.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/exception/ConcurrentOperationException.java 
b/api/src/com/cloud/exception/ConcurrentOperationException.java
index cfe6ba3..71d6302 100644
--- a/api/src/com/cloud/exception/ConcurrentOperationException.java
+++ b/api/src/com/cloud/exception/ConcurrentOperationException.java
@@ -25,4 +25,8 @@ public class ConcurrentOperationException extends 
CloudException {
     public ConcurrentOperationException(String msg) {
         super(msg);
     }
+
+    public ConcurrentOperationException(String msg, Throwable cause) {
+        super(msg, cause);
+    }
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/688b047c/api/src/org/apache/cloudstack/context/CallContext.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/context/CallContext.java 
b/api/src/org/apache/cloudstack/context/CallContext.java
index 11336f7..d0eaa25 100644
--- a/api/src/org/apache/cloudstack/context/CallContext.java
+++ b/api/src/org/apache/cloudstack/context/CallContext.java
@@ -29,7 +29,7 @@ import com.cloud.user.User;
 import com.cloud.utils.exception.CloudRuntimeException;
 
 /**
- * Calling Context records information about who is making this call.  This
+ * CallContext records information about the environment the call is made.  
This
  * class must be always be available in all CloudStack code.  Every thread
  * entry point must set the context and remove it when the thread finishes.
  */

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/688b047c/client/tomcatconf/applicationContext.xml.in
----------------------------------------------------------------------
diff --git a/client/tomcatconf/applicationContext.xml.in 
b/client/tomcatconf/applicationContext.xml.in
index 9cece35..bc443bc 100644
--- a/client/tomcatconf/applicationContext.xml.in
+++ b/client/tomcatconf/applicationContext.xml.in
@@ -768,7 +768,6 @@
   <bean id="templateInstallStrategyImpl" 
class="org.apache.cloudstack.storage.volume.TemplateInstallStrategyImpl" />
   <bean id="unknown" 
class="org.apache.cloudstack.storage.image.format.Unknown" />
   <bean id="usageEventUtils" class="com.cloud.event.UsageEventUtils" />
-  <bean id="userContextInitializer" 
class="com.cloud.user.UserContextInitializer" />
   <bean id="VHD" class="org.apache.cloudstack.storage.image.format.VHD" />
   <bean id="vMEntityManagerImpl" 
class="org.apache.cloudstack.engine.vm.VMEntityManagerImpl" />
   <bean id="virtualMachineEntityImpl" 
class="org.apache.cloudstack.engine.cloud.entity.api.VirtualMachineEntityImpl" 
/>

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/688b047c/framework/jobs/src/org/apache/cloudstack/framework/jobs/AsyncJob.java
----------------------------------------------------------------------
diff --git 
a/framework/jobs/src/org/apache/cloudstack/framework/jobs/AsyncJob.java 
b/framework/jobs/src/org/apache/cloudstack/framework/jobs/AsyncJob.java
index 35f4f3e..7a898e8 100644
--- a/framework/jobs/src/org/apache/cloudstack/framework/jobs/AsyncJob.java
+++ b/framework/jobs/src/org/apache/cloudstack/framework/jobs/AsyncJob.java
@@ -69,6 +69,7 @@ public interface AsyncJob extends Job {
 
     @Override
     Long getInitMsid();
+
     void setInitMsid(Long msid);
 
     @Override
@@ -76,6 +77,7 @@ public interface AsyncJob extends Job {
     
     @Override
     Long getCompleteMsid();
+
     void setCompleteMsid(Long msid);
 
     @Override
@@ -98,5 +100,6 @@ public interface AsyncJob extends Job {
     String getShortUuid();
 
     SyncQueueItem getSyncSource();
+
     void setSyncSource(SyncQueueItem item);
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/688b047c/server/src/com/cloud/async/AsyncJobManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/async/AsyncJobManagerImpl.java 
b/server/src/com/cloud/async/AsyncJobManagerImpl.java
index 8251f69..bedeb43 100644
--- a/server/src/com/cloud/async/AsyncJobManagerImpl.java
+++ b/server/src/com/cloud/async/AsyncJobManagerImpl.java
@@ -199,7 +199,6 @@ public class AsyncJobManagerImpl extends ManagerBase 
implements AsyncJobManager,
             txt.commit();
             return job.getId();
         } catch(Exception e) {
-            txt.rollback();
             String errMsg = "Unable to schedule async job for command " + 
job.getCmd() + ", unexpected exception.";
             s_logger.warn(errMsg, e);
             throw new CloudRuntimeException(errMsg);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/688b047c/server/src/com/cloud/servlet/CloudStartupServlet.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/servlet/CloudStartupServlet.java 
b/server/src/com/cloud/servlet/CloudStartupServlet.java
index 2cabe15..d8ddc8a 100755
--- a/server/src/com/cloud/servlet/CloudStartupServlet.java
+++ b/server/src/com/cloud/servlet/CloudStartupServlet.java
@@ -26,12 +26,18 @@ import javax.servlet.http.HttpServlet;
 import org.apache.log4j.Logger;
 import org.springframework.web.context.support.SpringBeanAutowiringSupport;
 
+import org.apache.cloudstack.context.CallContext;
+
+import com.cloud.user.Account;
+import com.cloud.user.AccountVO;
+import com.cloud.user.User;
+import com.cloud.user.UserVO;
 import com.cloud.utils.LogUtils;
 import com.cloud.utils.SerialVersionUID;
 import com.cloud.utils.component.ComponentContext;
 
 public class CloudStartupServlet extends HttpServlet {
-    public static final Logger s_logger = 
Logger.getLogger(CloudStartupServlet.class.getName());
+    public static final Logger s_logger = 
Logger.getLogger(CloudStartupServlet.class);
     static final long serialVersionUID = SerialVersionUID.CloudStartupServlet;
     
     Timer _timer = new Timer();
@@ -39,12 +45,20 @@ public class CloudStartupServlet extends HttpServlet {
     @Override
     public void init(ServletConfig config) throws ServletException {
        LogUtils.initLog4j("log4j-cloud.xml");
-       SpringBeanAutowiringSupport.processInjectionBasedOnServletContext(this, 
config.getServletContext());            
+       SpringBeanAutowiringSupport.processInjectionBasedOnServletContext(this, 
config.getServletContext());
        
        // wait when condition is ready for initialization
        _timer.scheduleAtFixedRate(new TimerTask() {
                        @Override
                        public void run() {
+                AccountVO account = new AccountVO(Account.ACCOUNT_ID_SYSTEM);
+                UserVO user = new UserVO(User.UID_SYSTEM);
+                try {
+                    CallContext.register(user, account, null);
+                } catch (Exception e) {
+                    s_logger.error("Unable to initialize call context", e);
+                    System.exit(1);
+                }
                                if(ComponentContext.getApplicationContext() != 
null) {
                                        _timer.cancel();
                                        
ComponentContext.initComponentsLifeCycle();

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/688b047c/server/src/com/cloud/vm/VirtualMachineManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/vm/VirtualMachineManagerImpl.java 
b/server/src/com/cloud/vm/VirtualMachineManagerImpl.java
index 2d744c8..db6ae65 100755
--- a/server/src/com/cloud/vm/VirtualMachineManagerImpl.java
+++ b/server/src/com/cloud/vm/VirtualMachineManagerImpl.java
@@ -35,6 +35,7 @@ import javax.naming.ConfigurationException;
 import org.apache.log4j.Logger;
 
 import org.apache.cloudstack.affinity.dao.AffinityGroupVMMapDao;
+import org.apache.cloudstack.context.CallContext;
 import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager;
 import org.apache.cloudstack.engine.subsystem.api.storage.StoragePoolAllocator;
 import org.apache.cloudstack.engine.subsystem.api.storage.VolumeDataFactory;
@@ -720,8 +721,12 @@ public class VirtualMachineManagerImpl extends ManagerBase 
implements VirtualMac
     
     @Override
     @DB
-    public void advanceStart(String vmUuid, Map<VirtualMachineProfile.Param, 
Object> params, User caller, Account account, DeploymentPlan planToDeploy)
+    public void advanceStart(String vmUuid, Map<VirtualMachineProfile.Param, 
Object> params, User callingUser, Account callingAccount, DeploymentPlan 
planToDeploy)
         throws InsufficientCapacityException, ConcurrentOperationException, 
ResourceUnavailableException {
+        CallContext context = CallContext.current();
+        callingUser = context.getCallingUser();
+        callingAccount = context.getCallingAccount();
+
         final VMInstanceVO vm = _vmDao.findByUuid(vmUuid);
        
        VmWorkJobVO workJob = null;
@@ -732,7 +737,7 @@ public class VirtualMachineManagerImpl extends ManagerBase 
implements VirtualMac
                _vmDao.lockRow(vm.getId(), true);
                
                List<VmWorkJobVO> pendingWorkJobs = 
_workJobDao.listPendingWorkJobs(
-                       VirtualMachine.Type.Instance, vm.getId(), 
VmWorkConstants.VM_WORK_START);
+                    VirtualMachine.Type.Instance, vm.getId(), 
VmWorkJobDispatcher.Start);
                
                if(pendingWorkJobs != null && pendingWorkJobs.size() > 0) {
                        assert(pendingWorkJobs.size() == 1);
@@ -740,32 +745,31 @@ public class VirtualMachineManagerImpl extends 
ManagerBase implements VirtualMac
                } else {
                        workJob = new VmWorkJobVO();
                
-                       
workJob.setDispatcher(VmWorkConstants.VM_WORK_JOB_DISPATCHER);
-                       workJob.setCmd(VmWorkConstants.VM_WORK_START);
+                
workJob.setDispatcher(VmWorkJobDispatcher.VM_WORK_JOB_DISPATCHER);
+                workJob.setCmd(VmWorkJobDispatcher.Start);
                        
-                       workJob.setAccountId(account.getId());
-                       workJob.setUserId(caller.getId());
+                workJob.setAccountId(callingAccount.getId());
+                       workJob.setUserId(callingUser.getId());
                        workJob.setStep(VmWorkJobVO.Step.Starting);
                        workJob.setVmType(vm.getType());
                        workJob.setVmInstanceId(vm.getId());
 
                        // save work context info (there are some duplications)
                        VmWorkStart workInfo = new VmWorkStart();
-                       workInfo.setAccountId(account.getId());
-                       workInfo.setUserId(caller.getId());
+                workInfo.setAccountId(callingAccount.getId());
+                       workInfo.setUserId(callingUser.getId());
                        workInfo.setVmId(vm.getId());
                        workInfo.setPlan(planToDeploy);
                        workInfo.setParams(params);
                        
workJob.setCmdInfo(ApiSerializerHelper.toSerializedString(workInfo));
                        
-                       _jobMgr.submitAsyncJob(workJob, 
VmWorkConstants.VM_WORK_QUEUE, vm.getId());
+                _jobMgr.submitAsyncJob(workJob, 
VmWorkJobDispatcher.VM_WORK_QUEUE, vm.getId());
                }
        
                txn.commit();
        } catch(Throwable e) {
                s_logger.error("Unexpected exception", e);
-               txn.rollback();
-               throw new ConcurrentOperationException("Unhandled exception, 
converted to ConcurrentOperationException");
+            throw new ConcurrentOperationException("Unhandled exception, 
converted to ConcurrentOperationException", e);
        }
 
        final long jobId = workJob.getId();
@@ -1186,7 +1190,7 @@ public class VirtualMachineManagerImpl extends 
ManagerBase implements VirtualMac
                _vmDao.lockRow(vm.getId(), true);
                
                List<VmWorkJobVO> pendingWorkJobs = 
_workJobDao.listPendingWorkJobs(
-                       VirtualMachine.Type.Instance, vm.getId(), 
VmWorkConstants.VM_WORK_STOP);
+                    VirtualMachine.Type.Instance, vm.getId(), 
VmWorkJobDispatcher.Start);
                
                if(pendingWorkJobs != null && pendingWorkJobs.size() > 0) {
                        assert(pendingWorkJobs.size() == 1);
@@ -1194,8 +1198,8 @@ public class VirtualMachineManagerImpl extends 
ManagerBase implements VirtualMac
                } else {
                        workJob = new VmWorkJobVO();
                
-                       
workJob.setDispatcher(VmWorkConstants.VM_WORK_JOB_DISPATCHER);
-                       workJob.setCmd(VmWorkConstants.VM_WORK_STOP);
+                
workJob.setDispatcher(VmWorkJobDispatcher.VM_WORK_JOB_DISPATCHER);
+                workJob.setCmd(VmWorkJobDispatcher.Stop);
                        
                        workJob.setAccountId(account.getId());
                        workJob.setUserId(user.getId());
@@ -1211,7 +1215,7 @@ public class VirtualMachineManagerImpl extends 
ManagerBase implements VirtualMac
                        workInfo.setForceStop(forced);
                        
workJob.setCmdInfo(ApiSerializerHelper.toSerializedString(workInfo));
                        
-                       _jobMgr.submitAsyncJob(workJob, 
VmWorkConstants.VM_WORK_QUEUE, vm.getId());
+                _jobMgr.submitAsyncJob(workJob, 
VmWorkJobDispatcher.VM_WORK_QUEUE, vm.getId());
                }
        
                txn.commit();

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/688b047c/server/src/com/cloud/vm/VmWorkConstants.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/vm/VmWorkConstants.java 
b/server/src/com/cloud/vm/VmWorkConstants.java
deleted file mode 100644
index eb6ddc1..0000000
--- a/server/src/com/cloud/vm/VmWorkConstants.java
+++ /dev/null
@@ -1,28 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.vm;
-
-public interface VmWorkConstants {
-       // VmWork queue name
-       public static final String VM_WORK_QUEUE = "VmWorkJobQueue";
-       public static final String VM_WORK_JOB_DISPATCHER = 
"VmWorkJobDispatcher";
-       public static final String VM_WORK_JOB_WAKEUP_DISPATCHER = 
"VmWorkJobWakeupDispatcher";
-       
-       // work job commands
-       public static final String VM_WORK_START = "vmWorkStart";
-       public static final String VM_WORK_STOP = "vmWorkStop";
-}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/688b047c/server/src/com/cloud/vm/VmWorkJobDispatcher.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/vm/VmWorkJobDispatcher.java 
b/server/src/com/cloud/vm/VmWorkJobDispatcher.java
index edc701d..c37e65d 100644
--- a/server/src/com/cloud/vm/VmWorkJobDispatcher.java
+++ b/server/src/com/cloud/vm/VmWorkJobDispatcher.java
@@ -35,6 +35,12 @@ import com.cloud.vm.dao.VMInstanceDao;
 public class VmWorkJobDispatcher extends AdapterBase implements 
AsyncJobDispatcher {
     private static final Logger s_logger = 
Logger.getLogger(VmWorkJobDispatcher.class);
 
+    public static final String VM_WORK_QUEUE = "VmWorkJobQueue";
+    public static final String VM_WORK_JOB_DISPATCHER = "VmWorkJobDispatcher";
+    public static final String VM_WORK_JOB_WAKEUP_DISPATCHER = 
"VmWorkJobWakeupDispatcher";
+    public final static String Start = "start";
+    public final static String Stop = "stop";
+
        @Inject private VirtualMachineManager _vmMgr;
        @Inject private AsyncJobManager _asyncJobMgr;
     @Inject private AccountDao _accountDao;
@@ -42,9 +48,6 @@ public class VmWorkJobDispatcher extends AdapterBase 
implements AsyncJobDispatch
     @Inject
     private EntityManager _entityMgr;
     
-    public final static String Start = "start";
-    public final static String Stop = "stop";
-
        @Override
     public void runJob(AsyncJob job) {
         try {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/688b047c/server/test/com/cloud/vm/VmWorkTestApiJobDispatcher.java
----------------------------------------------------------------------
diff --git a/server/test/com/cloud/vm/VmWorkTestApiJobDispatcher.java 
b/server/test/com/cloud/vm/VmWorkTestApiJobDispatcher.java
index 258f88d..064fab7 100644
--- a/server/test/com/cloud/vm/VmWorkTestApiJobDispatcher.java
+++ b/server/test/com/cloud/vm/VmWorkTestApiJobDispatcher.java
@@ -57,7 +57,7 @@ public class VmWorkTestApiJobDispatcher extends AdapterBase 
implements AsyncJobD
                VmWorkJobVO workJob = new VmWorkJobVO();
        
                workJob.setDispatcher("TestWorkJobDispatcher");
-               workJob.setCmd(VmWorkConstants.VM_WORK_START);
+        workJob.setCmd(VmWorkJobDispatcher.Start);
                
                workJob.setAccountId(1L);
                workJob.setUserId(1L);
@@ -74,10 +74,10 @@ public class VmWorkTestApiJobDispatcher extends AdapterBase 
implements AsyncJobD
                workInfo.setParams(null);
                
workJob.setCmdInfo(ApiSerializerHelper.toSerializedString(workInfo));
                
-               _jobMgr.submitAsyncJob(workJob, VmWorkConstants.VM_WORK_QUEUE, 
1L);
+        _jobMgr.submitAsyncJob(workJob, VmWorkJobDispatcher.VM_WORK_QUEUE, 1L);
                
                _jobMgr.joinJob(job.getId(), workJob.getId(), 
"processVmStartWakeup",
-                               VmWorkConstants.VM_WORK_JOB_WAKEUP_DISPATCHER,
+                VmWorkJobDispatcher.VM_WORK_JOB_WAKEUP_DISPATCHER,
                                new String[] {},
                                3000, 120000);
                
AsyncJobExecutionContext.getCurrentExecutionContext().resetSyncSource();

Reply via email to