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 2014/02/13 23:40:19 UTC

git commit: updated refs/heads/4.3-forward to 1283919

Updated Branches:
  refs/heads/4.3-forward e8f93f28f -> 1283919f0


CLOUDSTACK-6065: Fix NPE problem caused by the lack of context setup in threads from agent manager thread pool


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

Branch: refs/heads/4.3-forward
Commit: 1283919f02e2c4d2652ca18693b6cf2906b2263d
Parents: e8f93f2
Author: Kelven Yang <ke...@gmail.com>
Authored: Thu Feb 13 14:34:06 2014 -0800
Committer: Kelven Yang <ke...@gmail.com>
Committed: Thu Feb 13 14:34:06 2014 -0800

----------------------------------------------------------------------
 .../framework/jobs/AsyncJobExecutionContext.java       | 13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/1283919f/framework/jobs/src/org/apache/cloudstack/framework/jobs/AsyncJobExecutionContext.java
----------------------------------------------------------------------
diff --git a/framework/jobs/src/org/apache/cloudstack/framework/jobs/AsyncJobExecutionContext.java b/framework/jobs/src/org/apache/cloudstack/framework/jobs/AsyncJobExecutionContext.java
index 966e638..4343a4d 100644
--- a/framework/jobs/src/org/apache/cloudstack/framework/jobs/AsyncJobExecutionContext.java
+++ b/framework/jobs/src/org/apache/cloudstack/framework/jobs/AsyncJobExecutionContext.java
@@ -29,6 +29,8 @@ import org.apache.cloudstack.managed.threadlocal.ManagedThreadLocal;
 import com.cloud.exception.ConcurrentOperationException;
 import com.cloud.exception.InsufficientCapacityException;
 import com.cloud.exception.ResourceUnavailableException;
+import com.cloud.user.Account;
+import com.cloud.user.User;
 
 public class AsyncJobExecutionContext  {
     private static final Logger s_logger = Logger.getLogger(AsyncJobExecutionContext.class);
@@ -167,10 +169,15 @@ public class AsyncJobExecutionContext  {
 	public static AsyncJobExecutionContext getCurrentExecutionContext() {
 		AsyncJobExecutionContext context = s_currentExectionContext.get();
         if (context == null) {
-            // TODO, this has security implicitions
+            // TODO, this has security implications, operations carried from API layer should always
+            // set its context, otherwise, the fall-back here will use system security context
+            //
             s_logger.warn("Job is executed without a context, setup psudo job for the executing thread");
-            context = registerPseudoExecutionContext(CallContext.current().getCallingAccountId(),
-                    CallContext.current().getCallingUserId());
+            if (CallContext.current() != null)
+                context = registerPseudoExecutionContext(CallContext.current().getCallingAccountId(),
+                        CallContext.current().getCallingUserId());
+            else
+                context = registerPseudoExecutionContext(Account.ACCOUNT_ID_SYSTEM, User.UID_SYSTEM);
         }
 		return context;
 	}