Removed orchestration from relying on cloud-server

This commit is contained in:
Alex Huang 2013-05-16 14:13:54 -07:00
parent 813321b42d
commit 6bf9de596e
23 changed files with 230 additions and 69 deletions

View File

@ -0,0 +1,91 @@
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
package org.apache.cloudstack.config;
/**
* ConfigKey supplants the original Config.java. It is just a class
* declaration where others can declare their config variables.
*
* TODO: This class should be moved to a framework project where the gathering
* of these configuration keys should be done by a config server. I
* don't have time yet to do this. Ask me about it if you want to work
* in this area. Right now, we'll just work with the actual names.
*/
public class ConfigKey<T> {
private final String _category;
public String category() {
return _category;
}
public Class<?> component() {
return _componentClass;
}
public Class<T> type() {
return _type;
}
public String key() {
return _name;
}
public String defaultValue() {
return _defaultValue;
}
public String description() {
return _description;
}
public String range() {
return _range;
}
public String scope() {
return _scope;
}
@Override
public String toString() {
return _name;
}
private final Class<?> _componentClass;
private final Class<T> _type;
private final String _name;
private final String _defaultValue;
private final String _description;
private final String _range;
private final String _scope; // Parameter can be at different levels (Zone/cluster/pool/account), by default every parameter is at global
public ConfigKey(Class<T> type, String name, String category, Class<?> componentClass, String defaultValue, String description, String range, String scope) {
_category = category;
_componentClass = componentClass;
_type = type;
_name = name;
_defaultValue = defaultValue;
_description = description;
_range = range;
_scope = scope;
}
public ConfigKey(Class<T> type, String name, String category, Class<?> componentClass, String defaultValue, String description, String range) {
this(type, name, category, componentClass, defaultValue, description, range, null);
}
}

View File

@ -0,0 +1,26 @@
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
package org.apache.cloudstack.config;
/**
* ConfigRepo is a repository of configurations.
*
*/
public interface ConfigRepo {
<T> ConfigValue<T> get(ConfigKey<T> key);
}

View File

