Skip to content

HDDS-14701. Consolidate DiskBalancerVolumeChoosingPolicy and ContainerChoosingPolicy#9858

Open
Gargi-jais11 wants to merge 3 commits intoapache:masterfrom
Gargi-jais11:HDDS-14701
Open

HDDS-14701. Consolidate DiskBalancerVolumeChoosingPolicy and ContainerChoosingPolicy#9858
Gargi-jais11 wants to merge 3 commits intoapache:masterfrom
Gargi-jais11:HDDS-14701

Conversation

@Gargi-jais11
Copy link
Contributor

What changes were proposed in this pull request?

We have DiskBalancerVolumeChoosingPolicy#chooseVolume to choose a pair of {sourceVol, destVol}, and then have ContainerChoosingPolicy#chooseContainer to pick one container from sourceVol to destVol. In each function, overall ideal utilization and specific disk utilization are calculated individually to serve the logic.

Consolidate two functions into one say, DefaultVolumeContainerChoosingPolicy will avoid some recalculation.

Another issue is that 5GB is used as the container size when choosing destVolume, while a specific container is picked, it's better for us to adjust destVolume's with container's real size, which could be larger than 5G, or less than 5G.

What is the link to the Apache JIRA

https://issues.apache.org/jira/browse/HDDS-14701

How was this patch tested?

Updated the existing test files to work according to the new logic.

@Gargi-jais11 Gargi-jais11 marked this pull request as ready for review March 2, 2026 10:01
@Gargi-jais11
Copy link
Contributor Author

@ChenSammi Please review the patch

public static DiskBalancerVolumeChoosingPolicy getDiskBalancerPolicy(ConfigurationSource conf) {
Class<?> policyClass = conf.getObject(DiskBalancerConfiguration.class).getVolumeChoosingPolicyClass();
return (DiskBalancerVolumeChoosingPolicy) ReflectionUtils.newInstance(
public static VolumeContainerChoosingPolicy getDiskBalancerContainerPolicy(ConfigurationSource conf) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We need a new dedicated Factory for ContainerChoosingPolicy.

*/
Pair<HddsVolume, HddsVolume> chooseVolume(MutableVolumeSet volumeSet,
double thresholdPercentage, Map<HddsVolume, Long> deltaSizes, long containerSize);
public final class DiskBalancerVolumeContainerCandidate {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's call it ContainerCandidate, instead of DiskBalancerVolumeContainerCandidate.

* Unit tests for the DefaultContainerChoosingPolicy.
*/
public class TestDefaultContainerChoosingPolicy {
public class TestDiskBalancerContainerChoosingLogic {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we merge this one with TestDiskBalancerVolumeChoosingLogic, and

merge TestContainerChoosingPerformance with TestVolumeChoosingPerformance?

* **`DefaultVolumeContainerChoosingPolicy`**: This is the default policy that consolidates both volume selection and container
selection into a single operation. It identifies the most over-utilized volume as the source and the most under-utilized
volume with sufficient space as the destination, then iterates through containers on the source to pick the first one
that is in a **CLOSED** state and is not already being moved. Consolidating both steps avoids recalculating ideal
Copy link
Contributor

@ChenSammi ChenSammi Mar 6, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We don't need to explain why we consolidate the two policies in a final doc, it's a low level implementation detail.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants