Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -312,8 +312,8 @@ Map<String, Pair<Boolean, String>> getSafeModeRuleStatuses()
*/
boolean startContainerBalancer(Optional<Double> threshold,
Optional<Integer> idleiterations,
Optional<Integer> maxDatanodesToBalance,
Optional<Long> maxSizeToMoveInGB) throws IOException;
Optional<Double> maxDatanodesRatioToInvolvePerIteration,
Optional<Long> maxSizeToMovePerIterationInGB) throws IOException;

/**
* Stop ContainerBalancer.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,29 +18,28 @@
package org.apache.hadoop.hdds.scm.protocol;

import org.apache.commons.lang3.tuple.Pair;
import org.apache.hadoop.hdds.protocol.proto.StorageContainerLocationProtocolProtos.Type;
import org.apache.hadoop.hdds.protocol.proto.HddsProtos;
import org.apache.hadoop.hdds.protocol.proto.StorageContainerLocationProtocolProtos.Type;
import org.apache.hadoop.hdds.scm.DatanodeAdminError;
import org.apache.hadoop.hdds.scm.ScmConfig;
import org.apache.hadoop.hdds.scm.ScmInfo;
import org.apache.hadoop.hdds.scm.container.ContainerID;
import org.apache.hadoop.hdds.scm.container.ContainerInfo;
import org.apache.hadoop.hdds.scm.container.common.helpers.ContainerWithPipeline;
import org.apache.hadoop.hdds.scm.pipeline.Pipeline;
import org.apache.hadoop.ozone.upgrade.UpgradeFinalizer.StatusAndMessages;
import org.apache.hadoop.security.KerberosInfo;
import org.apache.hadoop.security.token.Token;

import java.io.Closeable;
import java.io.IOException;
import java.util.EnumSet;
import java.util.Collections;
import java.util.EnumSet;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Set;

import org.apache.hadoop.ozone.upgrade.UpgradeFinalizer.StatusAndMessages;

/**
* ContainerLocationProtocol is used by an HDFS node to find the set of nodes
* that currently host a container.
Expand Down Expand Up @@ -294,8 +293,8 @@ Map<String, Pair<Boolean, String>> getSafeModeRuleStatuses()
*/
boolean startContainerBalancer(Optional<Double> threshold,
Optional<Integer> idleiterations,
Optional<Integer> maxDatanodesToBalance,
Optional<Long> maxSizeToMoveInGB) throws IOException;
Optional<Double> maxDatanodesRatioToInvolvePerIteration,
Optional<Long> maxSizeToMovePerIterationInGB) throws IOException;

/**
* Stop ContainerBalancer.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -726,10 +726,10 @@ public boolean getReplicationManagerStatus() throws IOException {
}

@Override
public boolean startContainerBalancer(Optional<Double> threshold,
Optional<Integer> idleiterations,
Optional<Integer> maxDatanodesToBalance,
Optional<Long> maxSizeToMoveInGB) throws IOException{
public boolean startContainerBalancer(
Optional<Double> threshold, Optional<Integer> idleiterations,
Optional<Double> maxDatanodesRatioToInvolvePerIteration,
Optional<Long> maxSizeToMovePerIterationInGB) throws IOException{
StartContainerBalancerRequestProto.Builder builder =
StartContainerBalancerRequestProto.newBuilder();
builder.setTraceID(TracingUtil.exportCurrentSpan());
Expand All @@ -741,17 +741,21 @@ public boolean startContainerBalancer(Optional<Double> threshold,
"threshold should to be specified in range [0.0, 1.0).");
builder.setThreshold(tsd);
}
if (maxSizeToMoveInGB.isPresent()) {
long mstm = maxSizeToMoveInGB.get();
if (maxSizeToMovePerIterationInGB.isPresent()) {
long mstm = maxSizeToMovePerIterationInGB.get();
Preconditions.checkState(mstm > 0,
"maxSizeToMoveInGB must be positive.");
builder.setMaxSizeToMoveInGB(mstm);
"maxSizeToMovePerIterationInGB must be positive.");
builder.setMaxSizeToMovePerIterationInGB(mstm);
}
if (maxDatanodesToBalance.isPresent()) {
int mdtb = maxDatanodesToBalance.get();
Preconditions.checkState(mdtb > 0,
"maxDatanodesToBalance must be positive.");
builder.setMaxDatanodesToBalance(mdtb);
if (maxDatanodesRatioToInvolvePerIteration.isPresent()) {
double mdti = maxDatanodesRatioToInvolvePerIteration.get();
Preconditions.checkState(mdti >= 0,
"maxDatanodesRatioToInvolvePerIteration must be " +
"greater than equal to zero.");
Preconditions.checkState(mdti <= 1,
"maxDatanodesRatioToInvolvePerIteration must be " +
"lesser than equal to one.");
builder.setMaxDatanodesRatioToInvolvePerIteration(mdti);
}
if (idleiterations.isPresent()) {
int idi = idleiterations.get();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -479,8 +479,8 @@ message StartContainerBalancerRequestProto {
optional string traceID = 1;
optional double threshold = 2;
optional int32 idleiterations = 3;
optional int32 maxDatanodesToBalance = 4;
optional int64 maxSizeToMoveInGB = 5;
optional double maxDatanodesRatioToInvolvePerIteration = 4;
optional int64 maxSizeToMovePerIterationInGB = 5;
}

message StartContainerBalancerResponseProto {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,7 @@ public class ReplicationManager implements SCMService {
* the corresponding reason. this is useful for tracking
* the result of move option
*/
enum MoveResult {
public enum MoveResult {
// both replication and deletion are completed
COMPLETED,
// RM is not running
Expand Down Expand Up @@ -1571,6 +1571,11 @@ private boolean isOpenContainerHealthy(
.allMatch(r -> ReplicationManager.compareState(state, r.getState()));
}

public boolean isContainerReplicatingOrDeleting(ContainerID containerID) {
return inflightReplication.containsKey(containerID) ||
inflightDeletion.containsKey(containerID);
}

/**
* Wrapper class to hold the InflightAction with its start time.
*/
Expand Down
Loading