You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by mc...@apache.org on 2013/01/17 06:58:29 UTC

[10/16] Clean up ApiServer, ApiServlet and ApiDispatcher in handling various exceptions, and Introduced ApiErrorCode to handle CloudStack API error code to standard Http code mapping.

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/bdcfa191/server/src/com/cloud/api/commands/AddTrafficMonitorCmd.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/api/commands/AddTrafficMonitorCmd.java b/server/src/com/cloud/api/commands/AddTrafficMonitorCmd.java
index fdbbbe4..cdf83ae 100644
--- a/server/src/com/cloud/api/commands/AddTrafficMonitorCmd.java
+++ b/server/src/com/cloud/api/commands/AddTrafficMonitorCmd.java
@@ -97,9 +97,9 @@ public class AddTrafficMonitorCmd extends BaseCmd {
 			response.setResponseName(getCommandName());
 			this.setResponseObject(response);
 		} catch (InvalidParameterValueException ipve) {
-			throw new ServerApiException(BaseCmd.PARAM_ERROR, ipve.getMessage());
+			throw new ServerApiException(ApiErrorCode.PARAM_ERROR, ipve.getMessage());
 		} catch (CloudRuntimeException cre) {
-			throw new ServerApiException(BaseCmd.INTERNAL_ERROR, cre.getMessage());
+			throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, cre.getMessage());
 		}
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/bdcfa191/server/src/com/cloud/api/commands/DeleteTrafficMonitorCmd.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/api/commands/DeleteTrafficMonitorCmd.java b/server/src/com/cloud/api/commands/DeleteTrafficMonitorCmd.java
index 4c7d3a7..d39323a 100644
--- a/server/src/com/cloud/api/commands/DeleteTrafficMonitorCmd.java
+++ b/server/src/com/cloud/api/commands/DeleteTrafficMonitorCmd.java
@@ -20,6 +20,7 @@ import org.apache.cloudstack.api.response.HostResponse;
 import org.apache.log4j.Logger;
 
 import org.apache.cloudstack.api.ApiConstants;
+import org.apache.cloudstack.api.ApiErrorCode;
 import org.apache.cloudstack.api.BaseCmd;
 import org.apache.cloudstack.api.APICommand;
 import org.apache.cloudstack.api.Parameter;
@@ -33,25 +34,25 @@ import com.cloud.utils.component.ComponentLocator;
 
 @APICommand(name = "deleteTrafficMonitor", description="Deletes an traffic monitor host.", responseObject = SuccessResponse.class)
 public class DeleteTrafficMonitorCmd extends BaseCmd {
-	public static final Logger s_logger = Logger.getLogger(DeleteTrafficMonitorCmd.class.getName());	
-	private static final String s_name = "deletetrafficmonitorresponse";	
-	
+	public static final Logger s_logger = Logger.getLogger(DeleteTrafficMonitorCmd.class.getName());
+	private static final String s_name = "deletetrafficmonitorresponse";
+
 	/////////////////////////////////////////////////////
     //////////////// API parameters /////////////////////
     /////////////////////////////////////////////////////
-	
+
 	@Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType = HostResponse.class,
             required = true, description="Id of the Traffic Monitor Host.")
 	private Long id;
-	
+
 	///////////////////////////////////////////////////
 	/////////////////// Accessors ///////////////////////
 	/////////////////////////////////////////////////////
-	 
+
 	public Long getId() {
 		return id;
 	}
-	 
+
 	/////////////////////////////////////////////////////
 	/////////////// API Implementation///////////////////
 	/////////////////////////////////////////////////////
