cloudstack-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Koushik Das <koushik....@citrix.com>
Subject Possible bug in DeploymentPlanner?
Date Tue, 15 Oct 2013 16:19:24 GMT
I was making some changes in the storage pool allocators related to some bug fix and came across
this code snippet in planDeplyment() method of DeploymentPlanningManagerImpl.java.
In this if the checkClustersforDestination() returns null and the 'avoids' parameter is not
correctly updated (one such place can be the storage allocators) then the while loop will
never terminate. Is there any  assumption about how the 'avoids' parameter needs to be updated?
From the code it is not very intuitive. I saw some places in the storage pool allocators where
this will not get updated.

Wanted to understand the reason for doing it this way? Can the while (true) condition be replaced
with something more intuitive?

            while (true) {
                if (planner instanceof DeploymentClusterPlanner) {
                    ExcludeList plannerAvoidInput = new ExcludeList(avoids.getDataCentersToAvoid(),
                            avoids.getPodsToAvoid(), avoids.getClustersToAvoid(), avoids.getHostsToAvoid(),
                            avoids.getPoolsToAvoid());

                    clusterList = ((DeploymentClusterPlanner) planner).orderClusters(vmProfile,
plan, avoids);
                    if (clusterList != null && !clusterList.isEmpty()) {
                        // planner refactoring. call allocators to list hosts
                        ExcludeList plannerAvoidOutput = new ExcludeList(avoids.getDataCentersToAvoid(),
                                avoids.getPodsToAvoid(), avoids.getClustersToAvoid(), avoids.getHostsToAvoid(),
                                avoids.getPoolsToAvoid());

                        resetAvoidSet(plannerAvoidOutput, plannerAvoidInput);

                        dest = checkClustersforDestination(clusterList, vmProfile, plan, avoids,
dc,
                                getPlannerUsage(planner, vmProfile, plan, avoids), plannerAvoidOutput);
                        if (dest != null) {
                            return dest;
                        }
                        // reset the avoid input to the planners
                        resetAvoidSet(avoids, plannerAvoidOutput);

                    } else {
                        return null;
                    }
                } else {
…………
…………
                }
            }







Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message