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 {
…………
…………
                }
            }






Reply via email to