1616 */
1717package org .apache .hadoop .ozone .protocolPB ;
1818
19- import com .google .protobuf .RpcController ;
20- import com .google .protobuf .ServiceException ;
21- import org .apache .hadoop .hdds .protocol .proto
22- .StorageContainerDatanodeProtocolProtos .PipelineReportsProto ;
23- import org .apache .hadoop .hdds .protocol .proto
24- .StorageContainerDatanodeProtocolProtos .NodeReportProto ;
25- import org .apache .hadoop .hdds .protocol .proto
26- .StorageContainerDatanodeProtocolProtos .SCMRegisterRequestProto ;
27- import org .apache .hadoop .hdds .protocol .proto
28- .StorageContainerDatanodeProtocolProtos .SCMRegisteredResponseProto ;
29- import org .apache .hadoop .hdds .protocol .proto
30- .StorageContainerDatanodeProtocolProtos .SCMVersionRequestProto ;
31- import org .apache .hadoop .hdds .protocol .proto
32- .StorageContainerDatanodeProtocolProtos .SCMVersionResponseProto ;
33- import org .apache .hadoop .hdds .protocol .proto
34- .StorageContainerDatanodeProtocolProtos .ContainerReportsProto ;
35- import org .apache .hadoop .hdds .protocol .proto
36- .StorageContainerDatanodeProtocolProtos .SCMHeartbeatRequestProto ;
37- import org .apache .hadoop .hdds .protocol .proto
38- .StorageContainerDatanodeProtocolProtos .SCMHeartbeatResponseProto ;
19+ import java .io .IOException ;
20+
21+ import org .apache .hadoop .hdds .protocol .proto .StorageContainerDatanodeProtocolProtos .ContainerReportsProto ;
22+ import org .apache .hadoop .hdds .protocol .proto .StorageContainerDatanodeProtocolProtos .NodeReportProto ;
23+ import org .apache .hadoop .hdds .protocol .proto .StorageContainerDatanodeProtocolProtos .PipelineReportsProto ;
24+ import org .apache .hadoop .hdds .protocol .proto .StorageContainerDatanodeProtocolProtos .SCMDatanodeRequest ;
25+ import org .apache .hadoop .hdds .protocol .proto .StorageContainerDatanodeProtocolProtos .SCMDatanodeResponse ;
26+ import org .apache .hadoop .hdds .protocol .proto .StorageContainerDatanodeProtocolProtos .SCMRegisterRequestProto ;
27+ import org .apache .hadoop .hdds .protocol .proto .StorageContainerDatanodeProtocolProtos .SCMRegisteredResponseProto ;
28+ import org .apache .hadoop .hdds .protocol .proto .StorageContainerDatanodeProtocolProtos .Status ;
29+ import org .apache .hadoop .hdds .protocol .proto .StorageContainerDatanodeProtocolProtos .Type ;
30+ import org .apache .hadoop .hdds .server .OzoneProtocolMessageDispatcher ;
3931import org .apache .hadoop .ozone .protocol .StorageContainerDatanodeProtocol ;
4032
41- import java .io .IOException ;
33+ import com .google .protobuf .RpcController ;
34+ import com .google .protobuf .ServiceException ;
35+ import org .slf4j .Logger ;
36+ import org .slf4j .LoggerFactory ;
4237
4338/**
4439 * This class is the server-side translator that forwards requests received on
4843public class StorageContainerDatanodeProtocolServerSideTranslatorPB
4944 implements StorageContainerDatanodeProtocolPB {
5045
46+ private static final Logger LOG = LoggerFactory
47+ .getLogger (StorageContainerDatanodeProtocolServerSideTranslatorPB .class );
48+
5149 private final StorageContainerDatanodeProtocol impl ;
50+ private final OzoneProtocolMessageDispatcher <SCMDatanodeRequest ,
51+ SCMDatanodeResponse > dispatcher ;
5252
5353 public StorageContainerDatanodeProtocolServerSideTranslatorPB (
54- StorageContainerDatanodeProtocol impl ) {
54+ StorageContainerDatanodeProtocol impl ,
55+ ProtocolMessageMetrics protocolMessageMetrics ) {
5556 this .impl = impl ;
57+ dispatcher =
58+ new OzoneProtocolMessageDispatcher <>("SCMDatanodeProtocol" ,
59+ protocolMessageMetrics ,
60+ LOG );
5661 }
5762
58- @ Override
59- public SCMVersionResponseProto getVersion ( RpcController controller ,
60- SCMVersionRequestProto request )
61- throws ServiceException {
62- try {
63- return impl . getVersion ( request );
64- } catch ( IOException e ) {
65- throw new ServiceException ( e );
66- }
63+ public SCMRegisteredResponseProto register (
64+ SCMRegisterRequestProto request ) throws IOException {
65+ ContainerReportsProto containerRequestProto = request
66+ . getContainerReport ();
67+ NodeReportProto dnNodeReport = request . getNodeReport ();
68+ PipelineReportsProto pipelineReport = request . getPipelineReports ( );
69+ return impl . register ( request . getDatanodeDetails (), dnNodeReport ,
70+ containerRequestProto , pipelineReport );
71+
6772 }
6873
6974 @ Override
70- public SCMRegisteredResponseProto register (RpcController controller ,
71- SCMRegisterRequestProto request ) throws ServiceException {
72- try {
73- ContainerReportsProto containerRequestProto = request
74- .getContainerReport ();
75- NodeReportProto dnNodeReport = request .getNodeReport ();
76- PipelineReportsProto pipelineReport = request .getPipelineReports ();
77- return impl .register (request .getDatanodeDetails (), dnNodeReport ,
78- containerRequestProto , pipelineReport );
79- } catch (IOException e ) {
80- throw new ServiceException (e );
81- }
75+ public SCMDatanodeResponse submitRequest (RpcController controller ,
76+ SCMDatanodeRequest request ) throws ServiceException {
77+ return dispatcher .processRequest (request , this ::processMessage ,
78+ request .getCmdType (), request .getTraceID ());
8279 }
8380
84- @ Override
85- public SCMHeartbeatResponseProto sendHeartbeat (RpcController controller ,
86- SCMHeartbeatRequestProto request ) throws ServiceException {
81+ public SCMDatanodeResponse processMessage (SCMDatanodeRequest request )
82+ throws ServiceException {
8783 try {
88- return impl .sendHeartbeat (request );
84+ Type cmdType = request .getCmdType ();
85+ switch (cmdType ) {
86+ case GetVersion :
87+ return SCMDatanodeResponse .newBuilder ()
88+ .setCmdType (cmdType )
89+ .setStatus (Status .OK )
90+ .setGetVersionResponse (
91+ impl .getVersion (request .getGetVersionRequest ()))
92+ .build ();
93+ case SendHeartbeat :
94+ return SCMDatanodeResponse .newBuilder ()
95+ .setCmdType (cmdType )
96+ .setStatus (Status .OK )
97+ .setSendHeartbeatResponse (
98+ impl .sendHeartbeat (request .getSendHeartbeatRequest ()))
99+ .build ();
100+ case Register :
101+ return SCMDatanodeResponse .newBuilder ()
102+ .setCmdType (cmdType )
103+ .setStatus (Status .OK )
104+ .setRegisterResponse (register (request .getRegisterRequest ()))
105+ .build ();
106+ default :
107+ throw new ServiceException ("Unknown command type: " + cmdType );
108+ }
89109 } catch (IOException e ) {
90110 throw new ServiceException (e );
91111 }
92112 }
93-
94113}
0 commit comments