@ -14,26 +14,31 @@
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
package com.cloud.configuration;
package org.apache.cloudstack.config;
import com.cloud.configuration.ConfigurationVO;
import com.cloud.configuration.dao.ConfigurationDao;
import com.cloud.utils.exception.CloudRuntimeException;
// This class returns the config value in a class. We can later enhance this
// class to get auto-updated by the database.
/**
* This is a match set to ConfigKey.
*
* TODO: When we create a framework project for configuration, this should be
* moved there.
*/
public class ConfigValue<T> {
Config _config;
ConfigKey<T> _config;
ConfigurationDao _dao;
Number _multiplier;
protected ConfigValue(ConfigurationDao dao, Config config) {
public ConfigValue(ConfigurationDao dao, ConfigKey<T> config) {
_dao = dao;
_config = config;
_multiplier = 1;
}
public Config getConfig() {
public ConfigKey<T> getConfigKey() {
return _config;
}
@ -45,9 +50,9 @@ public class ConfigValue<T> {
@SuppressWarnings("unchecked")
public T value() {
ConfigurationVO vo = _dao.findByName(_config.key());
String value = vo != null ? vo.getValue() : _config.getDefaultValue();
String value = vo != null ? vo.getValue() : _config.defaultValue();
Class<?> type = _config.getType();
Class<T> type = _config.type();
if (type.isAssignableFrom(Boolean.class)) {
return (T)Boolean.valueOf(value);
} else if (type.isAssignableFrom(Integer.class)) {

View File

@ -0,0 +1,44 @@
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
package org.apache.cloudstack.engine.config;
import org.apache.cloudstack.config.ConfigKey;
import org.apache.cloudstack.engine.service.api.OrchestrationService;
public interface Configs {
public static final ConfigKey<Integer> StartRetry = new ConfigKey<Integer>(
Integer.class, "start.retry", "Advanced", OrchestrationService.class, "10", "Number of times to retry create and start commands", null);
public static final ConfigKey<Long> VmOpWaitInterval = new ConfigKey<Long>(
Long.class, "vm.op.wait.interval", "Advanced", OrchestrationService.class, "120", "Time (in seconds) to wait before checking if a previous operation has succeeded",
null);
public static final ConfigKey<Integer> VmOpLockStateRetry = new ConfigKey<Integer>(
Integer.class, "vm.op.lock.state.retry", "Advanced", OrchestrationService.class, "5", "Times to retry locking the state of a VM for operations", "-1 means try forever");
public static final ConfigKey<Long> VmOpCleanupInterval = new ConfigKey<Long>(
Long.class, "vm.op.cleanup.interval", "Advanced", OrchestrationService.class, "86400", "Interval to run the thread that cleans up the vm operations (in seconds)",
"Seconds");
public static final ConfigKey<Long> VmOpCleanupWait = new ConfigKey<Long>(
Long.class, "vm.op.cleanup.wait", "Advanced", OrchestrationService.class, "3600", "Time (in seconds) to wait before cleanuping up any vm work items", "Seconds");
public static final ConfigKey<Integer> VmOpCancelInterval = new ConfigKey<Integer>(
Integer.class, "vm.op.cancel.interval", "Advanced", OrchestrationService.class, "3600", "Time (in seconds) to wait before cancelling a operation", "Seconds");
public static final ConfigKey<Integer> Wait = new ConfigKey<Integer>(
Integer.class, "wait", "Advanced", OrchestrationService.class, "1800", "Time in seconds to wait for control commands to return", null);
public static final ConfigKey<Boolean> VmDestroyForcestop = new ConfigKey<Boolean>(
Boolean.class, "vm.destroy.forcestop", "Advanced", OrchestrationService.class, "false", "On destroy, force-stop takes this value ", null);
}

View File

@ -48,11 +48,6 @@
<artifactId>cloud-utils</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.apache.cloudstack</groupId>
<artifactId>cloud-server</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
<build>
<plugins>

View File

@ -29,11 +29,15 @@ import javax.naming.ConfigurationException;
import org.apache.log4j.Logger;
import org.apache.cloudstack.config.ConfigRepo;
import org.apache.cloudstack.config.ConfigValue;
import org.apache.cloudstack.engine.cloud.entity.VMEntityVO;
import org.apache.cloudstack.engine.cloud.entity.api.VirtualMachineEntity;
import org.apache.cloudstack.engine.cloud.entity.api.VirtualMachineEntityImpl;
import org.apache.cloudstack.engine.config.Configs;
import org.apache.cloudstack.engine.subsystem.api.storage.StorageOrchestrator;
import org.apache.cloudstack.network.NetworkOrchestrator;
import org.apache.cloudstack.vm.jobs.VmWorkJobDao;
import com.cloud.agent.AgentManager;
import com.cloud.agent.Listener;
@ -43,9 +47,6 @@ import com.cloud.agent.api.Answer;
import com.cloud.agent.api.Command;
import com.cloud.agent.api.StartupCommand;
import com.cloud.cluster.ManagementServerNode;
import com.cloud.configuration.Config;
import com.cloud.configuration.ConfigValue;
import com.cloud.configuration.ConfigurationManager;
import com.cloud.dao.EntityManager;
import com.cloud.deploy.DeploymentPlan;
import com.cloud.domain.dao.DomainDao;
@ -70,12 +71,10 @@ import com.cloud.utils.component.ComponentContext;
import com.cloud.utils.component.ManagerBase;
import com.cloud.utils.concurrency.NamedThreadFactory;
import com.cloud.vm.NicProfile;
import com.cloud.vm.ReservationContextImpl;
import com.cloud.vm.UserVmVO;
import com.cloud.vm.VMInstanceVO;
import com.cloud.vm.VirtualMachineManager;
import com.cloud.vm.VirtualMachineProfileImpl;
import com.cloud.vm.VmWorkJobDao;
/**
* VirtualMachineOrchestrator orchestrates virtual machine operations.
@ -86,7 +85,7 @@ public class VirtualMachineOrchestrator extends ManagerBase {
@Inject
EntityManager _entityMgr;
@Inject
ConfigurationManager _configMgr;
ConfigRepo _configRepo;
@Inject
NetworkOrchestrator _networkOrchestrator;
@Inject
@ -99,7 +98,7 @@ public class VirtualMachineOrchestrator extends ManagerBase {
VirtualMachineManager _itMgr;
protected ConfigValue<Integer> _retry;
protected ConfigValue<Long> _cancelWait;
protected ConfigValue<Integer> _cancelWait;
protected ConfigValue<Long> _cleanupWait;
protected ConfigValue<Long> _cleanupInterval;
protected ConfigValue<Long> _opWaitInterval;
@ -280,16 +279,15 @@ public class VirtualMachineOrchestrator extends ManagerBase {
public boolean configure(String name, Map<String, Object> params) throws ConfigurationException {
super.configure(name, params);
_retry = _configMgr.getConfig(Config.StartRetry, Integer.class);
_retry = _configRepo.get(Configs.StartRetry);
_cancelWait = _configMgr.getConfig(Config.VmOpCancelInterval, Long.class);
_cleanupWait = _configMgr.getConfig(Config.VmOpCleanupWait, Long.class);
_cleanupInterval = _configMgr.getConfig(Config.VmOpCleanupInterval, Long.class).setMultiplier(1000);
_opWaitInterval = _configMgr.getConfig(Config.VmOpWaitInterval, Long.class).setMultiplier(1000);
_lockStateRetry = _configMgr.getConfig(Config.VmOpLockStateRetry, Integer.class);
_operationTimeout = _configMgr.getConfig(Config.Wait, Integer.class).setMultiplier(2);
_forceStop = _configMgr.getConfig(Config.VmDestroyForcestop, Boolean.class);
_cancelWait = _configRepo.get(Configs.VmOpCancelInterval);
_cleanupWait = _configRepo.get(Configs.VmOpCleanupWait);
_cleanupInterval = _configRepo.get(Configs.VmOpCleanupInterval).setMultiplier(1000);
_opWaitInterval = _configRepo.get(Configs.VmOpWaitInterval).setMultiplier(1000);
_lockStateRetry = _configRepo.get(Configs.VmOpLockStateRetry);
_operationTimeout = _configRepo.get(Configs.Wait).setMultiplier(2);
_forceStop = _configRepo.get(Configs.VmDestroyForcestop);
_nodeId = ManagementServerNode.getManagementServerId();
@ -297,7 +295,7 @@ public class VirtualMachineOrchestrator extends ManagerBase {
_executor = Executors.newScheduledThreadPool(1, new NamedThreadFactory("Vm-Operations-Cleanup"));
ReservationContextImpl.setComponents(_userDao, _domainDao, _accountDao);
// ReservationContextImpl.setComponents(_userDao, _domainDao, _accountDao);
VirtualMachineProfileImpl.setComponents(_offeringDao, _templateDao, _accountDao);
VirtualMachineEntityImpl2.init(_entityMgr, this, _networkOrchestrator, _storageOrchestrator);

View File

@ -33,6 +33,11 @@
<artifactId>cloud-engine-api</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.apache.cloudstack</groupId>
<artifactId>cloud-framework-jobs</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
<build>
<defaultGoal>install</defaultGoal>

View File

@ -14,13 +14,16 @@
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
package com.cloud.vm;
package org.apache.cloudstack.vm.jobs;
import java.util.Date;
import java.util.List;
import org.apache.cloudstack.vm.jobs.VmWorkJobVO.Step;
import com.cloud.utils.db.GenericDao;
import com.cloud.vm.VmWorkJobVO.Step;
import com.cloud.vm.VirtualMachine;
import com.cloud.vm.VirtualMachine.Type;
public interface VmWorkJobDao extends GenericDao<VmWorkJobVO, Long> {
VmWorkJobVO findPendingWorkJob(VirtualMachine.Type type, long instanceId);

View File

@ -14,7 +14,7 @@
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
package com.cloud.vm;
package org.apache.cloudstack.vm.jobs;
import java.util.Date;
import java.util.List;
@ -22,6 +22,7 @@ import java.util.List;
import javax.annotation.PostConstruct;
import org.apache.cloudstack.framework.jobs.AsyncJobConstants;
import org.apache.cloudstack.vm.jobs.VmWorkJobVO.Step;
import com.cloud.utils.DateUtil;
import com.cloud.utils.db.Filter;
@ -29,7 +30,8 @@ import com.cloud.utils.db.GenericDaoBase;
import com.cloud.utils.db.SearchBuilder;
import com.cloud.utils.db.SearchCriteria;
import com.cloud.utils.db.SearchCriteria.Op;
import com.cloud.vm.VmWorkJobVO.Step;
import com.cloud.vm.VirtualMachine;
import com.cloud.vm.VirtualMachine.Type;
public class VmWorkJobDaoImpl extends GenericDaoBase<VmWorkJobVO, Long> implements VmWorkJobDao {

View File

@ -14,7 +14,7 @@
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
package com.cloud.vm;
package org.apache.cloudstack.vm.jobs;
import javax.persistence.Column;
import javax.persistence.DiscriminatorValue;
@ -26,6 +26,9 @@ import javax.persistence.Table;
import org.apache.cloudstack.framework.jobs.AsyncJobVO;
import com.cloud.vm.VirtualMachine;
import com.cloud.vm.VirtualMachine.Type;
@Entity
@Table(name="vm_work_job")

View File

@ -32,11 +32,8 @@ import com.cloud.agent.StartupCommandProcessor;
import com.cloud.agent.api.Answer;
import com.cloud.agent.api.Command;
import com.cloud.agent.api.SetupCommand;
import com.cloud.agent.api.StartupCommand;
import com.cloud.agent.manager.AgentAttache;
import com.cloud.agent.manager.Commands;
import com.cloud.exception.AgentUnavailableException;
import com.cloud.exception.ConnectionException;
import com.cloud.exception.OperationTimedoutException;
import com.cloud.host.HostEnvironment;
import com.cloud.host.HostVO;
@ -49,7 +46,7 @@ import com.cloud.utils.component.ManagerBase;
public class DirectAgentManagerSimpleImpl extends ManagerBase implements AgentManager {
private static final Logger logger = Logger.getLogger(DirectAgentManagerSimpleImpl.class);
private Map<Long, ServerResource> hostResourcesMap = new HashMap<Long, ServerResource>();
private final Map<Long, ServerResource> hostResourcesMap = new HashMap<Long, ServerResource>();
@Inject
HostDao hostDao;
@Override
@ -192,24 +189,12 @@ public class DirectAgentManagerSimpleImpl extends ManagerBase implements AgentMa
return false;
}
@Override
public AgentAttache handleDirectConnectAgent(HostVO host, StartupCommand[] cmds, ServerResource resource, boolean forRebalance) throws ConnectionException {
// TODO Auto-generated method stub
return null;
}
@Override
public boolean agentStatusTransitTo(HostVO host, Event e, long msId) {
// TODO Auto-generated method stub
return false;
}
@Override
public AgentAttache findAttache(long hostId) {
// TODO Auto-generated method stub
return null;
}
@Override
public void disconnectWithoutInvestigation(long hostId, Event event) {
// TODO Auto-generated method stub

View File

@ -242,6 +242,4 @@ public interface ConfigurationManager extends ConfigurationService, Manager {
* @return
*/
String cleanupTags(String tags);
<T> ConfigValue<T> getConfig(Config config, Class<T> clazz);
}

View File

@ -65,6 +65,9 @@ import org.apache.cloudstack.api.command.admin.zone.CreateZoneCmd;
import org.apache.cloudstack.api.command.admin.zone.DeleteZoneCmd;
import org.apache.cloudstack.api.command.admin.zone.UpdateZoneCmd;
import org.apache.cloudstack.api.command.user.network.ListNetworkOfferingsCmd;
import org.apache.cloudstack.config.ConfigKey;
import org.apache.cloudstack.config.ConfigRepo;
import org.apache.cloudstack.config.ConfigValue;
import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
import org.apache.cloudstack.storage.datastore.db.StoragePoolDetailVO;
import org.apache.cloudstack.storage.datastore.db.StoragePoolDetailsDao;
@ -187,7 +190,7 @@ import com.cloud.vm.dao.NicDao;
import edu.emory.mathcs.backport.java.util.Arrays;
@Local(value = { ConfigurationManager.class, ConfigurationService.class })
public class ConfigurationManagerImpl extends ManagerBase implements ConfigurationManager, ConfigurationService {
public class ConfigurationManagerImpl extends ManagerBase implements ConfigurationManager, ConfigurationService, ConfigRepo {
public static final Logger s_logger = Logger.getLogger(ConfigurationManagerImpl.class.getName());
@Inject
@ -4485,7 +4488,7 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
}
@Override
public <T> ConfigValue<T> getConfig(Config config, Class<T> clazz) {
public <T> ConfigValue<T> get(ConfigKey<T> config) {
return new ConfigValue<T>(_configDao, config);
}
}

View File

@ -44,6 +44,9 @@ import org.apache.cloudstack.framework.messagebus.MessageBus;
import org.apache.cloudstack.messagebus.TopicConstants;
import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
import org.apache.cloudstack.storage.datastore.db.StoragePoolVO;
import org.apache.cloudstack.vm.jobs.VmWorkJobDao;
import org.apache.cloudstack.vm.jobs.VmWorkJobVO;
import org.apache.cloudstack.vm.jobs.VmWorkJobVO.Step;
import com.cloud.agent.AgentManager;
import com.cloud.agent.AgentManager.OnError;
@ -167,7 +170,6 @@ import com.cloud.utils.fsm.StateMachine2;
import com.cloud.vm.VirtualMachine.Event;
import com.cloud.vm.VirtualMachine.PowerState;
import com.cloud.vm.VirtualMachine.State;
import com.cloud.vm.VmWorkJobVO.Step;
import com.cloud.vm.dao.NicDao;
import com.cloud.vm.dao.UserVmDao;
import com.cloud.vm.dao.UserVmDetailsDao;

View File

@ -30,6 +30,8 @@ import org.apache.cloudstack.framework.jobs.AsyncJob;
import org.apache.cloudstack.framework.jobs.AsyncJobDispatcher;
import org.apache.cloudstack.framework.jobs.AsyncJobJoinMapVO;
import org.apache.cloudstack.framework.jobs.dao.AsyncJobJoinMapDao;
import org.apache.cloudstack.vm.jobs.VmWorkJobDao;
import org.apache.cloudstack.vm.jobs.VmWorkJobVO;
import com.cloud.api.ApiSerializerHelper;
import com.cloud.user.AccountVO;

View File

@ -46,11 +46,13 @@ import com.cloud.utils.LogUtils;
import com.cloud.utils.Predicate;
import com.cloud.utils.component.ComponentContext;
import com.cloud.utils.db.Transaction;
import com.cloud.vm.VmWorkJobVO.Step;
import com.google.gson.Gson;
import org.apache.cloudstack.framework.jobs.AsyncJobManager;
import org.apache.cloudstack.framework.jobs.AsyncJobVO;
import org.apache.cloudstack.vm.jobs.VmWorkJobDao;
import org.apache.cloudstack.vm.jobs.VmWorkJobVO;
import org.apache.cloudstack.vm.jobs.VmWorkJobVO.Step;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations="classpath:/VmWorkTestContext.xml")

View File

@ -25,6 +25,7 @@ import javax.inject.Inject;
import org.apache.cloudstack.framework.jobs.AsyncJob;
import org.apache.cloudstack.framework.jobs.AsyncJobDispatcher;
import org.apache.cloudstack.framework.jobs.AsyncJobManager;
import org.apache.cloudstack.vm.jobs.VmWorkJobVO;
import com.cloud.api.ApiSerializerHelper;
import com.cloud.async.AsyncJobExecutionContext;

View File

@ -33,6 +33,8 @@ import org.apache.cloudstack.framework.jobs.dao.SyncQueueDao;
import org.apache.cloudstack.framework.jobs.dao.SyncQueueDaoImpl;
import org.apache.cloudstack.framework.jobs.dao.SyncQueueItemDao;
import org.apache.cloudstack.framework.jobs.dao.SyncQueueItemDaoImpl;
import org.apache.cloudstack.vm.jobs.VmWorkJobDao;
import org.apache.cloudstack.vm.jobs.VmWorkJobDaoImpl;
import com.cloud.api.ApiDispatcher;
import com.cloud.cluster.ClusterManager;

View File

@ -29,13 +29,14 @@ import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.apache.cloudstack.vm.jobs.VmWorkJobDao;
import org.apache.cloudstack.vm.jobs.VmWorkJobVO;
import com.cloud.hypervisor.Hypervisor.HypervisorType;
import com.cloud.utils.db.Transaction;
import com.cloud.vm.UserVmVO;
import com.cloud.vm.VMInstanceVO;
import com.cloud.vm.VirtualMachine;
import com.cloud.vm.VmWorkJobDao;
import com.cloud.vm.VmWorkJobVO;
import junit.framework.Assert;
import junit.framework.TestCase;

View File

@ -20,6 +20,9 @@ import org.mockito.Mockito;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.apache.cloudstack.vm.jobs.VmWorkJobDao;
import org.apache.cloudstack.vm.jobs.VmWorkJobDaoImpl;
import com.cloud.cluster.agentlb.dao.HostTransferMapDao;
import com.cloud.cluster.agentlb.dao.HostTransferMapDaoImpl;
import com.cloud.dc.dao.ClusterDao;
@ -30,8 +33,6 @@ import com.cloud.host.dao.HostDaoImpl;
import com.cloud.host.dao.HostDetailsDao;
import com.cloud.host.dao.HostTagsDao;
import com.cloud.tags.dao.ResourceTagDao;
import com.cloud.vm.VmWorkJobDao;
import com.cloud.vm.VmWorkJobDaoImpl;
@Configuration
public class VmDaoTestConfiguration {

View File

@ -48,8 +48,6 @@ import org.apache.cloudstack.api.command.admin.zone.DeleteZoneCmd;
import org.apache.cloudstack.api.command.admin.zone.UpdateZoneCmd;
import org.apache.cloudstack.api.command.user.network.ListNetworkOfferingsCmd;
import com.cloud.configuration.Config;
import com.cloud.configuration.ConfigValue;
import com.cloud.configuration.Configuration;
import com.cloud.configuration.ConfigurationManager;
import com.cloud.configuration.ConfigurationService;
@ -633,10 +631,4 @@ public class MockConfigurationManagerImpl extends ManagerBase implements Configu
return false;
}
@Override
public <T> ConfigValue<T> getConfig(Config config, Class<T> clazz) {
// TODO Auto-generated method stub
return null;
}
}