blob: 42778cb6e49597ab1827aac20d35c636d42d1074 [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.hadoop.ozone.protocol.commands;
import com.google.common.base.Strings;
import org.apache.hadoop.hdds.protocol.DatanodeDetails;
import org.apache.hadoop.hdds.protocol.proto
.StorageContainerDatanodeProtocolProtos.SCMRegisteredResponseProto;
import org.apache.hadoop.hdds.protocol.proto
.StorageContainerDatanodeProtocolProtos.SCMRegisteredResponseProto
.ErrorCode;
/**
* Response to Datanode Register call.
*/
public class RegisteredCommand {
private String clusterID;
private ErrorCode error;
private DatanodeDetails datanode;
public RegisteredCommand(final ErrorCode error, final DatanodeDetails node,
final String clusterID) {
this.datanode = node;
this.clusterID = clusterID;
this.error = error;
}
/**
* Returns a new builder.
*
* @return - Builder
*/
public static Builder newBuilder() {
return new Builder();
}
/**
* Returns datanode.
*
* @return - Datanode.
*/
public DatanodeDetails getDatanode() {
return datanode;
}
/**
* Returns cluster ID.
*
* @return -- ClusterID
*/
public String getClusterID() {
return clusterID;
}
/**
* Returns ErrorCode.
*
* @return - ErrorCode
*/
public ErrorCode getError() {
return error;
}
/**
* Gets the protobuf message of this object.
*
* @return A protobuf message.
*/
public SCMRegisteredResponseProto getProtoBufMessage() {
SCMRegisteredResponseProto.Builder builder =
SCMRegisteredResponseProto.newBuilder()
// TODO : Fix this later when we have multiple SCM support.
// .setAddressList(addressList)
.setClusterID(this.clusterID)
.setDatanodeUUID(this.datanode.getUuidString())
.setErrorCode(this.error);
if (!Strings.isNullOrEmpty(datanode.getHostName())) {
builder.setHostname(datanode.getHostName());
}
if (!Strings.isNullOrEmpty(datanode.getIpAddress())) {
builder.setIpAddress(datanode.getIpAddress());
}
if (!Strings.isNullOrEmpty(datanode.getNetworkName())) {
builder.setNetworkName(datanode.getNetworkName());
}
if (!Strings.isNullOrEmpty(datanode.getNetworkLocation())) {
builder.setNetworkLocation(datanode.getNetworkLocation());
}
return builder.build();
}
/**
* A builder class to verify all values are sane.
*/
public static class Builder {
private DatanodeDetails datanode;
private String clusterID;
private ErrorCode error;
/**
* sets datanode details.
*
* @param node - datanode details
* @return Builder
*/
public Builder setDatanode(DatanodeDetails node) {
this.datanode = node;
return this;
}
/**
* Sets cluster ID.
*
* @param cluster - clusterID
* @return Builder
*/
public Builder setClusterID(String cluster) {
this.clusterID = cluster;
return this;
}
/**
* Sets Error code.
*
* @param errorCode - error code
* @return Builder
*/
public Builder setErrorCode(ErrorCode errorCode) {
this.error = errorCode;
return this;
}
/**
* Build the command object.
*
* @return RegisteredCommand
*/
public RegisteredCommand build() {
if ((this.error == ErrorCode.success) && (this.datanode == null
|| Strings.isNullOrEmpty(this.datanode.getUuidString())
|| Strings.isNullOrEmpty(this.clusterID))) {
throw new IllegalArgumentException("On success, RegisteredCommand "
+ "needs datanodeUUID and ClusterID.");
}
return new RegisteredCommand(this.error, this.datanode, this.clusterID);
}
}
}