Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
4ec7f55
HDDS-4926. Support start/stop for container balancer via command line
May 21, 2021
f7cea16
add command line parameters
May 24, 2021
8a26e33
fix for checkstyle
May 24, 2021
5efb584
remove default value
May 27, 2021
a96c1ba
Merge remote-tracking branch 'origin/master' into bak
Jun 1, 2021
fff764b
update proto to add new parameters
Jun 1, 2021
4526b6a
add unit test for container balancer subcommand
Jun 1, 2021
558c0fc
add unit and acceptance test
Jun 1, 2021
45e79e4
fix unit test
Jun 3, 2021
d913cf4
triger CI for TestReportPublisher.testCRLStatusReportPublisher
Jun 3, 2021
2879fb8
Merge remote-tracking branch 'origin/master' into HDDS-4926
Jun 3, 2021
029cf09
Merge remote-tracking branch 'origin/master' into HDDS-4926
Jun 3, 2021
c4f2fc4
update
Jun 7, 2021
3cd3fae
make startContainerBalancer parameters optional
Jun 7, 2021
b575197
use lock instead of sychronized
Jun 7, 2021
e50cfc4
Update hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/scm…
Jun 9, 2021
11a93dd
update
Jun 10, 2021
040c4de
change maxSizeToMove to maxSizeToMoveInGB
Jun 15, 2021
26a6e54
remove default value for idleiteration
Jun 15, 2021
91e795c
change maxSizeToMoveInGB to MaxSizeToMoveInGB
Jun 15, 2021
a6260d4
fix unit text
Jun 15, 2021
b84dd23
use optional for container balancer start command
Jun 16, 2021
5b483ae
trigger CI
Jun 17, 2021
993bc31
trigger CI again
Jun 17, 2021
62f2b36
trigger CI again
Jun 17, 2021
81a657d
trigger CI again
Jun 17, 2021
6a04ed2
update
Jun 21, 2021
00e34f4
Merge remote-tracking branch 'origin/master' into HDDS-4926
Jun 23, 2021
50029a7
update
Jun 23, 2021
0199f26
update
Jun 23, 2021
44aa8b1
update
Jun 23, 2021
e7abf32
triger CI
Jun 23, 2021
e99c865
triger CI
Jun 23, 2021
b69c5c3
triger CI
Jun 23, 2021
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 @@ -31,6 +31,7 @@
import java.io.IOException;
import java.util.List;
import java.util.Map;
import java.util.Optional;

/**
* The interface to call into underlying container layer.
Expand Down Expand Up @@ -305,6 +306,26 @@ Map<String, Pair<Boolean, String>> getSafeModeRuleStatuses()
*/
boolean getReplicationManagerStatus() throws IOException;

/**
* Start ContainerBalancer.
*/
boolean startContainerBalancer(Optional<Double> threshold,
Optional<Integer> idleiterations,
Optional<Integer> maxDatanodesToBalance,
Optional<Long> maxSizeToMoveInGB) throws IOException;

/**
* Stop ContainerBalancer.
*/
void stopContainerBalancer() throws IOException;

/**
* Returns ContainerBalancer status.
*
* @return True if ContainerBalancer is running, false otherwise.
*/
boolean getContainerBalancerStatus() throws IOException;

/**
* returns the list of ratis peer roles. Currently only include peer address.
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Set;

/**
Expand Down Expand Up @@ -286,6 +287,26 @@ Map<String, Pair<Boolean, String>> getSafeModeRuleStatuses()
*/
boolean getReplicationManagerStatus() throws IOException;

/**
* Start ContainerBalancer.
*/
boolean startContainerBalancer(Optional<Double> threshold,
Optional<Integer> idleiterations,
Optional<Integer> maxDatanodesToBalance,
Optional<Long> maxSizeToMoveInGB) throws IOException;

/**
* Stop ContainerBalancer.
*/
void stopContainerBalancer() throws IOException;

/**
* Returns ContainerBalancer status.
*
* @return True if ContainerBalancer is running, false otherwise.
*/
boolean getContainerBalancerStatus() throws IOException;

