You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by bh...@apache.org on 2013/01/12 15:09:05 UTC
[31/31] git commit: Pull changes from master into javelin
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 <bh...@apache.org>
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 <bh...@apache.org>
Authored: Sat Jan 12 06:01:58 2013 -0800
Committer: Rohit Yadav <bh...@apache.org>
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 @@@
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:context="http://www.springframework.org/schema/context"
+ xmlns:tx="http://www.springframework.org/schema/tx"
+ xmlns:aop="http://www.springframework.org/schema/aop"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans
+ http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
+ http://www.springframework.org/schema/tx
+ http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
+ http://www.springframework.org/schema/aop
+ http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
+ http://www.springframework.org/schema/context
+ http://www.springframework.org/schema/context/spring-context-3.0.xsd">
+
+
+ <!--
+ Configurable components
+ -->
- <bean id="ManagementServerExtImpl" class ="com.cloud.server.ManagementServerExtImpl" />
-
++ <bean id="management-server" class ="com.cloud.server.ManagementServerExtImpl" />
++ <bean id="configuration-server" class="com.cloud.server.ConfigurationServerImpl" />
+
+ <!--
+ Network Elements
+ -->
+ <bean id="VirtualRouter" class="com.cloud.network.element.VirtualRouterElement">
+ <property name="name" value="VirtualRouter"/>
+ </bean>
+ <bean id="Ovs" class="com.cloud.network.element.OvsElement">
+ <property name="name" value="Ovs"/>
+ </bean>
+ <bean id="ExternalDhcpServer" class="com.cloud.network.element.ExternalDhcpElement">
+ <property name="name" value="ExternalDhcpServer"/>
+ </bean>
+ <bean id="BareMetal" class="com.cloud.network.element.BareMetalElement">
+ <property name="name" value="BareMetal"/>
+ </bean>
+ <bean id="SecurityGroupProvider" class="com.cloud.network.element.SecurityGroupElement">
+ <property name="name" value="SecurityGroupProvider"/>
+ </bean>
+ <bean id="VpcVirtualRouter" class="com.cloud.network.element.VpcVirtualRouterElement">
+ <property name="name" value="VpcVirtualRouter"/>
+ </bean>
+ <bean id="NiciraNvp" class="com.cloud.network.element.NiciraNvpElement">
+ <property name="name" value="NiciraNvp"/>
+ </bean>
+
+ <!--
+ Adapters
+ -->
+ <bean id="StaticRoleBasedAPIAccessChecker" class="org.apache.cloudstack.acl.StaticRoleBasedAPIAccessChecker"/>
+
+</beans>
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<ObjectInDataStoreVO, Long> 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<RoleType, Set<String>> s_roleBasedApisMap =
+ new HashMap<RoleType, Set<String>>();
+
+ @Inject List<PluggableService> _services;
- private static Set<String> s_userCommands = null;
- private static Set<String> s_resellerCommands = null; // AKA domain-admin
- private static Set<String> s_adminCommands = null;
- private static Set<String> s_resourceDomainAdminCommands = null;
- private static Set<String> s_allCommands = null;
+
protected StaticRoleBasedAPIAccessChecker() {
super();
- s_allCommands = new HashSet<String>();
- s_userCommands = new HashSet<String>();
- s_resellerCommands = new HashSet<String>();
- s_adminCommands = new HashSet<String>();
- s_resourceDomainAdminCommands = new HashSet<String>();
+ for (RoleType roleType: RoleType.values())
+ s_roleBasedApisMap.put(roleType, new HashSet<String>());
}
@Override
@@@ -97,14 -61,16 +73,11 @@@
@Override
public boolean configure(String name, Map<String, Object> params) throws ConfigurationException {
super.configure(name, params);
--
-- // Read command properties files to build the static map per role.
- Map<String, String> configPropertiesMap = new HashMap<String, String>();
- ComponentLocator locator = ComponentLocator.getLocator(ManagementServer.Name);
- List<PluggableService> 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<ApiDiscoveryResponse> _discoveryResponse = new ListResponse<ApiDiscoveryResponse>();
+ private static Map<RoleType, List<ApiDiscoveryResponse>> _roleTypeDiscoveryResponseListMap;
- private Map<String, Class<?>> _apiNameCmdClassMap = new HashMap<String, Class<?>>();
+ private static Map<String, ApiDiscoveryResponse> _apiNameDiscoveryResponseMap =
+ new HashMap<String, ApiDiscoveryResponse>();
+
+ private static Map<String, List<RoleType>> _apiNameRoleTypeListMap = null;
+
++ @Inject List<PluggableService> _services;
+
protected ApiDiscoveryServiceImpl() {
super();
- generateApiNameCmdClassMap();
- cacheListApiResponse();
+ if (_roleTypeDiscoveryResponseListMap == null) {
+ long startTime = System.nanoTime();
+ _roleTypeDiscoveryResponseListMap = new HashMap<RoleType, List<ApiDiscoveryResponse>>();
+ for (RoleType roleType: RoleType.values())
+ _roleTypeDiscoveryResponseListMap.put(roleType, new ArrayList<ApiDiscoveryResponse>());
+ 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<Class<?>> 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<String, List<RoleType>> getApiNameRoleTypeListMap() {
+ Map<String, List<RoleType>> apiNameRoleTypeMap = new HashMap<String, List<RoleType>>();
- ComponentLocator locator = ComponentLocator.getLocator(ManagementServer.Name);
- List<PluggableService> 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<String, String> 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<RoleType>());
+ 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<Class<?>> cmdClasses = ReflectUtil.getClassesWithAnnotation(APICommand.class,
+ new String[]{"org.apache.cloudstack.api", "com.cloud.api"});
- List<ApiDiscoveryResponse> apiDiscoveryResponses = new ArrayList<ApiDiscoveryResponse>();
+ Map<String, List<String>> responseApiNameListMap = new HashMap<String, List<String>>();
- 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 @@@
<module>hypervisors/ovm</module>
<module>hypervisors/xen</module>
<module>hypervisors/kvm</module>
-- <module>hypervisors/simulator</module>
<module>network-elements/elastic-loadbalancer</module>
<module>network-elements/ovs</module>
<module>network-elements/nicira-nvp</module>
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<String, Class<? extends GenericDao>> _daoNameMap = new HashMap<String, Class<? extends GenericDao>>();
- // 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<String, String> 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<String, String> 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<String, String> 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<PluggableService> _pluggableServices;
- @Inject IdentityDao _identityDao;
- @Inject List<APIAccessChecker> _apiAccessCheckers;
- @Inject(adapter = APIChecker.class)
- protected Adapters<APIChecker> _apiAccessCheckers;
++ @Inject List<APIChecker> _apiAccessCheckers;
private Account _systemAccount = null;
private User _systemUser = null;
@@@ -203,6 -196,6 +202,18 @@@
}
}
++ Map<String, String> 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<Class<?>> 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) {