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

This commit is contained in:
Kelven Yang 2014-02-13 14:34:06 -08:00
parent e8f93f28fc
commit 1283919f02
1 changed files with 10 additions and 3 deletions

View File

@ -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;
}