http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7b7db056/server/src/com/cloud/vm/UserVmManagerImpl.java
----------------------------------------------------------------------
diff --cc server/src/com/cloud/vm/UserVmManagerImpl.java
index 52580b6,66103fb..ae96297
--- a/server/src/com/cloud/vm/UserVmManagerImpl.java
+++ b/server/src/com/cloud/vm/UserVmManagerImpl.java
@@@ -58,15 -59,16 +58,18 @@@ import org.apache.cloudstack.api.comman
  import org.apache.cloudstack.api.command.user.vm.UpgradeVMCmd;
  import org.apache.cloudstack.api.command.user.vmgroup.CreateVMGroupCmd;
  import org.apache.cloudstack.api.command.user.vmgroup.DeleteVMGroupCmd;
 +import org.apache.cloudstack.context.CallContext;
  import org.apache.cloudstack.engine.cloud.entity.api.VirtualMachineEntity;
  import org.apache.cloudstack.engine.service.api.OrchestrationService;
+ import org.apache.cloudstack.engine.subsystem.api.storage.TemplateDataFactory;
+ import org.apache.cloudstack.engine.subsystem.api.storage.TemplateInfo;
 +import org.apache.cloudstack.framework.jobs.AsyncJobManager;
 +import org.apache.cloudstack.framework.jobs.Outcome;
  import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
  import org.apache.cloudstack.storage.datastore.db.StoragePoolVO;
+ import org.apache.cloudstack.storage.to.TemplateObjectTO;
  
  import com.cloud.agent.AgentManager;
 -import com.cloud.agent.AgentManager.OnError;
  import com.cloud.agent.api.Answer;
  import com.cloud.agent.api.GetVmDiskStatsAnswer;
  import com.cloud.agent.api.GetVmDiskStatsCommand;
@@@ -75,11 -77,15 +78,11 @@@ import com.cloud.agent.api.GetVmStatsCo
  import com.cloud.agent.api.PvlanSetupCommand;
  import com.cloud.agent.api.StartAnswer;
  import com.cloud.agent.api.StopAnswer;
 -import com.cloud.agent.api.UnPlugNicAnswer;
 -import com.cloud.agent.api.UnPlugNicCommand;
  import com.cloud.agent.api.VmDiskStatsEntry;
  import com.cloud.agent.api.VmStatsEntry;
+ import com.cloud.agent.api.to.DiskTO;
  import com.cloud.agent.api.to.NicTO;
  import com.cloud.agent.api.to.VirtualMachineTO;
- import com.cloud.agent.api.to.VolumeTO;
  import com.cloud.agent.manager.Commands;
  import com.cloud.alert.AlertManager;
  import com.cloud.api.ApiDBUtils;
@@@ -1702,7 -1708,8 +1700,8 @@@ public class UserVmManagerImpl extends 
          Long id = cmd.getId();
          Long osTypeId = cmd.getOsTypeId();
          String userData = cmd.getUserData();
 +        Account caller = CallContext.current().getCallingAccount();
+         Boolean isDynamicallyScalable = cmd.isDynamicallyScalable();
 -        Account caller = UserContext.current().getCaller();
  
          // Input validation
          UserVmVO vmInstance = null;