/**
* Get Datanode usage information by ip or uuid.
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,9 @@ public enum SCMAction implements AuditAction {
START_REPLICATION_MANAGER,
STOP_REPLICATION_MANAGER,
GET_REPLICATION_MANAGER_STATUS,
START_CONTAINER_BALANCER,
STOP_CONTAINER_BALANCER,
GET_CONTAINER_BALANCER_STATUS,
GET_CONTAINER_WITH_PIPELINE_BATCH,
ADD_SCM;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,8 @@
import org.apache.hadoop.hdds.protocol.proto.StorageContainerLocationProtocolProtos.RecommissionNodesResponseProto;
import org.apache.hadoop.hdds.protocol.proto.StorageContainerLocationProtocolProtos.ReplicationManagerStatusRequestProto;
import org.apache.hadoop.hdds.protocol.proto.StorageContainerLocationProtocolProtos.ReplicationManagerStatusResponseProto;
import org.apache.hadoop.hdds.protocol.proto.StorageContainerLocationProtocolProtos.ContainerBalancerStatusRequestProto;
import org.apache.hadoop.hdds.protocol.proto.StorageContainerLocationProtocolProtos.ContainerBalancerStatusResponseProto;
import org.apache.hadoop.hdds.protocol.proto.StorageContainerLocationProtocolProtos.SCMCloseContainerRequestProto;
import org.apache.hadoop.hdds.protocol.proto.StorageContainerLocationProtocolProtos.SCMDeleteContainerRequestProto;
import org.apache.hadoop.hdds.protocol.proto.StorageContainerLocationProtocolProtos.SCMListContainerRequestProto;
Expand All @@ -69,6 +71,9 @@
import org.apache.hadoop.hdds.protocol.proto.StorageContainerLocationProtocolProtos.StartMaintenanceNodesResponseProto;
import org.apache.hadoop.hdds.protocol.proto.StorageContainerLocationProtocolProtos.StartReplicationManagerRequestProto;
import org.apache.hadoop.hdds.protocol.proto.StorageContainerLocationProtocolProtos.StopReplicationManagerRequestProto;
import org.apache.hadoop.hdds.protocol.proto.StorageContainerLocationProtocolProtos.StartContainerBalancerRequestProto;
import org.apache.hadoop.hdds.protocol.proto.StorageContainerLocationProtocolProtos.StartContainerBalancerResponseProto;
import org.apache.hadoop.hdds.protocol.proto.StorageContainerLocationProtocolProtos.StopContainerBalancerRequestProto;
import org.apache.hadoop.hdds.protocol.proto.StorageContainerLocationProtocolProtos.Type;
import org.apache.hadoop.hdds.scm.DatanodeAdminError;
import org.apache.hadoop.hdds.scm.ScmInfo;
Expand All @@ -91,6 +96,7 @@
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.function.Consumer;
import static org.apache.hadoop.ozone.ClientVersions.CURRENT_VERSION;

Expand Down Expand Up @@ -712,6 +718,73 @@ public boolean getReplicationManagerStatus() throws IOException {

}

@Override
public boolean startContainerBalancer(Optional<Double> threshold,
Optional<Integer> idleiterations,
Optional<Integer> maxDatanodesToBalance,
Optional<Long> maxSizeToMoveInGB) throws IOException{
StartContainerBalancerRequestProto.Builder builder =
StartContainerBalancerRequestProto.newBuilder();
builder.setTraceID(TracingUtil.exportCurrentSpan());

//make balancer configuration optional
if (threshold.isPresent()) {
double tsd = threshold.get();
Preconditions.checkState(tsd >= 0.0D && tsd < 1.0D,
"threshold should to be specified in range [0.0, 1.0).");
builder.setThreshold(tsd);
}
if (maxSizeToMoveInGB.isPresent()) {
long mstm = maxSizeToMoveInGB.get();
Preconditions.checkState(mstm > 0,
"maxSizeToMoveInGB must be positive.");
builder.setMaxSizeToMoveInGB(mstm);
}
if (maxDatanodesToBalance.isPresent()) {
int mdtb = maxDatanodesToBalance.get();
Preconditions.checkState(mdtb > 0,
"maxDatanodesToBalance must be positive.");
builder.setMaxDatanodesToBalance(mdtb);
}
if (idleiterations.isPresent()) {
int idi = idleiterations.get();
Preconditions.checkState(idi > 0 || idi == -1,
"idleiterations must be positive or" +
" -1(infinitly run container balancer).");
builder.setIdleiterations(idi);
}

StartContainerBalancerRequestProto request = builder.build();
StartContainerBalancerResponseProto response =
submitRequest(Type.StartContainerBalancer,
builder1 -> builder1.setStartContainerBalancerRequest(request))
.getStartContainerBalancerResponse();
return response.getStart();
}

@Override
public void stopContainerBalancer() throws IOException {

Copy link
Contributor

Choose a reason for hiding this comment

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

Unnecessary blank line can be removed.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

thanks , will remove it

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 remove these extra head and tail black line?

StopContainerBalancerRequestProto request =
StopContainerBalancerRequestProto.getDefaultInstance();
submitRequest(Type.StopContainerBalancer,
builder -> builder.setStopContainerBalancerRequest(request));

}

@Override
public boolean getContainerBalancerStatus() throws IOException {

ContainerBalancerStatusRequestProto request =
Copy link
Contributor

Choose a reason for hiding this comment

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

Same as above.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

seems i have already used 4 black space indent here

ContainerBalancerStatusRequestProto.getDefaultInstance();
ContainerBalancerStatusResponseProto response =
submitRequest(Type.GetContainerBalancerStatus,
builder -> builder.setContainerBalancerStatusRequest(request))
.getContainerBalancerStatusResponse();
return response.getIsRunning();

}

/**
* Builds request for datanode usage information and receives response.
*
Expand Down
36 changes: 36 additions & 0 deletions hadoop-hdds/interface-admin/src/main/proto/ScmAdminProtocol.proto
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,9 @@ message ScmContainerLocationRequest {
optional DatanodeUsageInfoRequestProto DatanodeUsageInfoRequest = 30;
optional GetExistContainerWithPipelinesInBatchRequestProto getExistContainerWithPipelinesInBatchRequest = 31;
optional GetContainerTokenRequestProto containerTokenRequest = 32;
optional StartContainerBalancerRequestProto startContainerBalancerRequest = 33;
optional StopContainerBalancerRequestProto stopContainerBalancerRequest = 34;
optional ContainerBalancerStatusRequestProto containerBalancerStatusRequest = 35;
}

message ScmContainerLocationResponse {
Expand Down Expand Up @@ -109,6 +112,9 @@ message ScmContainerLocationResponse {
optional DatanodeUsageInfoResponseProto DatanodeUsageInfoResponse = 30;
optional GetExistContainerWithPipelinesInBatchResponseProto getExistContainerWithPipelinesInBatchResponse = 31;
optional GetContainerTokenResponseProto containerTokenResponse = 32;
optional StartContainerBalancerResponseProto startContainerBalancerResponse = 33;
optional StopContainerBalancerResponseProto stopContainerBalancerResponse = 34;
optional ContainerBalancerStatusResponseProto containerBalancerStatusResponse = 35;

enum Status {
OK = 1;
Expand Down Expand Up @@ -147,6 +153,9 @@ enum Type {
DatanodeUsageInfo = 25;
GetExistContainerWithPipelinesInBatch = 26;
GetContainerToken = 27;
StartContainerBalancer = 28;
StopContainerBalancer = 29;
GetContainerBalancerStatus = 30;
}

/**
Expand Down Expand Up @@ -445,6 +454,33 @@ message GetContainerTokenResponseProto {
required TokenProto token = 1;
}

message StartContainerBalancerRequestProto {
optional string traceID = 1;
optional double threshold = 2;
optional int32 idleiterations = 3;
optional int32 maxDatanodesToBalance = 4;
optional int64 maxSizeToMoveInGB = 5;
}

message StartContainerBalancerResponseProto {
required bool start = 1;
}

message StopContainerBalancerRequestProto {
optional string traceID = 1;
}

message StopContainerBalancerResponseProto {
}

message ContainerBalancerStatusRequestProto {
optional string traceID = 1;
}

message ContainerBalancerStatusResponseProto {
required bool isRunning = 1;
}

/**
* Protocol used from an HDFS node to StorageContainerManager. See the request
* and response messages for details of the RPC calls.
Expand Down
Loading