cloudstack-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From mlsoren...@apache.org
Subject git commit: updated refs/heads/master to fc08283
Date Fri, 10 Jan 2014 18:56:19 GMT
Updated Branches:
  refs/heads/master 6fdebe592 -> fc082832d


CLOUDSTACK-5853
Create two storage pools, one with storage tag X, one with storage tag Y.
Create a service offering with storage tag X.
Create a disk offering with storage tag Y.
Attempt to deploy a virtual machine with a datadisk, using given offerings, it fails.

Deployment planner keeps a global object 'avoid'. It loops through each volume to
be created, asking storage allocators for matching pools, passing this avoid object.

First disk matches a pool or pools, adds ALL other pools to avoid object, then
deployment planner attaches matching pools to a list for that disk.

Second disk matches a pool, adds all other pools to avoid object, then deployment
planner says "wait, matching pool is in avoid, can't use it". Oops. In fact, at this
point ALL pools are in avoid (unless there are other pools that have both tags).

Need to remove matching pool from the avoid set during each select phase.


Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/fc082832
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/fc082832
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/fc082832

Branch: refs/heads/master
Commit: fc082832d3f9741cb06f09593e58db78e8c887d8
Parents: 6fdebe5
Author: Marcus Sorensen <marcus@betterservers.com>
Authored: Fri Jan 10 11:02:35 2014 -0700
Committer: Marcus Sorensen <marcus@betterservers.com>
Committed: Fri Jan 10 11:55:54 2014 -0700

----------------------------------------------------------------------
 api/src/com/cloud/deploy/DeploymentPlanner.java              | 6 ++++++
 .../storage/allocator/ClusterScopeStoragePoolAllocator.java  | 8 ++++++++
 .../storage/allocator/ZoneWideStoragePoolAllocator.java      | 6 ++++++
 3 files changed, 20 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/fc082832/api/src/com/cloud/deploy/DeploymentPlanner.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/deploy/DeploymentPlanner.java b/api/src/com/cloud/deploy/DeploymentPlanner.java
index 0dccf3d..eb62cb1 100644
--- a/api/src/com/cloud/deploy/DeploymentPlanner.java
+++ b/api/src/com/cloud/deploy/DeploymentPlanner.java
@@ -176,6 +176,12 @@ public interface DeploymentPlanner extends Adapter {
             _poolIds.add(poolId);
         }
 
+        public void removePool(long poolId) {
+            if (_poolIds != null) {
+                _poolIds.remove(poolId);
+            }
+        }
+
         public void addDataCenter(long dataCenterId) {
             if (_dcIds == null) {
                 _dcIds = new HashSet<Long>();

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/fc082832/engine/storage/src/org/apache/cloudstack/storage/allocator/ClusterScopeStoragePoolAllocator.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/allocator/ClusterScopeStoragePoolAllocator.java
b/engine/storage/src/org/apache/cloudstack/storage/allocator/ClusterScopeStoragePoolAllocator.java
index 35737ed..af22810 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/allocator/ClusterScopeStoragePoolAllocator.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/allocator/ClusterScopeStoragePoolAllocator.java
@@ -77,14 +77,22 @@ public class ClusterScopeStoragePoolAllocator extends AbstractStoragePoolAllocat
         }
 
         List<StoragePoolVO> pools = _storagePoolDao.findPoolsByTags(dcId, podId, clusterId,
dskCh.getTags());
+        s_logger.debug("Found pools matching tags: " + pools);
 
         // add remaining pools in cluster, that did not match tags, to avoid set
         List<StoragePoolVO> allPools = _storagePoolDao.findPoolsByTags(dcId, podId,
clusterId, null);
         allPools.removeAll(pools);
         for (StoragePoolVO pool : allPools) {
+            s_logger.debug("Adding pool " + pool + " to avoid set since it did not match
tags");
             avoid.addPool(pool.getId());
         }
 
+        // make sure our matching pool was not in avoid set
+        for (StoragePoolVO pool : pools) {
+            s_logger.debug("Removing pool " + pool + " from avoid set, must have been inserted
when searching for another disk's tag");
+            avoid.removePool(pool.getId());
+        }
+
         if (pools.size() == 0) {
             if (s_logger.isDebugEnabled()) {
                 s_logger.debug("No storage pools available for " + ServiceOffering.StorageType.shared.toString()
+ " volume allocation, returning");

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/fc082832/engine/storage/src/org/apache/cloudstack/storage/allocator/ZoneWideStoragePoolAllocator.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/allocator/ZoneWideStoragePoolAllocator.java
b/engine/storage/src/org/apache/cloudstack/storage/allocator/ZoneWideStoragePoolAllocator.java
index 57253a7..8fb9c8d 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/allocator/ZoneWideStoragePoolAllocator.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/allocator/ZoneWideStoragePoolAllocator.java
@@ -89,6 +89,12 @@ public class ZoneWideStoragePoolAllocator extends AbstractStoragePoolAllocator
{
             avoid.addPool(pool.getId());
         }
 
+        // make sure our matching pool was not in avoid set
+        for (StoragePoolVO pool : storagePoolsByHypervisor) {
+            s_logger.debug("Removing pool " + pool + " from avoid set, must have been inserted
when searching for another disk's tag");
+            avoid.removePool(pool.getId());
+        }
+
         for (StoragePoolVO storage : storagePools) {
             if (suitablePools.size() == returnUpTo) {
                 break;


Mime
View raw message