|
@@ -21,61 +21,32 @@
|
|
|
*/
|
|
|
package org.apache.hadoop.hdds.scm.server;
|
|
|
|
|
|
-import com.google.common.annotations.VisibleForTesting;
|
|
|
-import com.google.common.base.Preconditions;
|
|
|
-import com.google.common.collect.Maps;
|
|
|
-import com.google.protobuf.BlockingService;
|
|
|
+import java.io.IOException;
|
|
|
+import java.net.InetSocketAddress;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
import org.apache.hadoop.fs.CommonConfigurationKeys;
|
|
|
import org.apache.hadoop.hdds.conf.OzoneConfiguration;
|
|
|
import org.apache.hadoop.hdds.protocol.DatanodeDetails;
|
|
|
import org.apache.hadoop.hdds.protocol.proto.HddsProtos;
|
|
|
import org.apache.hadoop.hdds.protocol.proto.StorageContainerDatanodeProtocolProtos;
|
|
|
-
|
|
|
-import org.apache.hadoop.hdds.protocol.proto
|
|
|
- .StorageContainerDatanodeProtocolProtos.SCMHeartbeatRequestProto;
|
|
|
-import org.apache.hadoop.hdds.protocol.proto
|
|
|
- .StorageContainerDatanodeProtocolProtos.ContainerReportsProto;
|
|
|
-import org.apache.hadoop.hdds.protocol.proto
|
|
|
- .StorageContainerDatanodeProtocolProtos.PipelineReportsProto;
|
|
|
-import org.apache.hadoop.hdds.protocol.proto
|
|
|
- .StorageContainerDatanodeProtocolProtos.SCMHeartbeatResponseProto;
|
|
|
-import org.apache.hadoop.hdds.protocol.proto
|
|
|
- .StorageContainerDatanodeProtocolProtos.SCMVersionRequestProto;
|
|
|
-import org.apache.hadoop.hdds.protocol.proto
|
|
|
- .StorageContainerDatanodeProtocolProtos.SCMVersionResponseProto;
|
|
|
-import org.apache.hadoop.hdds.protocol.proto
|
|
|
- .StorageContainerDatanodeProtocolProtos.SCMRegisteredResponseProto;
|
|
|
-import org.apache.hadoop.hdds.protocol.proto
|
|
|
- .StorageContainerDatanodeProtocolProtos.ReregisterCommandProto;
|
|
|
-import org.apache.hadoop.hdds.protocol.proto
|
|
|
- .StorageContainerDatanodeProtocolProtos.SCMCommandProto;
|
|
|
-import org.apache.hadoop.hdds.protocol.proto
|
|
|
- .StorageContainerDatanodeProtocolProtos.NodeReportProto;
|
|
|
-
|
|
|
-import static org.apache.hadoop.hdds.protocol.proto
|
|
|
- .StorageContainerDatanodeProtocolProtos.SCMCommandProto
|
|
|
- .Type.closeContainerCommand;
|
|
|
-import static org.apache.hadoop.hdds.protocol.proto
|
|
|
- .StorageContainerDatanodeProtocolProtos.SCMCommandProto
|
|
|
- .Type.deleteBlocksCommand;
|
|
|
-import static org.apache.hadoop.hdds.protocol.proto
|
|
|
- .StorageContainerDatanodeProtocolProtos.SCMCommandProto
|
|
|
- .Type.deleteContainerCommand;
|
|
|
-import static org.apache.hadoop.hdds.protocol.proto
|
|
|
- .StorageContainerDatanodeProtocolProtos.SCMCommandProto.Type
|
|
|
- .replicateContainerCommand;
|
|
|
-import static org.apache.hadoop.hdds.protocol.proto
|
|
|
- .StorageContainerDatanodeProtocolProtos.SCMCommandProto
|
|
|
- .Type.reregisterCommand;
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
+import org.apache.hadoop.hdds.protocol.proto.StorageContainerDatanodeProtocolProtos.ContainerReportsProto;
|
|
|
+import org.apache.hadoop.hdds.protocol.proto.StorageContainerDatanodeProtocolProtos.NodeReportProto;
|
|
|
+import org.apache.hadoop.hdds.protocol.proto.StorageContainerDatanodeProtocolProtos.PipelineReportsProto;
|
|
|
+import org.apache.hadoop.hdds.protocol.proto.StorageContainerDatanodeProtocolProtos.ReregisterCommandProto;
|
|
|
+import org.apache.hadoop.hdds.protocol.proto.StorageContainerDatanodeProtocolProtos.SCMCommandProto;
|
|
|
+import org.apache.hadoop.hdds.protocol.proto.StorageContainerDatanodeProtocolProtos.SCMHeartbeatRequestProto;
|
|
|
+import org.apache.hadoop.hdds.protocol.proto.StorageContainerDatanodeProtocolProtos.SCMHeartbeatResponseProto;
|
|
|
+import org.apache.hadoop.hdds.protocol.proto.StorageContainerDatanodeProtocolProtos.SCMRegisteredResponseProto;
|
|
|
+import org.apache.hadoop.hdds.protocol.proto.StorageContainerDatanodeProtocolProtos.SCMVersionRequestProto;
|
|
|
+import org.apache.hadoop.hdds.protocol.proto.StorageContainerDatanodeProtocolProtos.SCMVersionResponseProto;
|
|
|
import org.apache.hadoop.hdds.scm.HddsServerUtil;
|
|
|
import org.apache.hadoop.hdds.scm.events.SCMEvents;
|
|
|
-import org.apache.hadoop.hdds.scm.server.SCMDatanodeHeartbeatDispatcher
|
|
|
- .ReportFromDatanode;
|
|
|
-import org.apache.hadoop.hdds.scm.server.SCMDatanodeHeartbeatDispatcher
|
|
|
- .PipelineReportFromDatanode;
|
|
|
+import org.apache.hadoop.hdds.scm.server.SCMDatanodeHeartbeatDispatcher.PipelineReportFromDatanode;
|
|
|
+import org.apache.hadoop.hdds.scm.server.SCMDatanodeHeartbeatDispatcher.ReportFromDatanode;
|
|
|
import org.apache.hadoop.hdds.server.events.EventPublisher;
|
|
|
import org.apache.hadoop.io.IOUtils;
|
|
|
import org.apache.hadoop.ipc.ProtobufRpcEngine;
|
|
@@ -95,27 +66,28 @@ import org.apache.hadoop.ozone.protocol.commands.DeleteContainerCommand;
|
|
|
import org.apache.hadoop.ozone.protocol.commands.RegisteredCommand;
|
|
|
import org.apache.hadoop.ozone.protocol.commands.ReplicateContainerCommand;
|
|
|
import org.apache.hadoop.ozone.protocol.commands.SCMCommand;
|
|
|
+import org.apache.hadoop.ozone.protocolPB.ProtocolMessageMetrics;
|
|
|
import org.apache.hadoop.ozone.protocolPB.StorageContainerDatanodeProtocolPB;
|
|
|
-import org.apache.hadoop.ozone.protocolPB
|
|
|
- .StorageContainerDatanodeProtocolServerSideTranslatorPB;
|
|
|
-import org.slf4j.Logger;
|
|
|
-import org.slf4j.LoggerFactory;
|
|
|
-
|
|
|
-import java.io.IOException;
|
|
|
-import java.net.InetSocketAddress;
|
|
|
-import java.util.ArrayList;
|
|
|
-import java.util.List;
|
|
|
-import java.util.Map;
|
|
|
-import java.util.stream.Collectors;
|
|
|
+import org.apache.hadoop.ozone.protocolPB.StorageContainerDatanodeProtocolServerSideTranslatorPB;
|
|
|
|
|
|
+import com.google.common.annotations.VisibleForTesting;
|
|
|
+import com.google.common.base.Preconditions;
|
|
|
+import com.google.common.collect.Maps;
|
|
|
+import com.google.protobuf.BlockingService;
|
|
|
+import static org.apache.hadoop.hdds.protocol.proto.StorageContainerDatanodeProtocolProtos.SCMCommandProto.Type.closeContainerCommand;
|
|
|
+import static org.apache.hadoop.hdds.protocol.proto.StorageContainerDatanodeProtocolProtos.SCMCommandProto.Type.deleteBlocksCommand;
|
|
|
+import static org.apache.hadoop.hdds.protocol.proto.StorageContainerDatanodeProtocolProtos.SCMCommandProto.Type.deleteContainerCommand;
|
|
|
+import static org.apache.hadoop.hdds.protocol.proto.StorageContainerDatanodeProtocolProtos.SCMCommandProto.Type.replicateContainerCommand;
|
|
|
+import static org.apache.hadoop.hdds.protocol.proto.StorageContainerDatanodeProtocolProtos.SCMCommandProto.Type.reregisterCommand;
|
|
|
import static org.apache.hadoop.hdds.scm.ScmConfigKeys.OZONE_SCM_DATANODE_ADDRESS_KEY;
|
|
|
import static org.apache.hadoop.hdds.scm.ScmConfigKeys.OZONE_SCM_HANDLER_COUNT_DEFAULT;
|
|
|
import static org.apache.hadoop.hdds.scm.ScmConfigKeys.OZONE_SCM_HANDLER_COUNT_KEY;
|
|
|
-
|
|
|
import static org.apache.hadoop.hdds.scm.events.SCMEvents.CONTAINER_REPORT;
|
|
|
import static org.apache.hadoop.hdds.scm.events.SCMEvents.PIPELINE_REPORT;
|
|
|
import static org.apache.hadoop.hdds.scm.server.StorageContainerManager.startRpcServer;
|
|
|
import static org.apache.hadoop.hdds.server.ServerUtils.updateRPCListenAddress;
|
|
|
+import org.slf4j.Logger;
|
|
|
+import org.slf4j.LoggerFactory;
|
|
|
|
|
|
/**
|
|
|
* Protocol Handler for Datanode Protocol.
|
|
@@ -138,6 +110,7 @@ public class SCMDatanodeProtocolServer implements
|
|
|
private final InetSocketAddress datanodeRpcAddress;
|
|
|
private final SCMDatanodeHeartbeatDispatcher heartbeatDispatcher;
|
|
|
private final EventPublisher eventPublisher;
|
|
|
+ private final ProtocolMessageMetrics protocolMessageMetrics;
|
|
|
|
|
|
public SCMDatanodeProtocolServer(final OzoneConfiguration conf,
|
|
|
StorageContainerManager scm, EventPublisher eventPublisher)
|
|
@@ -157,12 +130,17 @@ public class SCMDatanodeProtocolServer implements
|
|
|
|
|
|
RPC.setProtocolEngine(conf, StorageContainerDatanodeProtocolPB.class,
|
|
|
ProtobufRpcEngine.class);
|
|
|
+
|
|
|
+ protocolMessageMetrics = ProtocolMessageMetrics
|
|
|
+ .create("SCMDatanodeProtocol", "SCM Datanode protocol",
|
|
|
+ StorageContainerDatanodeProtocolProtos.Type.values());
|
|
|
+
|
|
|
BlockingService dnProtoPbService =
|
|
|
StorageContainerDatanodeProtocolProtos
|
|
|
.StorageContainerDatanodeProtocolService
|
|
|
.newReflectiveBlockingService(
|
|
|
new StorageContainerDatanodeProtocolServerSideTranslatorPB(
|
|
|
- this));
|
|
|
+ this, protocolMessageMetrics));
|
|
|
|
|
|
InetSocketAddress datanodeRpcAddr =
|
|
|
HddsServerUtil.getScmDataNodeBindAddress(conf);
|
|
@@ -191,6 +169,7 @@ public class SCMDatanodeProtocolServer implements
|
|
|
LOG.info(
|
|
|
StorageContainerManager.buildRpcServerStartMessage(
|
|
|
"RPC server for DataNodes", datanodeRpcAddress));
|
|
|
+ protocolMessageMetrics.register();
|
|
|
datanodeRpcServer.start();
|
|
|
}
|
|
|
|
|
@@ -370,6 +349,7 @@ public class SCMDatanodeProtocolServer implements
|
|
|
LOG.error(" datanodeRpcServer stop failed.", ex);
|
|
|
}
|
|
|
IOUtils.cleanupWithLogger(LOG, scm.getScmNodeManager());
|
|
|
+ protocolMessageMetrics.unregister();
|
|
|
}
|
|
|
|
|
|
@Override
|