Updated Branches:
refs/heads/master 1db19c3d5 -> 4a9da0376
CLOUDSTACK-5426: Cannot deploy instance having multiple volumes that use
different storage tags for storage pools in same cluster
Changes:
- We need to reset the avoid set to its original state while calling the
storage pool allocators for each volume.
- This will prevent affecting allocation of the disks due to the avoid set
output of the prior disk allocations.
Conflicts:
server/src/com/cloud/deploy/DeploymentPlanningManagerImpl.java
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/5618a44e
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/5618a44e
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/5618a44e
Branch: refs/heads/master
Commit: 5618a44ed0089e43ec24847b0b7db5c7e754fdb7
Parents: 1db19c3
Author: Prachi Damle <[email protected]>
Authored: Mon Dec 9 14:53:48 2013 -0800
Committer: Prachi Damle <[email protected]>
Committed: Mon Dec 9 15:37:13 2013 -0800
----------------------------------------------------------------------
.../deploy/DeploymentPlanningManagerImpl.java | 20 +++++++++++++++++++-
1 file changed, 19 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5618a44e/server/src/com/cloud/deploy/DeploymentPlanningManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/deploy/DeploymentPlanningManagerImpl.java
b/server/src/com/cloud/deploy/DeploymentPlanningManagerImpl.java
index 8b7ed87..a0890c2 100644
--- a/server/src/com/cloud/deploy/DeploymentPlanningManagerImpl.java
+++ b/server/src/com/cloud/deploy/DeploymentPlanningManagerImpl.java
@@ -1119,6 +1119,12 @@ public class DeploymentPlanningManagerImpl extends
ManagerBase implements Deploy
// for each volume find list of suitable storage pools by calling the
// allocators
+ Set<Long> originalAvoidPoolSet = avoid.getPoolsToAvoid();
+ if (originalAvoidPoolSet == null) {
+ originalAvoidPoolSet = new HashSet<Long>();
+ }
+ Set<Long> poolsToAvoidOutput = new HashSet<Long>(originalAvoidPoolSet);
+
for (VolumeVO toBeCreated : volumesTobeCreated) {
s_logger.debug("Checking suitable pools for volume (Id, Type): ("
+ toBeCreated.getId() + "," + toBeCreated.getVolumeType().name() + ")");
@@ -1228,6 +1234,11 @@ public class DeploymentPlanningManagerImpl extends
ManagerBase implements Deploy
}
}
+ if (avoid.getPoolsToAvoid() != null) {
+ poolsToAvoidOutput.addAll(avoid.getPoolsToAvoid());
+ avoid.getPoolsToAvoid().retainAll(originalAvoidPoolSet);
+ }
+
if (!foundPotentialPools) {
s_logger.debug("No suitable pools found for volume: " +
toBeCreated + " under cluster: " + plan.getClusterId());
// No suitable storage pools found under this cluster for this
@@ -1239,6 +1250,13 @@ public class DeploymentPlanningManagerImpl extends
ManagerBase implements Deploy
}
}
+ if (suitableVolumeStoragePools.values() != null) {
+ poolsToAvoidOutput.removeAll(suitableVolumeStoragePools.values());
+ }
+ if (avoid.getPoolsToAvoid() != null) {
+ avoid.getPoolsToAvoid().addAll(poolsToAvoidOutput);
+ }
+
if (suitableVolumeStoragePools.isEmpty()) {
s_logger.debug("No suitable pools found");
}
@@ -1346,4 +1364,4 @@ public class DeploymentPlanningManagerImpl extends
ManagerBase implements Deploy
}
return true;
}
-}
+}
\ No newline at end of file