Return-Path: X-Original-To: apmail-incubator-cloudstack-commits-archive@minotaur.apache.org Delivered-To: apmail-incubator-cloudstack-commits-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 748DBEFD1 for ; Sat, 12 Jan 2013 14:09:06 +0000 (UTC) Received: (qmail 25399 invoked by uid 500); 12 Jan 2013 14:09:05 -0000 Delivered-To: apmail-incubator-cloudstack-commits-archive@incubator.apache.org Received: (qmail 25293 invoked by uid 500); 12 Jan 2013 14:09:05 -0000 Mailing-List: contact cloudstack-commits-help@incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: cloudstack-dev@incubator.apache.org Delivered-To: mailing list cloudstack-commits@incubator.apache.org Received: (qmail 25258 invoked by uid 99); 12 Jan 2013 14:09:05 -0000 Received: from tyr.zones.apache.org (HELO tyr.zones.apache.org) (140.211.11.114) by apache.org (qpsmtpd/0.29) with ESMTP; Sat, 12 Jan 2013 14:09:05 +0000 Received: by tyr.zones.apache.org (Postfix, from userid 65534) id 546DA19A51; Sat, 12 Jan 2013 14:09:05 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: bhaisaab@apache.org To: cloudstack-commits@incubator.apache.org X-Mailer: ASF-Git Admin Mailer Subject: [31/31] git commit: Pull changes from master into javelin Message-Id: <20130112140905.546DA19A51@tyr.zones.apache.org> Date: Sat, 12 Jan 2013 14:09:05 +0000 (UTC) Updated Branches: refs/heads/javelin fdc9103fb -> 38eaa04b9 Pull changes from master into javelin - Disables simulator plugin, breaks build, available via simulator profile - Fixes spring injections - Fix api,acl plugins, ApiServer, ApiDispatcher - Fix other merge conflicts Conflicts: docs/en-US/external-firewalls-and-load-balancers.xml plugins/acl/static-role-based/src/org/apache/cloudstack/acl/StaticRoleBasedAPIAccessChecker.java server/src/com/cloud/api/ApiDispatcher.java server/src/com/cloud/api/ApiServer.java server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java utils/test/com/cloud/utils/log/CglibThrowableRendererTest.java Signed-off-by: Rohit Yadav Project: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/commit/38eaa04b Tree: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/tree/38eaa04b Diff: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/diff/38eaa04b Branch: refs/heads/javelin Commit: 38eaa04b9882f1a32f74e3e9aa556792007bbed0 Parents: fdc9103 ad063ed Author: Rohit Yadav Authored: Sat Jan 12 06:01:58 2013 -0800 Committer: Rohit Yadav Committed: Sat Jan 12 06:02:54 2013 -0800 ---------------------------------------------------------------------- api/src/com/cloud/network/NetworkService.java | 2 + api/src/com/cloud/user/DomainService.java | 2 + .../apache/cloudstack/acl/APIAccessChecker.java | 29 -- api/src/org/apache/cloudstack/acl/APIChecker.java | 27 ++ .../org/apache/cloudstack/api/ApiConstants.java | 1 + .../apache/cloudstack/api/ResponseGenerator.java | 7 - .../api/command/user/vm/DeployVMCmd.java | 17 +- .../api/command/user/volume/ExtractVolumeCmd.java | 2 +- client/tomcatconf/componentContext.xml.in | 4 +- client/tomcatconf/components.xml.in | 2 +- docs/en-US/autoscale.xml | 284 +++++++++++++++ docs/en-US/building-marvin.xml | 46 +++ docs/en-US/configure-snmp-rhel.xml | 86 +++++ .../external-firewalls-and-load-balancers.xml | 49 ++-- docs/en-US/marvin.xml | 1 + ...guration-of-external-firewalls-loadbalancer.xml | 46 +++ docs/en-US/system-service-offerings.xml | 1 + .../storage/db/ObjectInDataStoreDaoImpl.java | 5 +- .../acl/StaticRoleBasedAPIAccessChecker.java | 86 ++---- .../api/command/user/discovery/ListApisCmd.java | 22 +- .../api/response/ApiDiscoveryResponse.java | 26 ++- .../api/response/ApiParameterResponse.java | 11 + .../api/response/ApiResponseResponse.java | 45 +++ .../cloudstack/discovery/ApiDiscoveryService.java | 2 +- .../discovery/ApiDiscoveryServiceImpl.java | 160 +++++++-- plugins/pom.xml | 1 - server/src/com/cloud/api/ApiDispatcher.java | 22 +- server/src/com/cloud/api/ApiResponseHelper.java | 5 - server/src/com/cloud/api/ApiServer.java | 66 ++-- .../consoleproxy/ConsoleProxyManagerImpl.java | 39 +-- .../src/com/cloud/network/NetworkManagerImpl.java | 6 + server/src/com/cloud/user/DomainManagerImpl.java | 5 + .../com/cloud/network/MockNetworkManagerImpl.java | 6 + .../test/com/cloud/user/MockDomainManagerImpl.java | 6 + .../test/com/cloud/vpc/MockNetworkManagerImpl.java | 6 + tools/apidoc/gen_toc.py | 1 - tools/apidoc/pom.xml | 2 +- tools/devcloud-kvm/devcloud-kvm.sql | 2 +- utils/src/com/cloud/utils/db/GenericDao.java | 2 +- utils/src/com/cloud/utils/db/GenericDaoBase.java | 2 +- .../utils/log/CglibThrowableRendererTest.java | 38 ++- 41 files changed, 920 insertions(+), 252 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/38eaa04b/client/tomcatconf/componentContext.xml.in ---------------------------------------------------------------------- diff --cc client/tomcatconf/componentContext.xml.in index 44be3b6,0000000..384498f mode 100644,000000..100644 --- a/client/tomcatconf/componentContext.xml.in +++ b/client/tomcatconf/componentContext.xml.in @@@ -1,52 -1,0 +1,52 @@@ + + + + - - ++ ++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/38eaa04b/engine/storage/src/org/apache/cloudstack/storage/db/ObjectInDataStoreDaoImpl.java ---------------------------------------------------------------------- diff --cc engine/storage/src/org/apache/cloudstack/storage/db/ObjectInDataStoreDaoImpl.java index 9932b48,0000000..4b0b2ca mode 100644,000000..100644 --- a/engine/storage/src/org/apache/cloudstack/storage/db/ObjectInDataStoreDaoImpl.java +++ b/engine/storage/src/org/apache/cloudstack/storage/db/ObjectInDataStoreDaoImpl.java @@@ -1,20 -1,0 +1,19 @@@ +package org.apache.cloudstack.storage.db; - - ++import org.springframework.stereotype.Component; + +import org.apache.cloudstack.storage.volume.ObjectInDataStoreStateMachine.Event; +import org.apache.cloudstack.storage.volume.ObjectInDataStoreStateMachine.State; + +import com.cloud.utils.db.GenericDaoBase; + - ++@Component +public class ObjectInDataStoreDaoImpl extends GenericDaoBase implements ObjectInDataStoreDao { + + @Override + public boolean updateState(State currentState, Event event, + State nextState, ObjectInDataStoreVO vo, Object data) { + // TODO Auto-generated method stub + return false; + } + +} http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/38eaa04b/plugins/acl/static-role-based/src/org/apache/cloudstack/acl/StaticRoleBasedAPIAccessChecker.java ---------------------------------------------------------------------- diff --cc plugins/acl/static-role-based/src/org/apache/cloudstack/acl/StaticRoleBasedAPIAccessChecker.java index 7c69301,affd69e..2eaa6b0 --- a/plugins/acl/static-role-based/src/org/apache/cloudstack/acl/StaticRoleBasedAPIAccessChecker.java +++ b/plugins/acl/static-role-based/src/org/apache/cloudstack/acl/StaticRoleBasedAPIAccessChecker.java @@@ -27,45 -30,22 +27,37 @@@ import java.util.List import java.util.Map; import java.util.Set; +import javax.ejb.Local; +import javax.inject.Inject; +import javax.naming.ConfigurationException; + import org.apache.log4j.Logger; +import org.springframework.stereotype.Component; + ++import com.cloud.server.ManagementServer; +import com.cloud.exception.PermissionDeniedException; +import com.cloud.user.AccountManager; +import com.cloud.utils.component.AdapterBase; ++import com.cloud.utils.component.ComponentContext; +import com.cloud.utils.component.PluggableService; // This is the default API access checker that grab's the user's account // based on the account type, access is granted +@Component - @Local(value=APIAccessChecker.class) - public class StaticRoleBasedAPIAccessChecker extends AdapterBase implements APIAccessChecker { + @Local(value=APIChecker.class) + public class StaticRoleBasedAPIAccessChecker extends AdapterBase implements APIChecker { protected static final Logger s_logger = Logger.getLogger(StaticRoleBasedAPIAccessChecker.class); - public static final short ADMIN_COMMAND = 1; - public static final short DOMAIN_ADMIN_COMMAND = 4; - public static final short RESOURCE_DOMAIN_ADMIN_COMMAND = 2; - public static final short USER_COMMAND = 8; - @Inject AccountManager _accountMgr; + private static Map> s_roleBasedApisMap = + new HashMap>(); + + @Inject List _services; - private static Set s_userCommands = null; - private static Set s_resellerCommands = null; // AKA domain-admin - private static Set s_adminCommands = null; - private static Set s_resourceDomainAdminCommands = null; - private static Set s_allCommands = null; + protected StaticRoleBasedAPIAccessChecker() { super(); - s_allCommands = new HashSet(); - s_userCommands = new HashSet(); - s_resellerCommands = new HashSet(); - s_adminCommands = new HashSet(); - s_resourceDomainAdminCommands = new HashSet(); + for (RoleType roleType: RoleType.values()) + s_roleBasedApisMap.put(roleType, new HashSet()); } @Override @@@ -97,14 -61,16 +73,11 @@@ @Override public boolean configure(String name, Map params) throws ConfigurationException { super.configure(name, params); -- -- // Read command properties files to build the static map per role. - Map configPropertiesMap = new HashMap(); - ComponentLocator locator = ComponentLocator.getLocator(ManagementServer.Name); - List services = locator.getAllPluggableServices(); - services.add((PluggableService) ComponentLocator.getComponent(ManagementServer.Name)); - - for (PluggableService service : services) { ++ _services.add((PluggableService) ComponentContext.getComponent(ManagementServer.Name)); + for (PluggableService service : _services) { - configPropertiesMap.putAll(service.getProperties()); + processConfigFiles(service.getProperties(), service.getClass().toString()); + s_logger.info("Processed role based acl for: " + service.toString()); } - - processConfigFiles(configPropertiesMap); return true; } http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/38eaa04b/plugins/api/discovery/src/org/apache/cloudstack/discovery/ApiDiscoveryServiceImpl.java ---------------------------------------------------------------------- diff --cc plugins/api/discovery/src/org/apache/cloudstack/discovery/ApiDiscoveryServiceImpl.java index 2bc17bd,5f84486..6ff4085 --- a/plugins/api/discovery/src/org/apache/cloudstack/discovery/ApiDiscoveryServiceImpl.java +++ b/plugins/api/discovery/src/org/apache/cloudstack/discovery/ApiDiscoveryServiceImpl.java @@@ -16,8 -16,13 +16,13 @@@ // under the License. package org.apache.cloudstack.discovery; - import com.cloud.utils.PropertiesUtil; + import com.cloud.serializer.Param; + import com.cloud.server.ManagementServer; import com.cloud.utils.ReflectUtil; + import com.cloud.utils.StringUtils; -import com.cloud.utils.component.ComponentLocator; ++import com.cloud.utils.component.ComponentContext; + import com.cloud.utils.component.PluggableService; + import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.acl.RoleType; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.BaseCmd; @@@ -27,10 -32,11 +32,13 @@@ import org.apache.cloudstack.api.BaseRe import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.ApiDiscoveryResponse; import org.apache.cloudstack.api.response.ApiParameterResponse; + import org.apache.cloudstack.api.response.ApiResponseResponse; import org.apache.cloudstack.api.response.ListResponse; import org.apache.log4j.Logger; ++import org.springframework.stereotype.Component; import javax.ejb.Local; ++import javax.inject.Inject; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.HashMap; @@@ -38,34 -45,61 +47,62 @@@ import java.util.List import java.util.Map; import java.util.Set; ++@Component @Local(value = ApiDiscoveryService.class) public class ApiDiscoveryServiceImpl implements ApiDiscoveryService { private static final Logger s_logger = Logger.getLogger(ApiDiscoveryServiceImpl.class); - private ListResponse _discoveryResponse = new ListResponse(); + private static Map> _roleTypeDiscoveryResponseListMap; - private Map> _apiNameCmdClassMap = new HashMap>(); + private static Map _apiNameDiscoveryResponseMap = + new HashMap(); + + private static Map> _apiNameRoleTypeListMap = null; + ++ @Inject List _services; + protected ApiDiscoveryServiceImpl() { super(); - generateApiNameCmdClassMap(); - cacheListApiResponse(); + if (_roleTypeDiscoveryResponseListMap == null) { + long startTime = System.nanoTime(); + _roleTypeDiscoveryResponseListMap = new HashMap>(); + for (RoleType roleType: RoleType.values()) + _roleTypeDiscoveryResponseListMap.put(roleType, new ArrayList()); + cacheResponseMap(); + long endTime = System.nanoTime(); + s_logger.info("Api Discovery Service: Annotation, docstrings, api relation graph processed in " + (endTime - startTime) / 1000000.0 + " ms"); + } } - private void generateApiNameCmdClassMap() { - Set> cmdClasses = ReflectUtil.getClassesWithAnnotation(APICommand.class, - new String[]{"org.apache.cloudstack.api", "com.cloud.api"}); - - for(Class cmdClass: cmdClasses) - _apiNameCmdClassMap.put(cmdClass.getAnnotation(APICommand.class).name(), cmdClass); + private Map> getApiNameRoleTypeListMap() { + Map> apiNameRoleTypeMap = new HashMap>(); - ComponentLocator locator = ComponentLocator.getLocator(ManagementServer.Name); - List services = locator.getAllPluggableServices(); - services.add((PluggableService) ComponentLocator.getComponent(ManagementServer.Name)); - for (PluggableService service : services) { ++ _services.add((PluggableService) ComponentContext.getComponent(ManagementServer.Name)); ++ for (PluggableService service : _services) { + for (Map.Entry entry: service.getProperties().entrySet()) { + String apiName = entry.getKey(); + String roleMask = entry.getValue(); + try { + short cmdPermissions = Short.parseShort(roleMask); + if (!apiNameRoleTypeMap.containsKey(apiName)) + apiNameRoleTypeMap.put(apiName, new ArrayList()); + for (RoleType roleType: RoleType.values()) { + if ((cmdPermissions & roleType.getValue()) != 0) + apiNameRoleTypeMap.get(apiName).add(roleType); + } + } catch (NumberFormatException nfe) { + } + } + } + return apiNameRoleTypeMap; } - private void cacheListApiResponse() { + private void cacheResponseMap() { + Set> cmdClasses = ReflectUtil.getClassesWithAnnotation(APICommand.class, + new String[]{"org.apache.cloudstack.api", "com.cloud.api"}); - List apiDiscoveryResponses = new ArrayList(); + Map> responseApiNameListMap = new HashMap>(); - for(String key: _apiNameCmdClassMap.keySet()) { - Class cmdClass = _apiNameCmdClassMap.get(key); + for(Class cmdClass: cmdClasses) { APICommand apiCmdAnnotation = cmdClass.getAnnotation(APICommand.class); if (apiCmdAnnotation == null) apiCmdAnnotation = cmdClass.getSuperclass().getAnnotation(APICommand.class); http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/38eaa04b/plugins/pom.xml ---------------------------------------------------------------------- diff --cc plugins/pom.xml index a42ae29,a42ae29..8c68c28 --- a/plugins/pom.xml +++ b/plugins/pom.xml @@@ -40,7 -40,7 +40,6 @@@ hypervisors/ovm hypervisors/xen hypervisors/kvm -- hypervisors/simulator network-elements/elastic-loadbalancer network-elements/ovs network-elements/nicira-nvp http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/38eaa04b/server/src/com/cloud/api/ApiDispatcher.java ---------------------------------------------------------------------- diff --cc server/src/com/cloud/api/ApiDispatcher.java index 10810b7,55d7f42..67aa454 --- a/server/src/com/cloud/api/ApiDispatcher.java +++ b/server/src/com/cloud/api/ApiDispatcher.java @@@ -66,46 -58,55 +66,36 @@@ import com.cloud.user.AccountManager import com.cloud.user.UserContext; import com.cloud.utils.DateUtil; import com.cloud.utils.NumbersUtil; -import com.cloud.utils.component.ComponentLocator; -import com.cloud.utils.component.Inject; -import com.cloud.utils.component.PluggableService; -import com.cloud.utils.db.GenericDao; +import com.cloud.utils.ReflectUtil; import com.cloud.utils.exception.CSExceptionErrorCode; import com.cloud.utils.exception.CloudRuntimeException; - import com.cloud.uuididentity.dao.IdentityDao; -// ApiDispatcher: A class that dispatches API commands to the appropriate manager for execution. +@Component public class ApiDispatcher { private static final Logger s_logger = Logger.getLogger(ApiDispatcher.class.getName()); - ComponentLocator _locator; Long _createSnapshotQueueSizeLimit; - @Inject private AsyncJobManager _asyncMgr = null; - @Inject private AccountManager _accountMgr = null; + @Inject AsyncJobManager _asyncMgr = null; + @Inject AccountManager _accountMgr = null; @Inject EntityManager _entityMgr = null; - @Inject IdentityDao _identityDao = null; - @Inject ConfigurationDao _configDao = null; - Map> _daoNameMap = new HashMap>(); - // singleton class - private static ApiDispatcher s_instance = ApiDispatcher.getInstance(); + private static ApiDispatcher s_instance; public static ApiDispatcher getInstance() { - if (s_instance == null) { - s_instance = ComponentLocator.inject(ApiDispatcher.class); - } return s_instance; } protected ApiDispatcher() { super(); - Map configs = _configDao.getConfiguration(); - String strSnapshotLimit = configs.get(Config.ConcurrentSnapshotsThresholdPerHost.key()); - if (strSnapshotLimit != null) { - Long snapshotLimit = NumbersUtil.parseLong(strSnapshotLimit, 1L); - if (snapshotLimit <= 0) { - s_logger.debug("Global config parameter " + Config.ConcurrentSnapshotsThresholdPerHost.toString() - + " is less or equal 0; defaulting to unlimited"); - } else { - _createSnapshotQueueSizeLimit = snapshotLimit; - } - } - _locator = ComponentLocator.getLocator(ManagementServer.Name); - ConfigurationDao configDao = _locator.getDao(ConfigurationDao.class); - Map configs = configDao.getConfiguration(); - String strSnapshotLimit = configs.get(Config.ConcurrentSnapshotsThresholdPerHost.key()); - if (strSnapshotLimit != null) { - Long snapshotLimit = NumbersUtil.parseLong(strSnapshotLimit, 1L); - if (snapshotLimit <= 0) { - s_logger.debug("Global config parameter " + Config.ConcurrentSnapshotsThresholdPerHost.toString() - + " is less or equal 0; defaulting to unlimited"); - } else { - _createSnapshotQueueSizeLimit = snapshotLimit; - } - } - _daoNameMap.put("com.cloud.network.Network", NetworkDao.class); - _daoNameMap.put("com.cloud.template.VirtualMachineTemplate", VMTemplateDao.class); + s_instance = this; + } + ++ public void setCreateSnapshotQueueSizeLimit(Long snapshotLimit) { ++ _createSnapshotQueueSizeLimit = snapshotLimit; + } + public void dispatchCreateCmd(BaseAsyncCreateCmd cmd, Map params) { - processParameters(cmd, params); + processParameters(cmd, params); try { UserContext ctx = UserContext.current(); http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/38eaa04b/server/src/com/cloud/api/ApiServer.java ---------------------------------------------------------------------- diff --cc server/src/com/cloud/api/ApiServer.java index 4cb892f,03462e4..e5b57e5 --- a/server/src/com/cloud/api/ApiServer.java +++ b/server/src/com/cloud/api/ApiServer.java @@@ -51,19 -50,10 +51,19 @@@ import javax.inject.Inject import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; - import org.apache.cloudstack.acl.APIAccessChecker; -import com.cloud.utils.ReflectUtil; + import org.apache.cloudstack.acl.APIChecker; import org.apache.cloudstack.acl.RoleType; -import org.apache.cloudstack.api.*; +import org.apache.cloudstack.api.APICommand; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseAsyncCreateCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.BaseListCmd; +import org.apache.cloudstack.api.ResponseObject; +import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.command.admin.host.ListHostsCmd; +import org.apache.cloudstack.api.command.admin.router.ListRoutersCmd; +import org.apache.cloudstack.api.command.admin.storage.ListStoragePoolsCmd; +import org.apache.cloudstack.api.command.admin.user.ListUsersCmd; import org.apache.cloudstack.api.command.user.account.ListAccountsCmd; import org.apache.cloudstack.api.command.user.account.ListProjectAccountsCmd; import org.apache.cloudstack.api.command.user.event.ListEventsCmd; @@@ -128,34 -123,29 +128,33 @@@ import com.cloud.user.UserAccount import com.cloud.user.UserContext; import com.cloud.user.UserVO; import com.cloud.utils.Pair; -import com.cloud.utils.component.Adapters; ++import com.cloud.utils.NumbersUtil; +import com.cloud.utils.ReflectUtil; import com.cloud.utils.StringUtils; -import com.cloud.utils.component.ComponentLocator; -import com.cloud.utils.component.Inject; +import com.cloud.utils.component.ComponentContext; +import com.cloud.utils.component.PluggableService; import com.cloud.utils.concurrency.NamedThreadFactory; import com.cloud.utils.db.SearchCriteria; import com.cloud.utils.db.Transaction; import com.cloud.utils.exception.CSExceptionErrorCode; - import com.cloud.uuididentity.dao.IdentityDao; +@Component public class ApiServer implements HttpRequestHandler { private static final Logger s_logger = Logger.getLogger(ApiServer.class.getName()); private static final Logger s_accessLogger = Logger.getLogger("apiserver." + ApiServer.class.getName()); public static boolean encodeApiResponse = false; public static String jsonContentType = "text/javascript"; - private ApiDispatcher _dispatcher; + @Inject ApiDispatcher _dispatcher; + + @Inject private AccountManager _accountMgr; + @Inject private DomainManager _domainMgr; + @Inject private AsyncJobManager _asyncMgr; + @Inject private ConfigurationDao _configDao; - @Inject private AccountManager _accountMgr = null; - @Inject private DomainManager _domainMgr = null; - @Inject private AsyncJobManager _asyncMgr = null; + @Inject List _pluggableServices; - @Inject IdentityDao _identityDao; - @Inject List _apiAccessCheckers; - @Inject(adapter = APIChecker.class) - protected Adapters _apiAccessCheckers; ++ @Inject List _apiAccessCheckers; private Account _systemAccount = null; private User _systemUser = null; @@@ -203,6 -196,6 +202,18 @@@ } } ++ Map configs = _configDao.getConfiguration(); ++ String strSnapshotLimit = configs.get(Config.ConcurrentSnapshotsThresholdPerHost.key()); ++ if (strSnapshotLimit != null) { ++ Long snapshotLimit = NumbersUtil.parseLong(strSnapshotLimit, 1L); ++ if (snapshotLimit <= 0) { ++ s_logger.debug("Global config parameter " + Config.ConcurrentSnapshotsThresholdPerHost.toString() ++ + " is less or equal 0; defaulting to unlimited"); ++ } else { ++ _dispatcher.setCreateSnapshotQueueSizeLimit(snapshotLimit); ++ } ++ } ++ Set> cmdClasses = ReflectUtil.getClassesWithAnnotation(APICommand.class, new String[]{"org.apache.cloudstack.api", "com.cloud.api"}); @@@ -552,12 -545,12 +563,12 @@@ } String commandName = command[0]; - /* + // if userId not null, that mean that user is logged in if (userId != null) { - User user = ApiDBUtils.findUserById(userId); + User user = ApiDBUtils.findUserById(userId); if (!isCommandAvailable(user, commandName)) { - s_logger.warn("The given command:" + commandName + " does not exist or it is not available for user"); + s_logger.debug("The given command:" + commandName + " does not exist or it is not available for user with id:" + userId); throw new ServerApiException(BaseCmd.UNSUPPORTED_ACTION_ERROR, "The given command does not exist or it is not available for user"); } return true; http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/38eaa04b/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java ---------------------------------------------------------------------- diff --cc server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java index 353ef73,5bc5d27..502ba30 --- a/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java +++ b/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java @@@ -31,10 -31,9 +31,12 @@@ import javax.inject.Inject import javax.naming.ConfigurationException; import javax.persistence.Table; +import org.apache.cloudstack.api.ServerApiException; + import com.cloud.offering.DiskOffering; + import com.cloud.storage.dao.DiskOfferingDao; import org.apache.log4j.Logger; +import org.springframework.context.annotation.Primary; +import org.springframework.stereotype.Component; import com.cloud.agent.AgentManager; import com.cloud.agent.api.AgentControlAnswer; @@@ -1511,26 -1519,23 +1509,23 @@@ public class ConsoleProxyManagerImpl im _itMgr.registerGuru(VirtualMachine.Type.ConsoleProxy, this); boolean useLocalStorage = Boolean.parseBoolean(configs.get(Config.SystemVMUseLocalStorage.key())); - + //check if there is a default service offering configured -- String cpvmSrvcOffIdStr = configs.get(Config.ConsoleProxyServiceOffering.key()); ++ String cpvmSrvcOffIdStr = configs.get(Config.ConsoleProxyServiceOffering.key()); if (cpvmSrvcOffIdStr != null) { - - Long cpvmSrvcOffId = null; - try { - cpvmSrvcOffId = _identityDao.getIdentityId(DiskOfferingVO.class.getAnnotation(Table.class).name(),cpvmSrvcOffIdStr); - } catch (Exception e) { - String msg = "Can't find system service offering specified by global config, uuid=" + cpvmSrvcOffIdStr + " for console proxy vm"; - s_logger.warn(msg); - } - if(cpvmSrvcOffId != null){ - _serviceOffering = _offeringDao.findById(cpvmSrvcOffId); + DiskOffering diskOffering = _diskOfferingDao.findByUuid(cpvmSrvcOffIdStr); + if (diskOffering == null) + diskOffering = _diskOfferingDao.findById(Long.parseLong(cpvmSrvcOffIdStr)); + if (diskOffering != null) { + _serviceOffering = _offeringDao.findById(diskOffering.getId()); + } else { + s_logger.warn("Can't find system service offering specified by global config, uuid=" + cpvmSrvcOffIdStr + " for console proxy vm"); } -- } ++ } if(_serviceOffering == null || !_serviceOffering.getSystemUse()){ - int ramSize = NumbersUtil.parseInt(_configDao.getValue("console.ram.size"), DEFAULT_PROXY_VM_RAMSIZE); - int cpuFreq = NumbersUtil.parseInt(_configDao.getValue("console.cpu.mhz"), DEFAULT_PROXY_VM_CPUMHZ); + int ramSize = NumbersUtil.parseInt(_configDao.getValue("console.ram.size"), DEFAULT_PROXY_VM_RAMSIZE); + int cpuFreq = NumbersUtil.parseInt(_configDao.getValue("console.cpu.mhz"), DEFAULT_PROXY_VM_CPUMHZ); _serviceOffering = new ServiceOfferingVO("System Offering For Console Proxy", 1, ramSize, cpuFreq, 0, 0, false, null, useLocalStorage, true, null, true, VirtualMachine.Type.ConsoleProxy, true); _serviceOffering.setUniqueName(ServiceOffering.consoleProxyDefaultOffUniqueName); _serviceOffering = _offeringDao.persistSystemServiceOffering(_serviceOffering); http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/38eaa04b/server/src/com/cloud/network/NetworkManagerImpl.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/38eaa04b/server/src/com/cloud/user/DomainManagerImpl.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/38eaa04b/server/test/com/cloud/vpc/MockNetworkManagerImpl.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/38eaa04b/utils/test/com/cloud/utils/log/CglibThrowableRendererTest.java ---------------------------------------------------------------------- diff --cc utils/test/com/cloud/utils/log/CglibThrowableRendererTest.java index bf917de,c1cd81e..59926f8 --- a/utils/test/com/cloud/utils/log/CglibThrowableRendererTest.java +++ b/utils/test/com/cloud/utils/log/CglibThrowableRendererTest.java @@@ -18,11 -18,16 +18,16 @@@ package com.cloud.utils.log import junit.framework.TestCase; - import org.apache.log4j.Logger; + import org.apache.log4j.*; -import com.cloud.utils.component.ComponentLocator; +import com.cloud.utils.component.ComponentContext; import com.cloud.utils.db.DB; import com.cloud.utils.exception.CloudRuntimeException; + import org.apache.log4j.spi.RootLogger; + import org.apache.log4j.spi.ThrowableRenderer; + + import java.io.CharArrayWriter; + import java.io.Writer; public class CglibThrowableRendererTest extends TestCase { @@@ -49,8 -56,21 +56,21 @@@ } } + private Logger getAlternateLogger(Writer writer, ThrowableRenderer renderer) { + Hierarchy hierarchy = new Hierarchy(new RootLogger(Level.INFO)); + if (renderer != null) { + hierarchy.setThrowableRenderer(renderer); + } + Logger alternateRoot = hierarchy.getRootLogger(); + alternateRoot.addAppender(new WriterAppender(new SimpleLayout(), writer)); + return alternateRoot; + } - ++ public void testException() { + Writer w = new CharArrayWriter(); + Logger alt = getAlternateLogger(w, null); + - Test test = ComponentLocator.inject(Test.class); + Test test = ComponentContext.inject(Test.class); try { test.exception(); } catch (Exception e) {