@@ -60,12 +61,12 @@ public class DeleteTrafficMonitorCmd extends BaseCmd {
 	public String getCommandName() {
 		return s_name;
 	}
-	
+
 	@Override
     public long getEntityOwnerId() {
         return Account.ACCOUNT_ID_SYSTEM;
     }
-	 
+
 	@Override
     public void execute(){
 		try {
@@ -77,10 +78,10 @@ public class DeleteTrafficMonitorCmd extends BaseCmd {
 			response.setResponseName(getCommandName());
 			this.setResponseObject(response);
 			} else {
-				throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete traffic monitor.");
+				throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete traffic monitor.");
 			}
 		} catch (InvalidParameterValueException e) {
-			throw new ServerApiException(BaseCmd.PARAM_ERROR, "Failed to delete traffic monitor.");
+			throw new ServerApiException(ApiErrorCode.PARAM_ERROR, "Failed to delete traffic monitor.");
 		}
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/bdcfa191/server/src/com/cloud/api/commands/GenerateUsageRecordsCmd.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/api/commands/GenerateUsageRecordsCmd.java b/server/src/com/cloud/api/commands/GenerateUsageRecordsCmd.java
index aa3c082..4206cf8 100644
--- a/server/src/com/cloud/api/commands/GenerateUsageRecordsCmd.java
+++ b/server/src/com/cloud/api/commands/GenerateUsageRecordsCmd.java
@@ -85,7 +85,7 @@ public class GenerateUsageRecordsCmd extends BaseCmd {
             SuccessResponse response = new SuccessResponse(getCommandName());
             this.setResponseObject(response);
         } else {
-            throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to generate usage records");
+            throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to generate usage records");
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/bdcfa191/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 7bf5c5a..05d305e 100644
--- a/server/src/com/cloud/async/AsyncJobManagerImpl.java
+++ b/server/src/com/cloud/async/AsyncJobManagerImpl.java
@@ -41,6 +41,8 @@ import org.apache.log4j.NDC;
 import com.cloud.api.ApiDispatcher;
 import com.cloud.api.ApiGsonHelper;
 import com.cloud.api.ApiSerializerHelper;
+
+import org.apache.cloudstack.api.ApiErrorCode;
 import org.apache.cloudstack.api.BaseAsyncCmd;
 import org.apache.cloudstack.api.BaseCmd;
 import org.apache.cloudstack.api.ServerApiException;
@@ -78,13 +80,13 @@ import com.google.gson.reflect.TypeToken;
 public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListener {
     public static final Logger s_logger = Logger.getLogger(AsyncJobManagerImpl.class.getName());
 	private static final int ACQUIRE_GLOBAL_LOCK_TIMEOUT_FOR_COOPERATION = 3; 	// 3 seconds
-    
+
     private static final int MAX_ONETIME_SCHEDULE_SIZE = 50;
     private static final int HEARTBEAT_INTERVAL = 2000;
     private static final int GC_INTERVAL = 10000;				// 10 seconds
-    
+
     private String _name;
-    
+
     private AsyncJobExecutorContext _context;
     private SyncQueueManager _queueMgr;
     private ClusterManager _clusterMgr;
@@ -93,7 +95,7 @@ public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListe
     private AsyncJobDao _jobDao;
     private long _jobExpireSeconds = 86400;                 // 1 day
     private long _jobCancelThresholdSeconds = 3600;         // 1 hour (for cancelling the jobs blocking other jobs)
-    
+
     private ApiDispatcher _dispatcher;
 
     private final ScheduledExecutorService _heartbeatScheduler =
@@ -104,7 +106,7 @@ public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListe
     public AsyncJobExecutorContext getExecutorContext() {
         return _context;
     }
-    
+
     @Override
     public AsyncJobVO getAsyncJob(long jobId) {
         return _jobDao.findById(jobId);
@@ -119,7 +121,7 @@ public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListe
     public List<AsyncJobVO> findInstancePendingAsyncJobs(AsyncJob.Type instanceType, Long accountId) {
     	return _jobDao.findInstancePendingAsyncJobs(instanceType, accountId);
     }
-    
+
     @Override
 	public long submitAsyncJob(AsyncJobVO job) {
     	return submitAsyncJob(job, false);
@@ -155,7 +157,7 @@ public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListe
             s_logger.debug("Complete async job-" + jobId + ", jobStatus: " + jobStatus +
     			", resultCode: " + resultCode + ", result: " + resultObject);
         }
-    	
+
     	Transaction txt = Transaction.currentTxn();
     	try {
     		txt.start();
@@ -165,7 +167,7 @@ public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListe
                     s_logger.debug("job-" + jobId + " no longer exists, we just log completion info here. " + jobStatus +
     	    			", resultCode: " + resultCode + ", result: " + resultObject);
                 }
-    			
+
     			txt.rollback();
     			return;
     		}
@@ -197,7 +199,7 @@ public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListe
             s_logger.debug("Update async-job progress, job-" + jobId + ", processStatus: " + processStatus +
     			", result: " + resultObject);
         }
-    	
+
     	Transaction txt = Transaction.currentTxn();
     	try {
     		txt.start();
@@ -206,11 +208,11 @@ public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListe
     	    	if(s_logger.isDebugEnabled()) {
                     s_logger.debug("job-" + jobId + " no longer exists, we just log progress info here. progress status: " + processStatus);
                 }
-    			
+
     			txt.rollback();
     			return;
     		}
-    		
+
     		job.setProcessStatus(processStatus);
     		if(resultObject != null) {
                 job.setResult(ApiSerializerHelper.toSerializedStringOld(resultObject));
@@ -258,7 +260,7 @@ public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListe
         if (job.getSyncSource() != null) {
             return;
         }
-    	
+
         if(s_logger.isDebugEnabled()) {
             s_logger.debug("Sync job-" + job.getId() + " execution on object " + syncObjType + "." + syncObjId);
         }
@@ -287,7 +289,7 @@ public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListe
 		    throw new AsyncCommandQueued(queue, "job-" + job.getId() + " queued");
 		}
     }
-    
+
     @Override
     public AsyncJob queryAsyncJobResult(QueryAsyncJobResultCmd cmd) {
         Account caller = UserContext.current().getCaller();
@@ -296,10 +298,10 @@ public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListe
         if (job == null) {
             throw new InvalidParameterValueException("Unable to find a job by id " + cmd.getId());
         }
-       
+
         User userJobOwner = _accountMgr.getUserIncludingRemoved(job.getUserId());
         Account jobOwner = _accountMgr.getAccount(userJobOwner.getAccountId());
-        
+
         //check permissions
         if (caller.getType() == Account.ACCOUNT_TYPE_NORMAL) {
             //regular user can see only jobs he owns
@@ -309,7 +311,7 @@ public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListe
         } else if (caller.getType() == Account.ACCOUNT_TYPE_DOMAIN_ADMIN) {
             _accountMgr.checkAccess(caller, null, true, jobOwner);
         }
-        
+
         //poll the job
         queryAsyncJobResult(cmd.getId());
         return _jobDao.findById(cmd.getId());
@@ -320,10 +322,10 @@ public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListe
     	if(s_logger.isTraceEnabled()) {
             s_logger.trace("Query async-job status, job-" + jobId);
         }
-    	
+
     	Transaction txt = Transaction.currentTxn();
     	AsyncJobResult jobResult = new AsyncJobResult(jobId);
-    	
+
     	try {
     		txt.start();
     		AsyncJobVO job = _jobDao.findById(jobId);
@@ -334,10 +336,10 @@ public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListe
     			jobResult.setResult(job.getResult());
     			jobResult.setResultCode(job.getResultCode());
     			jobResult.setUuid(job.getUuid());
-    			
+
     			if(job.getStatus() == AsyncJobResult.STATUS_SUCCEEDED ||
     				job.getStatus() == AsyncJobResult.STATUS_FAILED) {
-    				
+
     		    	if(s_logger.isDebugEnabled()) {
                         s_logger.debug("Async job-" + jobId + " completed");
                     }
@@ -349,23 +351,23 @@ public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListe
     	    	if(s_logger.isDebugEnabled()) {
                     s_logger.debug("Async job-" + jobId + " does not exist, invalid job id?");
                 }
-    			
+
     			jobResult.setJobStatus(AsyncJobResult.STATUS_FAILED);
     			jobResult.setResult("job-" + jobId + " does not exist");
     		}
     		txt.commit();
     	} catch(Exception e) {
     		s_logger.error("Unexpected exception while querying async job-" + jobId + " status: ", e);
-    		
+
 			jobResult.setJobStatus(AsyncJobResult.STATUS_FAILED);
 			jobResult.setResult("Exception: " + e.toString());
     		txt.rollback();
     	}
-    	
+
     	if(s_logger.isTraceEnabled()) {
             s_logger.trace("Job status: " + jobResult.toString());
         }
-    	
+
     	return jobResult;
     }
 
@@ -388,66 +390,66 @@ public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListe
             public void run() {
                 try {
                     long jobId = 0;
-                    
+
                     try {
                     	JmxUtil.registerMBean("AsyncJobManager", "Active Job " + job.getId(), new AsyncJobMBeanImpl(job));
                     } catch(Exception e) {
                     	s_logger.warn("Unable to register active job " + job.getId() + " to JMX monitoring due to exception " + ExceptionUtil.toString(e));
                     }
-    
+
                     BaseAsyncCmd cmdObj = null;
                     Transaction txn = Transaction.open(Transaction.CLOUD_DB);
                     try {
                         jobId = job.getId();
                         NDC.push("job-" + jobId);
-    
+
                         if(s_logger.isDebugEnabled()) {
                             s_logger.debug("Executing " + job.getCmd() + " for job-" + jobId);
                         }
-    
+
                         Class<?> cmdClass = Class.forName(job.getCmd());
                         cmdObj = (BaseAsyncCmd)cmdClass.newInstance();
                         cmdObj.setJob(job);
-    
+
                         Type mapType = new TypeToken<Map<String, String>>() {}.getType();
                         Gson gson = ApiGsonHelper.getBuilder().create();
                         Map<String, String> params = gson.fromJson(job.getCmdInfo(), mapType);
-    
+
                         // whenever we deserialize, the UserContext needs to be updated
                         String userIdStr = params.get("ctxUserId");
                         String acctIdStr = params.get("ctxAccountId");
                         Long userId = null;
                         Account accountObject = null;
-    
+
                         if (userIdStr != null) {
                             userId = Long.parseLong(userIdStr);
                         }
-    
+
                         if (acctIdStr != null) {
                             accountObject = _accountDao.findById(Long.parseLong(acctIdStr));
                         }
-    
+
                         UserContext.registerContext(userId, accountObject, null, false);
                         try {
                             // dispatch could ultimately queue the job
                             _dispatcher.dispatch(cmdObj, params);
-        
+
                             // serialize this to the async job table
                             completeAsyncJob(jobId, AsyncJobResult.STATUS_SUCCEEDED, 0, cmdObj.getResponseObject());
                         } finally {
                             UserContext.unregisterContext();
                         }
-    
+
                         // commands might need to be queued as part of synchronization here, so they just have to be re-dispatched from the queue mechanism...
                         if (job.getSyncSource() != null) {
                             _queueMgr.purgeItem(job.getSyncSource().getId());
                             checkQueue(job.getSyncSource().getQueueId());
                         }
-    
+
                         if (s_logger.isDebugEnabled()) {
                             s_logger.debug("Done executing " + job.getCmd() + " for job-" + jobId);
                         }
-                        
+
                     } catch(Throwable e) {
                         if (e instanceof AsyncCommandQueued) {
                             if (s_logger.isDebugEnabled()) {
@@ -456,25 +458,25 @@ public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListe
                             checkQueue(((AsyncCommandQueued)e).getQueue().getId());
                         } else {
                             String errorMsg = null;
-                            int errorCode = BaseCmd.INTERNAL_ERROR;
+                            int errorCode = ApiErrorCode.INTERNAL_ERROR.getHttpCode();
                             if (!(e instanceof ServerApiException)) {
                                 s_logger.error("Unexpected exception while executing " + job.getCmd(), e);
                                 errorMsg = e.getMessage();
                             } else {
                                 ServerApiException sApiEx = (ServerApiException)e;
                                 errorMsg = sApiEx.getDescription();
-                                errorCode = sApiEx.getErrorCode();
+                                errorCode = sApiEx.getErrorCode().getHttpCode();
                             }
-    
+
                             ExceptionResponse response = new ExceptionResponse();
                             response.setErrorCode(errorCode);
                             response.setErrorText(errorMsg);
                             response.setResponseName((cmdObj == null) ? "unknowncommandresponse" : cmdObj.getCommandName());
-    
-                            // FIXME:  setting resultCode to BaseCmd.INTERNAL_ERROR is not right, usually executors have their exception handling
+
+                            // FIXME:  setting resultCode to ApiErrorCode.INTERNAL_ERROR is not right, usually executors have their exception handling
                             //         and we need to preserve that as much as possible here
-                            completeAsyncJob(jobId, AsyncJobResult.STATUS_FAILED, BaseCmd.INTERNAL_ERROR, response);
-    
+                            completeAsyncJob(jobId, AsyncJobResult.STATUS_FAILED, ApiErrorCode.INTERNAL_ERROR.getHttpCode(), response);
+
                             // need to clean up any queue that happened as part of the dispatching and move on to the next item in the queue
                             try {
                                 if (job.getSyncSource() != null) {
@@ -486,13 +488,13 @@ public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListe
                             }
                         }
                     } finally {
-                    	
+
                         try {
                         	JmxUtil.unregisterMBean("AsyncJobManager", "Active Job " + job.getId());
                         } catch(Exception e) {
                         	s_logger.warn("Unable to unregister active job " + job.getId() + " from JMX monitoring");
                         }
-                    	
+
                         StackMaid.current().exitCleanup();
                         txn.close();
                         NDC.pop();
@@ -516,17 +518,17 @@ public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListe
 
             job.setFromPreviousSession(fromPreviousSession);
             job.setSyncSource(item);
-            
+
             job.setCompleteMsid(getMsid());
             _jobDao.update(job.getId(), job);
-            
+
             try {
             	scheduleExecution(job);
 			} catch(RejectedExecutionException e) {
 				s_logger.warn("Execution for job-" + job.getId() + " is rejected, return it to the queue for next turn");
 				_queueMgr.returnItem(item.getId());
 			}
-            
+
         } else {
             if(s_logger.isDebugEnabled()) {
                 s_logger.debug("Unable to find related job for queue item: " + item.toString());
@@ -544,12 +546,12 @@ public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListe
 					+ executor.getSyncSource().getContentType() + "-"
 					+ executor.getSyncSource().getContentId());
             }
-    		
+
 			_queueMgr.purgeItem(executor.getSyncSource().getId());
 			checkQueue(executor.getSyncSource().getQueueId());
     	}
     }
-    
+
     private void checkQueue(long queueId) {
     	while(true) {
     		try {
@@ -558,7 +560,7 @@ public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListe
 		    		if(s_logger.isDebugEnabled()) {
                         s_logger.debug("Executing sync queue item: " + item.toString());
                     }
-		    		
+
 		    		executeQueueItem(item, false);
 		    	} else {
 		    		break;
@@ -569,7 +571,7 @@ public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListe
     		}
     	}
     }
-    
+
 	private Runnable getHeartbeatTask() {
 		return new Runnable() {
 			@Override
@@ -592,7 +594,7 @@ public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListe
 			}
 		};
 	}
-	
+
 	@DB
 	private Runnable getGCTask() {
 		return new Runnable() {
@@ -611,7 +613,7 @@ public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListe
                     scanLock.releaseRef();
                 }
             }
-            
+
             public void reallyRun() {
                 try {
                     s_logger.trace("Begin cleanup expired async-jobs");
@@ -649,10 +651,10 @@ public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListe
                 }
             }
 
-           
+
         };
     }
-    
+
     @DB
     protected void expungeAsyncJob(AsyncJobVO job) {
         Transaction txn = Transaction.currentTxn();
@@ -667,10 +669,10 @@ public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListe
         if(_clusterMgr != null) {
             return _clusterMgr.getManagementNodeId();
         }
-		
+
 		return MacAddress.getMacAddress().toLong();
 	}
-	
+
 	private void cleanupPendingJobs(List<SyncQueueItemVO> l) {
 		if(l != null && l.size() > 0) {
 			for(SyncQueueItemVO item: l) {
@@ -701,7 +703,7 @@ public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListe
         if (configDao == null) {
             throw new ConfigurationException("Unable to get the configuration dao.");
         }
-        
+
         int expireMinutes = NumbersUtil.parseInt(
                 configDao.getValue(Config.JobExpireMinutes.key()), 24*60);
         _jobExpireSeconds = (long)expireMinutes*60;
@@ -719,48 +721,48 @@ public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListe
 			throw new ConfigurationException("Unable to get "
 					+ AsyncJobDao.class.getName());
 		}
-		
+
 		_context = 	locator.getManager(AsyncJobExecutorContext.class);
 		if (_context == null) {
 			throw new ConfigurationException("Unable to get "
 					+ AsyncJobExecutorContext.class.getName());
 		}
-		
+
 		_queueMgr = locator.getManager(SyncQueueManager.class);
 		if(_queueMgr == null) {
 			throw new ConfigurationException("Unable to get "
 					+ SyncQueueManager.class.getName());
 		}
-		
+
 		_clusterMgr = locator.getManager(ClusterManager.class);
-		
+
 		_accountMgr = locator.getManager(AccountManager.class);
 
 		_dispatcher = ApiDispatcher.getInstance();
-		
+
 
 		try {
 	        final File dbPropsFile = PropertiesUtil.findConfigFile("db.properties");
 	        final Properties dbProps = new Properties();
 	        dbProps.load(new FileInputStream(dbPropsFile));
-	        
+
             final int cloudMaxActive = Integer.parseInt(dbProps.getProperty("db.cloud.maxActive"));
-            
+
             int poolSize = (cloudMaxActive * 2) / 3;
-            
+
             s_logger.info("Start AsyncJobManager thread pool in size " + poolSize);
             _executor = Executors.newFixedThreadPool(poolSize, new NamedThreadFactory("Job-Executor"));
 		} catch (final Exception e) {
 			throw new ConfigurationException("Unable to load db.properties to configure AsyncJobManagerImpl");
 		}
-		
+
 		return true;
     }
-    
+
     @Override
 	public void onManagementNodeJoined(List<ManagementServerHostVO> nodeList, long selfNodeId) {
     }
-    
+
     @Override
     public void onManagementNodeLeft(List<ManagementServerHostVO> nodeList, long selfNodeId) {
         for(ManagementServerHostVO msHost : nodeList) {
@@ -769,7 +771,7 @@ public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListe
                 txn.start();
                 List<SyncQueueItemVO> items = _queueMgr.getActiveQueueItems(msHost.getId(), true);
                 cleanupPendingJobs(items);
-                _jobDao.resetJobProcess(msHost.getId(), BaseCmd.INTERNAL_ERROR, getSerializedErrorMessage("job cancelled because of management server restart"));
+                _jobDao.resetJobProcess(msHost.getId(), ApiErrorCode.INTERNAL_ERROR.getHttpCode(), getSerializedErrorMessage("job cancelled because of management server restart"));
                 txn.commit();
             } catch(Throwable e) {
                 s_logger.warn("Unexpected exception ", e);
@@ -779,7 +781,7 @@ public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListe
             }
         }
     }
-    
+
     @Override
 	public void onManagementNodeIsolated() {
 	}
@@ -789,7 +791,7 @@ public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListe
         try {
             List<SyncQueueItemVO> l = _queueMgr.getActiveQueueItems(getMsid(), false);
             cleanupPendingJobs(l);
-            _jobDao.resetJobProcess(getMsid(), BaseCmd.INTERNAL_ERROR, getSerializedErrorMessage("job cancelled because of management server restart"));
+            _jobDao.resetJobProcess(getMsid(), ApiErrorCode.INTERNAL_ERROR.getHttpCode(), getSerializedErrorMessage("job cancelled because of management server restart"));
         } catch(Throwable e) {
             s_logger.error("Unexpected exception " + e.getMessage(), e);
         }
@@ -801,14 +803,14 @@ public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListe
 
         return true;
     }