@@@ -2869,30 -2893,11 +2885,11 @@@
          vm.setDetails(details);
  
          if (vm.getIsoId() != null) {
-             String isoPath = null;
- 
-             VirtualMachineTemplate template = _templateDao.findById(vm
-                     .getIsoId());
-             if (template == null || template.getFormat() != ImageFormat.ISO) {
-                 throw new CloudRuntimeException(
-                         "Can not find ISO in vm_template table for id "
-                                 + vm.getIsoId());
-             }
- 
-             Pair<String, String> isoPathPair = templateMgr.getAbsoluteIsoPath(
-                     template.getId(), vm.getDataCenterId());
- 
-             if (template.getTemplateType() == TemplateType.PERHOST) {
-                 isoPath = template.getName();
-             } else {
-                 if (isoPathPair == null) {
-                     s_logger.warn("Couldn't get absolute iso path");
-                     return false;
-                 } else {
-                     isoPath = isoPathPair.first();
 -            TemplateInfo template = 
this.templateMgr.prepareIso(vm.getIsoId(), vm.getDataCenterId());
++            TemplateInfo template = templateMgr.prepareIso(vm.getIsoId(), 
vm.getDataCenterId());
+             if (template == null){
+                 s_logger.error("Failed to prepare ISO on secondary or cache 
storage");
+                 throw new CloudRuntimeException("Failed to prepare ISO on 
secondary or cache storage");
 -            }
 +                }
-             }
- 
              if (template.isBootable()) {
                  profile.setBootLoaderType(BootloaderType.CD);
              }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7b7db056/server/test/com/cloud/agent/MockAgentManagerImpl.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7b7db056/server/test/com/cloud/async/TestAsyncJobManager.java
----------------------------------------------------------------------
diff --cc server/test/com/cloud/async/TestAsyncJobManager.java
index 6b4788b,e323393..8e27247
--- a/server/test/com/cloud/async/TestAsyncJobManager.java
+++ b/server/test/com/cloud/async/TestAsyncJobManager.java
@@@ -223,24 -157,96 +223,24 @@@ public class TestAsyncJobManager extend
                                }
                        }
                });
 -
 -              t1.start();
 -              t2.start();
 -
 -              try {
 -                      t1.join();
 -                      t2.join();
 -              } catch (InterruptedException e) {
 -              }
 -      }
 -     */
 -
 -    private long getRandomLockId() {
 -        return 1L;
 -
 -        /*
 -         *  will use in the future test cases
 -              int i = new Random().nextInt();
 -              if(i % 2 == 0)
 -                      return 1L;
 -              return 2L;
 -         */
 -    }
 -
 -    public void tstLocking() {
 -
 -        int testThreads = 20;
 -        Thread[] threads = new Thread[testThreads];
 -
 -        for(int i = 0; i < testThreads; i++) {
 -            final int current = i;
 -            threads[i] = new Thread(new Runnable() {
 -                @Override
 -                public void run() {
 -
 -                    final HostDao hostDao = new HostDaoImpl();
 -                    while(true) {
 -                        Transaction txn = Transaction.currentTxn();
 -                        try {
 -                            HostVO host = 
hostDao.acquireInLockTable(getRandomLockId(), 10);
 -                            if(host != null) {
 -                                s_logger.info("Thread " + (current + 1) + " 
acquired lock");
 -
 -                                try { Thread.sleep(1000); } catch 
(InterruptedException e) {}
 -
 -                                s_logger.info("Thread " + (current + 1) + " 
released lock");
 -                                hostDao.releaseFromLockTable(host.getId());
 -
 -                                try { Thread.sleep(1000); } catch 
(InterruptedException e) {}
 -                            } else {
 -                                s_logger.info("Thread " + (current + 1) + " 
is not able to acquire lock");
 -                            }
 -                        } finally {
 -                            txn.close();
 -                        }
 -                    }
 -                }
 -            });
 -            threads[i].start();
 -        }
 -
 -        try {
 -            for(int i = 0; i < testThreads; i++)
 -                threads[i].join();
 -        } catch(InterruptedException e) {
 -        }
 -    }
 -
 -    public void testDomain() {
 -        DomainDao domainDao = new DomainDaoImpl();
 -
 -              DomainVO domain1 = new DomainVO("d1", 2L, 1L, null, 1);
 -        domainDao.create(domain1);
 -
 -              DomainVO domain2 = new DomainVO("d2", 2L, 1L, null, 1);
 -        domainDao.create(domain2);
 -
 -              DomainVO domain3 = new DomainVO("d3", 2L, 1L, null, 1);
 -        domainDao.create(domain3);
 -
 -              DomainVO domain11 = new DomainVO("d11", 2L, domain1.getId(), 
null, 1);
 -        domainDao.create(domain11);
 -
 -        domainDao.remove(domain11.getId());
 -
 -              DomainVO domain12 = new DomainVO("d12", 2L, domain1.getId(), 
null, 1);
 -        domainDao.create(domain12);
 -
 -        domainDao.remove(domain3.getId());
 -              DomainVO domain4 = new DomainVO("d4", 2L, 1L, null, 1);
 -        domainDao.create(domain4);
 +              thread.start();
 +    
 +              jobMonitor.registerActiveTask(1, 1);
 +              
-       asyncMgr.waitAndCheck(new String[] {"VM"}, 5000L, 10000L, new 
Predicate() {
++        asyncMgr.waitAndCheck(new AsyncJobVO(), new String[] {"VM"}, 5000L, 
10000L, new Predicate() {
 +              @Override
 +            public boolean checkCondition() {
 +                      System.out.println("Check condition to exit");
 +                messageBus.publish(null, AsyncJob.Topics.JOB_HEARTBEAT, 
PublishScope.LOCAL, 1L);
 +                      return false;
 +              }
 +      });
 +      
 +              jobMonitor.unregisterActiveTask(1);
 +      
 +      try {
 +              thread.join();
 +      } catch(InterruptedException e) {
 +      }
      }
  }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7b7db056/server/test/com/cloud/network/DedicateGuestVlanRangesTest.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7b7db056/server/test/com/cloud/vm/VmWorkMockVirtualMachineManagerImpl.java
----------------------------------------------------------------------
diff --cc server/test/com/cloud/vm/VmWorkMockVirtualMachineManagerImpl.java
index d4ded07,0000000..cc6b906
mode 100644,000000..100644
--- a/server/test/com/cloud/vm/VmWorkMockVirtualMachineManagerImpl.java
+++ b/server/test/com/cloud/vm/VmWorkMockVirtualMachineManagerImpl.java
@@@ -1,327 -1,0 +1,325 @@@
 +// 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 com.cloud.vm;
 +
 +import java.net.URI;
 +import java.util.List;
 +import java.util.Map;
 +
 +import javax.inject.Inject;
 +import javax.naming.ConfigurationException;
 +
 +import org.apache.log4j.Logger;
 +
 +import org.apache.cloudstack.framework.jobs.AsyncJobExecutionContext;
 +import org.apache.cloudstack.framework.jobs.Outcome;
 +import org.apache.cloudstack.framework.messagebus.MessageBus;
 +import org.apache.cloudstack.jobs.JobInfo;
 +
 +import com.cloud.agent.api.to.NicTO;
 +import com.cloud.agent.api.to.VirtualMachineTO;
 +import com.cloud.deploy.DeployDestination;
 +import com.cloud.deploy.DeploymentPlan;
 +import com.cloud.exception.AgentUnavailableException;
 +import com.cloud.exception.ConcurrentOperationException;
 +import com.cloud.exception.InsufficientCapacityException;
 +import com.cloud.exception.InsufficientServerCapacityException;
 +import com.cloud.exception.ManagementServerException;
 +import com.cloud.exception.OperationTimedoutException;
 +import com.cloud.exception.ResourceUnavailableException;
 +import com.cloud.exception.VirtualMachineMigrationException;
 +import com.cloud.hypervisor.Hypervisor.HypervisorType;
 +import com.cloud.network.Network;
 +import com.cloud.network.dao.NetworkVO;
 +import com.cloud.offering.ServiceOffering;
 +import com.cloud.service.ServiceOfferingVO;
 +import com.cloud.storage.DiskOfferingVO;
 +import com.cloud.storage.StoragePool;
 +import com.cloud.storage.VMTemplateVO;
 +import com.cloud.storage.Volume;
 +import com.cloud.user.Account;
 +import com.cloud.utils.Pair;
 +import com.cloud.utils.fsm.NoTransitionException;
 +import com.cloud.vm.VirtualMachine.Event;
 +import com.cloud.vm.VirtualMachine.Type;
 +import com.cloud.vm.VirtualMachineProfile.Param;
 +
 +public class VmWorkMockVirtualMachineManagerImpl implements 
VirtualMachineManager {
 +    private static final Logger s_logger = 
Logger.getLogger(VmWorkMockVirtualMachineManagerImpl.class);
 +      
 +      @Inject MessageBus _msgBus;
 +      
 +      @Override
 +      public String getName() {
 +              // TODO Auto-generated method stub
 +              return null;
 +      }
 +
 +      @Override
 +      public void setName(String name) {
 +              // TODO Auto-generated method stub
 +      }
 +
 +      @Override
 +      public void setConfigParams(Map<String, Object> params) {
 +              // TODO Auto-generated method stub
 +              
 +      }
 +
 +      @Override
 +      public Map<String, Object> getConfigParams() {
 +              // TODO Auto-generated method stub
 +              return null;
 +      }
 +
 +      @Override
 +      public int getRunLevel() {
 +              // TODO Auto-generated method stub
 +              return 0;
 +      }
 +
 +      @Override
 +      public void setRunLevel(int level) {
 +              // TODO Auto-generated method stub
 +              
 +      }
 +
 +      @Override
 +      public boolean configure(String name, Map<String, Object> params)
 +                      throws ConfigurationException {
 +              // TODO Auto-generated method stub
 +              return false;
 +      }
 +
 +      @Override
 +      public boolean start() {
 +              // TODO Auto-generated method stub
 +              return false;
 +      }
 +
 +      @Override
 +      public boolean stop() {
 +              // TODO Auto-generated method stub
 +              return false;
 +      }
 +
 +      @Override
 +    public boolean allocate(String vmInstanceName, VMTemplateVO template,
 +                      ServiceOfferingVO serviceOffering,
 +                      Pair<? extends DiskOfferingVO, Long> rootDiskOffering,
 +                      List<Pair<DiskOfferingVO, Long>> dataDiskOfferings,
 +                      List<Pair<NetworkVO, NicProfile>> networks,
 +                      Map<Param, Object> params, DeploymentPlan plan,
 +            HypervisorType hyperType, Account owner) {
 +              // TODO Auto-generated method stub
 +        return false;
 +      }
 +
 +
 +      @Override
 +    public boolean allocate(String vmInstanceName, VMTemplateVO template,
 +                      ServiceOfferingVO serviceOffering,
 +                      List<Pair<NetworkVO, NicProfile>> networkProfiles,
 +            DeploymentPlan plan, HypervisorType hyperType, Account owner) {
 +              // TODO Auto-generated method stub
 +        return false;
 +      }
 +
 +      @Override
 +    public void easyStart(String vmUuid, Map<Param, Object> params) {
 +              // TODO Auto-generated method stub
 +      }
 +
 +      @Override
 +    public void easyStart(String vmUuid, Map<Param, Object> params, 
DeploymentPlan planToDeploy) {
 +              // TODO Auto-generated method stub
 +      }
 +
 +      @Override
 +    public void easyStop(String vmUuid) {
 +              // TODO Auto-generated method stub
 +      }
 +
 +      @Override
 +    public void expunge(String vmUuid) {
 +              // TODO Auto-generated method stub
 +      }
 +
 +      @Override
 +    public void registerGuru(Type type, VirtualMachineGuru guru) {
 +              // TODO Auto-generated method stub
 +              
 +      }
 +
 +      @Override
 +      public boolean stateTransitTo(VMInstanceVO vm, Event e, Long hostId)
 +                      throws NoTransitionException {
 +              // TODO Auto-generated method stub
 +              return false;
 +      }
 +
 +      @Override
 +    public Outcome<VirtualMachine> start(String vmUuid, Map<Param, Object> 
params,
 +            DeploymentPlan planToDeploy) {
 +        return null;
 +      }
 +
 +      @Override
 +    public Outcome<VirtualMachine> stop(String vmUuid, boolean forced) {
 +        return null;
 +      }
 +
 +      @Override
 +    public void advanceExpunge(String vmUuid) throws 
ResourceUnavailableException,
 +                      OperationTimedoutException, 
ConcurrentOperationException {
 +              // TODO Auto-generated method stub
 +      }
 +
 +      @Override
 +    public boolean destroy(String vmUuid) throws AgentUnavailableException,
 +                      OperationTimedoutException, 
ConcurrentOperationException {
 +              // TODO Auto-generated method stub
 +              return false;
 +      }
 +
 +      @Override
 +      public boolean migrateAway(Type type, long vmid, long hostId)
 +                      throws InsufficientServerCapacityException,
 +                      VirtualMachineMigrationException {
 +              // TODO Auto-generated method stub
 +              return false;
 +      }
 +
 +      @Override
-     public VirtualMachine migrate(String vmUuid, long srcHostId,
-                       DeployDestination dest) throws 
ResourceUnavailableException,
-                       ConcurrentOperationException, ManagementServerException,
-                       VirtualMachineMigrationException {
++    public Outcome<VirtualMachine> migrate(String vmUuid, long srcHostId,
++            DeployDestination dest) {
 +              // TODO Auto-generated method stub
 +              return null;
 +      }
 +
 +      @Override
 +    public void reboot(String vmUuid) {
 +              // TODO Auto-generated method stub
 +      }
 +
 +      @Override
 +    public void advanceReboot(String vmUuid)
 +                      throws InsufficientCapacityException, 
ResourceUnavailableException,
 +                      ConcurrentOperationException, 
OperationTimedoutException {
 +              // TODO Auto-generated method stub
 +      }
 +
 +      @Override
 +    public VirtualMachine storageMigration(String vmUuid,
 +                      StoragePool storagePoolId) {
 +              // TODO Auto-generated method stub
 +              return null;
 +      }
 +
 +      @Override
 +      public void checkIfCanUpgrade(VirtualMachine vmInstance,
 +                      long newServiceOfferingId) {
 +              // TODO Auto-generated method stub
 +              
 +      }
 +
 +      @Override
 +      public boolean upgradeVmDb(long vmId, long serviceOfferingId) {
 +              // TODO Auto-generated method stub
 +              return false;
 +      }
 +
 +      @Override
 +      public NicProfile addVmToNetwork(VirtualMachine vm, Network network,
 +                      NicProfile requested) throws 
ConcurrentOperationException,
 +                      ResourceUnavailableException, 
InsufficientCapacityException {
 +              // TODO Auto-generated method stub
 +              return null;
 +      }
 +
 +      @Override
 +      public boolean removeNicFromVm(VirtualMachine vm, NicVO nic)
 +                      throws ConcurrentOperationException, 
ResourceUnavailableException {
 +              // TODO Auto-generated method stub
 +              return false;
 +      }
 +
 +      @Override
 +      public boolean removeVmFromNetwork(VirtualMachine vm, Network network,
 +                      URI broadcastUri) throws ConcurrentOperationException,
 +                      ResourceUnavailableException {
 +              // TODO Auto-generated method stub
 +              return false;
 +      }
 +
 +      @Override
 +      public NicTO toNicTO(NicProfile nic, HypervisorType hypervisorType) {
 +              // TODO Auto-generated method stub
 +              return null;
 +      }
 +
 +      @Override
 +      public VirtualMachineTO toVmTO(
 +                      VirtualMachineProfile profile) {
 +              // TODO Auto-generated method stub
 +              return null;
 +      }
 +
 +      @Override
 +    public boolean reConfigureVm(VirtualMachine vm,
 +                      ServiceOffering newServiceOffering, boolean sameHost)
 +                      throws ResourceUnavailableException, 
ConcurrentOperationException {
 +              // TODO Auto-generated method stub
 +        return false;
 +      }
 +
 +      @Override
 +    public boolean findHostAndMigrate(String vmUUid,
 +                      Long newSvcOfferingId) throws 
InsufficientCapacityException,
 +                      ConcurrentOperationException, 
ResourceUnavailableException,
 +                      VirtualMachineMigrationException, 
ManagementServerException {
 +              // TODO Auto-generated method stub
 +        return false;
 +      }
 +
 +      @Override
 +    public boolean migrateForScale(String vmUuid, long srcHostId,
 +                      DeployDestination dest, Long newSvcOfferingId)
 +                      throws ResourceUnavailableException, 
ConcurrentOperationException,
 +                      ManagementServerException, 
VirtualMachineMigrationException {
 +              // TODO Auto-generated method stub
 +        return false;
 +      }
 +
 +      int wakeupCount = 0;
 +      public void processVmStartWakeup() {
 +              s_logger.info("processVmStartWakeup. job-" + 
AsyncJobExecutionContext.getCurrentExecutionContext().getJob().getId());
 +              
 +              if(wakeupCount++ < 3) {
 +                      
AsyncJobExecutionContext.getCurrentExecutionContext().resetSyncSource();
 +              } else {
 +                      
AsyncJobExecutionContext.getCurrentExecutionContext().completeAsyncJob(JobInfo.Status.SUCCEEDED,
 0, null);
 +              }
 +      }
 +      
 +    @Override
 +    public VirtualMachine migrateWithStorage(String vmUuid, long srcId, long 
destId, Map<Volume, StoragePool> volumeToPool) throws 
ResourceUnavailableException,
 +            ConcurrentOperationException, ManagementServerException, 
VirtualMachineMigrationException {
 +        // TODO Auto-generated method stub
 +        return null;
 +    }
 +}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7b7db056/server/test/com/cloud/vpc/MockConfigurationManagerImpl.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7b7db056/server/test/org/apache/cloudstack/networkoffering/ChildTestConfiguration.java
----------------------------------------------------------------------
diff --cc 
server/test/org/apache/cloudstack/networkoffering/ChildTestConfiguration.java
index 2fe9dda,6398e20..89c1fe9
--- 
a/server/test/org/apache/cloudstack/networkoffering/ChildTestConfiguration.java
+++ 
b/server/test/org/apache/cloudstack/networkoffering/ChildTestConfiguration.java
@@@ -29,14 -35,7 +29,15 @@@ import org.springframework.core.type.cl
  import org.springframework.core.type.classreading.MetadataReaderFactory;
  import org.springframework.core.type.filter.TypeFilter;
  
 +import org.apache.cloudstack.acl.SecurityChecker;
 +import org.apache.cloudstack.context.CallContext;
+ import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager;
 +import org.apache.cloudstack.region.PortableIpDaoImpl;
 +import org.apache.cloudstack.region.PortableIpRangeDaoImpl;
 +import org.apache.cloudstack.region.dao.RegionDaoImpl;
 +import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDaoImpl;
 +import org.apache.cloudstack.test.utils.SpringUtils;
 +
  import com.cloud.agent.AgentManager;
  import com.cloud.alert.AlertManager;
  import com.cloud.api.query.dao.UserAccountJoinDaoImpl;
@@@ -357,10 -363,10 +357,10 @@@ public class ChildTestConfiguration 
      public AccountDetailsDao accountDetailsDao() {
          return Mockito.mock(AccountDetailsDao.class);
      }
 -
 +    
      @Bean
-     public ConfigurationManager configurationMgr() {
-       return Mockito.mock(ConfigurationManager.class);
+     public DataStoreManager dataStoreManager() {
+         return Mockito.mock(DataStoreManager.class);
      }
  
      public static class Library implements TypeFilter {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7b7db056/server/test/org/apache/cloudstack/networkoffering/CreateNetworkOfferingTest.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7b7db056/setup/db/db/schema-410to420.sql
----------------------------------------------------------------------
diff --cc setup/db/db/schema-410to420.sql
index 2046f6c,325924b..75088e5
--- a/setup/db/db/schema-410to420.sql
+++ b/setup/db/db/schema-410to420.sql
@@@ -86,9 -94,135 +94,141 @@@ CREATE TABLE `cloud`.`image_store` 
    PRIMARY KEY(`id`)
  ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  
++<<<<<<< HEAD
 +ALTER TABLE `cloud`.`async_job` ADD COLUMN `related` CHAR(40) NOT NULL;
 +
 +ALTER TABLE `cloud`.`vm_template` ADD COLUMN `image_data_store_id` bigint 
unsigned;
++=======
+ CREATE TABLE `cloud`.`image_store_details` (
+   `id` bigint unsigned UNIQUE NOT NULL AUTO_INCREMENT COMMENT 'id',
+   `store_id` bigint unsigned NOT NULL COMMENT 'store the detail is related 
to',
+   `name` varchar(255) NOT NULL COMMENT 'name of the detail',
+   `value` varchar(255) NOT NULL COMMENT 'value of the detail',
+   PRIMARY KEY (`id`),
+   CONSTRAINT `fk_image_store_details__store_id` FOREIGN KEY 
`fk_image_store__store_id`(`store_id`) REFERENCES `image_store`(`id`) ON DELETE 
CASCADE,
+   INDEX `i_image_store__name__value`(`name`(128), `value`(128))
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+ 
+ DROP VIEW IF EXISTS `cloud`.`image_store_view`;
+ CREATE VIEW `cloud`.`image_store_view` AS
+     select 
+         image_store.id,
+         image_store.uuid,
+         image_store.name,
+         image_store.image_provider_name,
+         image_store.protocol,
+         image_store.url,
+         image_store.scope,
+         image_store.role,
+         image_store.removed,
+         data_center.id data_center_id,
+         data_center.uuid data_center_uuid,
+         data_center.name data_center_name,
+         image_store_details.name detail_name,
+         image_store_details.value detail_value
+     from
+         `cloud`.`image_store`
+             left join
+         `cloud`.`data_center` ON image_store.data_center_id = data_center.id
+             left join
+         `cloud`.`image_store_details` ON image_store_details.store_id = 
image_store.id;
+ 
+             
+ -- here we have to allow null for store_id to accomodate baremetal case to 
search for ready templates since template state is only stored in this table
+ -- FK also commented out due to this            
+ CREATE TABLE  `cloud`.`template_store_ref` (
+   `id` bigint unsigned NOT NULL auto_increment,
+   `store_id` bigint unsigned,
+   `template_id` bigint unsigned NOT NULL,
+   `created` DATETIME NOT NULL,
+   `last_updated` DATETIME,
+   `job_id` varchar(255),
+   `download_pct` int(10) unsigned,
+   `size` bigint unsigned,
+   `store_role` varchar(255),  
+   `physical_size` bigint unsigned DEFAULT 0,
+   `download_state` varchar(255),
+   `error_str` varchar(255),
+   `local_path` varchar(255),
+   `install_path` varchar(255),
+   `url` varchar(255),
+   `state` varchar(255) NOT NULL,
+   `destroyed` tinyint(1) COMMENT 'indicates whether the template_store entry 
was destroyed by the user or not',
+   `is_copy` tinyint(1) NOT NULL DEFAULT 0 COMMENT 'indicates whether this was 
copied ',
+   `update_count` bigint unsigned,
+   `ref_cnt` bigint unsigned,
+   `updated` datetime, 
+   PRIMARY KEY  (`id`),
+ --  CONSTRAINT `fk_template_store_ref__store_id` FOREIGN KEY 
`fk_template_store_ref__store_id` (`store_id`) REFERENCES `image_store` (`id`) 
ON DELETE CASCADE,
+   INDEX `i_template_store_ref__store_id`(`store_id`),
+   CONSTRAINT `fk_template_store_ref__template_id` FOREIGN KEY 
`fk_template_store_ref__template_id` (`template_id`) REFERENCES `vm_template` 
(`id`),
+   INDEX `i_template_store_ref__template_id`(`template_id`)
+ ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
+ 
+ -- ALTER TABLE `cloud`.`vm_template` ADD COLUMN `image_data_store_id` bigint 
unsigned;
+ 
+ -- Do we still need these columns? TODO, to delete them, remove FK 
constraints from snapshots table
+ -- ALTER TABLE `cloud`.`snapshots` DROP COLUMN `swift_id`;
+ -- ALTER TABLE `cloud`.`snapshots` DROP COLUMN `s3_id`;
+ -- ALTER TABLE `cloud`.`snapshots` DROP COLUMN `sechost_id`;
+ 
+ -- change upload host_id FK to point to image_store table
+ ALTER TABLE `cloud`.`upload` DROP FOREIGN KEY `fk_upload__host_id`; 
+ ALTER TABLE `cloud`.`upload` ADD CONSTRAINT `fk_upload__store_id` FOREIGN 
KEY(`host_id`) REFERENCES `image_store` (`id`) ON DELETE CASCADE;
+ 
+ CREATE TABLE  `cloud`.`snapshot_store_ref` (
+   `id` bigint unsigned NOT NULL auto_increment,
+   `store_id` bigint unsigned NOT NULL,
+   `snapshot_id` bigint unsigned NOT NULL,
+   `created` DATETIME NOT NULL,
+   `last_updated` DATETIME,
+   `job_id` varchar(255),
+   `store_role` varchar(255),
+   `size` bigint unsigned,
+   `physical_size` bigint unsigned DEFAULT 0,
+   `parent_snapshot_id` bigint unsigned DEFAULT 0,
+   `install_path` varchar(255),
+   `state` varchar(255) NOT NULL,  
+   -- `removed` datetime COMMENT 'date removed if not null',  
+   `update_count` bigint unsigned,
+   `ref_cnt` bigint unsigned,
+   `updated` datetime,   
+   PRIMARY KEY  (`id`),
+   INDEX `i_snapshot_store_ref__store_id`(`store_id`),
+   CONSTRAINT `fk_snapshot_store_ref__snapshot_id` FOREIGN KEY 
`fk_snapshot_store_ref__snapshot_id` (`snapshot_id`) REFERENCES `snapshots` 
(`id`),
+   INDEX `i_snapshot_store_ref__snapshot_id`(`snapshot_id`)
+ ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
+ 
+ CREATE TABLE  `cloud`.`volume_store_ref` (
+   `id` bigint unsigned NOT NULL auto_increment,
+   `store_id` bigint unsigned NOT NULL,
+   `volume_id` bigint unsigned NOT NULL,
+   `zone_id` bigint unsigned NOT NULL,
+   `created` DATETIME NOT NULL,
+   `last_updated` DATETIME,
+   `job_id` varchar(255),
+   `download_pct` int(10) unsigned,
+   `size` bigint unsigned,
+   `physical_size` bigint unsigned DEFAULT 0,
+   `download_state` varchar(255),
+   `checksum` varchar(255) COMMENT 'checksum for the data disk',
+   `error_str` varchar(255),
+   `local_path` varchar(255),
+   `install_path` varchar(255),
+   `url` varchar(255),
+   `state` varchar(255) NOT NULL,  
+   `destroyed` tinyint(1) COMMENT 'indicates whether the volume_host entry was 
destroyed by the user or not',
+   `update_count` bigint unsigned,
+   `ref_cnt` bigint unsigned,
+   `updated` datetime,   
+   PRIMARY KEY  (`id`),
+   CONSTRAINT `fk_volume_store_ref__store_id` FOREIGN KEY 
`fk_volume_store_ref__store_id` (`store_id`) REFERENCES `image_store` (`id`) ON 
DELETE CASCADE,
+   INDEX `i_volume_store_ref__store_id`(`store_id`),
+   CONSTRAINT `fk_volume_store_ref__volume_id` FOREIGN KEY 
`fk_volume_store_ref__volume_id` (`volume_id`) REFERENCES `volumes` (`id`),
+   INDEX `i_volume_store_ref__volume_id`(`volume_id`)
+ ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
+ 
++>>>>>>> master
  
  ALTER TABLE `cloud`.`service_offering` ADD COLUMN `is_volatile` tinyint(1) 
unsigned NOT NULL DEFAULT 0  COMMENT 'true if the vm needs to be volatile, 
i.e., on every reboot of vm from API root disk is discarded and creates a new 
root disk';
  
@@@ -1632,10 -1718,13 +1791,13 @@@ CREATE VIEW `cloud`.`user_vm_view` A
          `cloud`.`async_job` ON async_job.instance_id = vm_instance.id
              and async_job.instance_type = 'VirtualMachine'
              and async_job.job_status = 0
 -            left join
 -        `cloud`.`affinity_group_vm_map` ON vm_instance.id = 
affinity_group_vm_map.instance_id
 -            left join
 +      left join 
 +      `cloud`.`affinity_group_vm_map` ON vm_instance.id = 
affinity_group_vm_map.instance_id
 +      left join 
-       `cloud`.`affinity_group` ON affinity_group_vm_map.affinity_group_id = 
affinity_group.id;
+         `cloud`.`affinity_group` ON affinity_group_vm_map.affinity_group_id = 
affinity_group.id
+             left join
+         `cloud`.`user_vm_details` vm_details ON vm_details.vm_id = 
vm_instance.id
+             and vm_details.name = 'enable.dynamic.scaling';
  
  DROP VIEW IF EXISTS `cloud`.`volume_view`;
  CREATE VIEW `cloud`.`volume_view` AS
@@@ -1766,7 -1960,10 +2033,10 @@@ CREATE TABLE `cloud`.`account_vnet_map
  
  ALTER TABLE `cloud`.`op_dc_vnet_alloc` ADD COLUMN account_vnet_map_id bigint 
unsigned;
  ALTER TABLE `cloud`.`op_dc_vnet_alloc` ADD CONSTRAINT 
`fk_op_dc_vnet_alloc__account_vnet_map_id` FOREIGN KEY 
`fk_op_dc_vnet_alloc__account_vnet_map_id` (`account_vnet_map_id`) REFERENCES 
`account_vnet_map` (`id`);
 -            
 +
+  update  `cloud`.`vm_template` set state='Allocated' where state is NULL;
+  update  `cloud`.`vm_template` set update_count=0 where update_count is NULL;
+ 
  CREATE TABLE `cloud`.`network_acl` (
    `id` bigint unsigned NOT NULL auto_increment COMMENT 'id',
    `name` varchar(255) NOT NULL COMMENT 'name of the network acl',

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7b7db056/tools/devcloud/devcloud.cfg
----------------------------------------------------------------------
diff --cc tools/devcloud/devcloud.cfg
index 353a259,e209b55..5abea54
--- a/tools/devcloud/devcloud.cfg
+++ b/tools/devcloud/devcloud.cfg
@@@ -84,10 -84,12 +84,12 @@@
              "internaldns1": "192.168.56.1", 
              "secondaryStorages": [
                  {
-                     "url": "nfs://192.168.56.10:/opt/storage/secondary"
+                     "url": "nfs://192.168.56.10/opt/storage/secondary",
+                     "provider": "NFS",
+                     "details": [ ]
 -                 }
 +                }
              ]
 -         }
 +        }
      ], 
      "logger": [
          {

Reply via email to