-    
+
     private static ExceptionResponse getResetResultResponse(String errorMessage) {
 		ExceptionResponse resultObject = new ExceptionResponse();
-		resultObject.setErrorCode(BaseCmd.INTERNAL_ERROR);
+		resultObject.setErrorCode(ApiErrorCode.INTERNAL_ERROR.getHttpCode());
 		resultObject.setErrorText(errorMessage);
     	return resultObject;
     }
-    
+
     private static String getSerializedErrorMessage(String errorMessage) {
         return ApiSerializerHelper.toSerializedStringOld(getResetResultResponse(errorMessage));
     }
@@ -819,7 +821,7 @@ public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListe
     	_executor.shutdown();
         return true;
     }
-    
+
     @Override
     public String getName() {
     	return _name;

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/bdcfa191/utils/src/com/cloud/utils/exception/CSExceptionErrorCode.java
----------------------------------------------------------------------
diff --git a/utils/src/com/cloud/utils/exception/CSExceptionErrorCode.java b/utils/src/com/cloud/utils/exception/CSExceptionErrorCode.java
index 8f40233..e794ea5 100755
--- a/utils/src/com/cloud/utils/exception/CSExceptionErrorCode.java
+++ b/utils/src/com/cloud/utils/exception/CSExceptionErrorCode.java
@@ -37,15 +37,12 @@ public class CSExceptionErrorCode {
         try {
             ExceptionErrorCodeMap = new HashMap<String, Integer>();
             ExceptionErrorCodeMap.put("com.cloud.utils.exception.CloudRuntimeException", 4250);
-            ExceptionErrorCodeMap.put("com.cloud.utils.exception.ExceptionUtil", 4255);
             ExceptionErrorCodeMap.put("com.cloud.utils.exception.ExecutionException", 4260);
             ExceptionErrorCodeMap.put("com.cloud.utils.exception.HypervisorVersionChangedException", 4265);
-            ExceptionErrorCodeMap.put("com.cloud.utils.exception.RuntimeCloudException", 4270);
             ExceptionErrorCodeMap.put("com.cloud.exception.CloudException", 4275);
             ExceptionErrorCodeMap.put("com.cloud.exception.AccountLimitException", 4280);
             ExceptionErrorCodeMap.put("com.cloud.exception.AgentUnavailableException", 4285);
             ExceptionErrorCodeMap.put("com.cloud.exception.CloudAuthenticationException", 4290);
-            ExceptionErrorCodeMap.put("com.cloud.exception.CloudExecutionException", 4295);
             ExceptionErrorCodeMap.put("com.cloud.exception.ConcurrentOperationException", 4300);
             ExceptionErrorCodeMap.put("com.cloud.exception.ConflictingNetworkSettingsException", 4305);
             ExceptionErrorCodeMap.put("com.cloud.exception.DiscoveredWithErrorException", 4310);
@@ -66,35 +63,6 @@ public class CSExceptionErrorCode {
             ExceptionErrorCodeMap.put("com.cloud.exception.StorageUnavailableException", 4385);
             ExceptionErrorCodeMap.put("com.cloud.exception.UnsupportedServiceException", 4390);
             ExceptionErrorCodeMap.put("com.cloud.exception.VirtualMachineMigrationException", 4395);
-
-            ExceptionErrorCodeMap.put("com.cloud.exception.AccountLimitException", 4400);
-            ExceptionErrorCodeMap.put("com.cloud.exception.AgentUnavailableException", 4405);
-            ExceptionErrorCodeMap.put("com.cloud.exception.CloudAuthenticationException", 4410);
-            ExceptionErrorCodeMap.put("com.cloud.exception.CloudException", 4415);
-            ExceptionErrorCodeMap.put("com.cloud.exception.CloudExecutionException", 4420);
-            ExceptionErrorCodeMap.put("com.cloud.exception.ConcurrentOperationException", 4425);
-            ExceptionErrorCodeMap.put("com.cloud.exception.ConflictingNetworkSettingsException", 4430);
-            ExceptionErrorCodeMap.put("com.cloud.exception.ConnectionException", 4435);
-            ExceptionErrorCodeMap.put("com.cloud.exception.DiscoveredWithErrorException", 4440);
-            ExceptionErrorCodeMap.put("com.cloud.exception.DiscoveryException", 4445);
-            ExceptionErrorCodeMap.put("com.cloud.exception.HAStateException", 4450);
-            ExceptionErrorCodeMap.put("com.cloud.exception.InsufficientAddressCapacityException", 4455);
-            ExceptionErrorCodeMap.put("com.cloud.exception.InsufficientCapacityException", 4460);
-            ExceptionErrorCodeMap.put("com.cloud.exception.InsufficientNetworkCapacityException", 4465);
-            ExceptionErrorCodeMap.put("com.cloud.exception.InsufficientServerCapacityException", 4470);
-            ExceptionErrorCodeMap.put("com.cloud.exception.InsufficientStorageCapacityException", 4475);
-            ExceptionErrorCodeMap.put("com.cloud.exception.InsufficientVirtualNetworkCapcityException", 4480);
-            ExceptionErrorCodeMap.put("com.cloud.exception.InternalErrorException", 4485);
-            ExceptionErrorCodeMap.put("com.cloud.exception.InvalidParameterValueException", 4490);
-            ExceptionErrorCodeMap.put("com.cloud.exception.ManagementServerException", 4495);
-            ExceptionErrorCodeMap.put("com.cloud.exception.NetworkRuleConflictException", 4500);
-            ExceptionErrorCodeMap.put("com.cloud.exception.PermissionDeniedException", 4505);
-            ExceptionErrorCodeMap.put("com.cloud.exception.ResourceAllocationException", 4510);
-            ExceptionErrorCodeMap.put("com.cloud.exception.ResourceInUseException", 4515);
-            ExceptionErrorCodeMap.put("com.cloud.exception.ResourceUnavailableException", 4520);
-            ExceptionErrorCodeMap.put("com.cloud.exception.StorageUnavailableException", 4525);
-            ExceptionErrorCodeMap.put("com.cloud.exception.UnsupportedServiceException", 4530);
-            ExceptionErrorCodeMap.put("com.cloud.exception.VirtualMachineMigrationException", 4535);
             ExceptionErrorCodeMap.put("com.cloud.async.AsyncCommandQueued", 4540);
             ExceptionErrorCodeMap.put("com.cloud.exception.RequestLimitException", 4545);