1717 */
1818package org .apache .hadoop .ozone .protocolPB ;
1919
20- import com . google . protobuf . RpcController ;
21- import com . google . protobuf . ServiceException ;
22- import io . opentracing . Scope ;
20+ import java . io . IOException ;
21+ import java . util . List ;
22+ import java . util . stream . Collectors ;
2323
2424import org .apache .hadoop .classification .InterfaceAudience ;
25- import org .apache .hadoop .hdds .protocol .proto .ScmBlockLocationProtocolProtos ;
2625import org .apache .hadoop .hdds .protocol .DatanodeDetails ;
27- import org .apache .hadoop .hdds .protocol .proto .ScmBlockLocationProtocolProtos
28- .AllocateBlockResponse ;
26+ import org .apache .hadoop .hdds .protocol .proto .HddsProtos ;
27+ import org .apache .hadoop .hdds .protocol .proto .ScmBlockLocationProtocolProtos ;
28+ import org .apache .hadoop .hdds .protocol .proto .ScmBlockLocationProtocolProtos .AllocateBlockResponse ;
29+ import org .apache .hadoop .hdds .protocol .proto .ScmBlockLocationProtocolProtos .AllocateScmBlockRequestProto ;
30+ import org .apache .hadoop .hdds .protocol .proto .ScmBlockLocationProtocolProtos .AllocateScmBlockResponseProto ;
31+ import org .apache .hadoop .hdds .protocol .proto .ScmBlockLocationProtocolProtos .DeleteKeyBlocksResultProto ;
32+ import org .apache .hadoop .hdds .protocol .proto .ScmBlockLocationProtocolProtos .DeleteScmKeyBlocksRequestProto ;
33+ import org .apache .hadoop .hdds .protocol .proto .ScmBlockLocationProtocolProtos .DeleteScmKeyBlocksResponseProto ;
34+ import org .apache .hadoop .hdds .protocol .proto .ScmBlockLocationProtocolProtos .SCMBlockLocationRequest ;
35+ import org .apache .hadoop .hdds .protocol .proto .ScmBlockLocationProtocolProtos .SCMBlockLocationResponse ;
36+ import org .apache .hadoop .hdds .protocol .proto .ScmBlockLocationProtocolProtos .SortDatanodesRequestProto ;
37+ import org .apache .hadoop .hdds .protocol .proto .ScmBlockLocationProtocolProtos .SortDatanodesResponseProto ;
38+ import org .apache .hadoop .hdds .protocol .proto .ScmBlockLocationProtocolProtos .Status ;
2939import org .apache .hadoop .hdds .scm .ScmInfo ;
3040import org .apache .hadoop .hdds .scm .container .common .helpers .AllocatedBlock ;
3141import org .apache .hadoop .hdds .scm .container .common .helpers .ExcludeList ;
3444import org .apache .hadoop .hdds .scm .protocol .StorageContainerLocationProtocol ;
3545import org .apache .hadoop .hdds .scm .protocolPB .ScmBlockLocationProtocolPB ;
3646import org .apache .hadoop .hdds .scm .protocolPB .StorageContainerLocationProtocolPB ;
37- import org .apache .hadoop .hdds .protocol .proto .HddsProtos ;
38- import org .apache .hadoop .hdds .protocol .proto .ScmBlockLocationProtocolProtos
39- .AllocateScmBlockRequestProto ;
40- import org .apache .hadoop .hdds .protocol .proto .ScmBlockLocationProtocolProtos
41- .AllocateScmBlockResponseProto ;
42- import org .apache .hadoop .hdds .protocol .proto .ScmBlockLocationProtocolProtos
43- .DeleteKeyBlocksResultProto ;
44- import org .apache .hadoop .hdds .protocol .proto .ScmBlockLocationProtocolProtos
45- .DeleteScmKeyBlocksRequestProto ;
46- import org .apache .hadoop .hdds .protocol .proto .ScmBlockLocationProtocolProtos
47- .DeleteScmKeyBlocksResponseProto ;
48- import org .apache .hadoop .hdds .protocol .proto .ScmBlockLocationProtocolProtos
49- .SCMBlockLocationResponse ;
50- import org .apache .hadoop .hdds .protocol .proto .ScmBlockLocationProtocolProtos
51- .SCMBlockLocationRequest ;
52- import org .apache .hadoop .hdds .protocol .proto .ScmBlockLocationProtocolProtos
53- .Status ;
54- import org .apache .hadoop .hdds .protocol .proto .ScmBlockLocationProtocolProtos
55- .SortDatanodesRequestProto ;
56- import org .apache .hadoop .hdds .protocol .proto .ScmBlockLocationProtocolProtos
57- .SortDatanodesResponseProto ;
5847import org .apache .hadoop .hdds .tracing .TracingUtil ;
5948import org .apache .hadoop .ozone .common .BlockGroup ;
6049import org .apache .hadoop .ozone .common .DeleteBlockGroupResult ;
6150
62- import java .io .IOException ;
63- import java .util .List ;
64- import java .util .stream .Collectors ;
51+ import com .google .protobuf .RpcController ;
52+ import com .google .protobuf .ServiceException ;
53+ import io .opentracing .Scope ;
54+ import org .slf4j .Logger ;
55+ import org .slf4j .LoggerFactory ;
6556
6657/**
6758 * This class is the server-side translator that forwards requests received on
@@ -74,14 +65,22 @@ public final class ScmBlockLocationProtocolServerSideTranslatorPB
7465
7566 private final ScmBlockLocationProtocol impl ;
7667
68+ private static final Logger LOG = LoggerFactory
69+ .getLogger (ScmBlockLocationProtocolServerSideTranslatorPB .class );
70+
71+ private final ProtocolMessageMetrics
72+ protocolMessageMetrics ;
73+
7774 /**
7875 * Creates a new ScmBlockLocationProtocolServerSideTranslatorPB.
7976 *
8077 * @param impl {@link ScmBlockLocationProtocol} server implementation
8178 */
8279 public ScmBlockLocationProtocolServerSideTranslatorPB (
83- ScmBlockLocationProtocol impl ) throws IOException {
80+ ScmBlockLocationProtocol impl ,
81+ ProtocolMessageMetrics metrics ) throws IOException {
8482 this .impl = impl ;
83+ this .protocolMessageMetrics = metrics ;
8584 }
8685
8786 private SCMBlockLocationResponse .Builder createSCMBlockResponse (
@@ -97,15 +96,45 @@ public SCMBlockLocationResponse send(RpcController controller,
9796 SCMBlockLocationRequest request ) throws ServiceException {
9897 String traceId = request .getTraceID ();
9998
99+ if (LOG .isTraceEnabled ()) {
100+ LOG .trace ("BlockLocationProtocol {} request is received: <json>{}</json>" ,
101+ request .getCmdType ().toString (),
102+ request .toString ().replaceAll ("\n " , "\\ \\ n" ));
103+
104+ } else if (LOG .isDebugEnabled ()) {
105+ LOG .debug ("BlockLocationProtocol {} request is received" ,
106+ request .getCmdType ().toString ());
107+ }
108+
109+ protocolMessageMetrics .increment (request .getCmdType ());
110+
111+ try (Scope scope = TracingUtil
112+ .importAndCreateScope (
113+ "ScmBlockLocationProtocol." + request .getCmdType (),
114+ request .getTraceID ())) {
115+ SCMBlockLocationResponse response =
116+ processMessage (request , traceId );
117+
118+ if (LOG .isTraceEnabled ()) {
119+ LOG .trace (
120+ "BlockLocationProtocol {} request is processed. Response: "
121+ + "<json>{}</json>" ,
122+ request .getCmdType ().toString (),
123+ response .toString ().replaceAll ("\n " , "\\ \\ n" ));
124+ }
125+ return response ;
126+ }
127+ }
128+
129+ private SCMBlockLocationResponse processMessage (
130+ SCMBlockLocationRequest request , String traceId ) throws ServiceException {
100131 SCMBlockLocationResponse .Builder response = createSCMBlockResponse (
101132 request .getCmdType (),
102133 traceId );
103134 response .setSuccess (true );
104135 response .setStatus (Status .OK );
105136
106- try (Scope scope = TracingUtil
107- .importAndCreateScope ("ScmBlockLocationProtocol." +request .getCmdType (),
108- request .getTraceID ())) {
137+ try {
109138 switch (request .getCmdType ()) {
110139 case AllocateScmBlock :
111140 response .setAllocateScmBlockResponse (
@@ -125,7 +154,7 @@ public SCMBlockLocationResponse send(RpcController controller,
125154 break ;
126155 default :
127156 // Should never happen
128- throw new IOException ("Unknown Operation " + request .getCmdType ()+
157+ throw new IOException ("Unknown Operation " + request .getCmdType () +
129158 " in ScmBlockLocationProtocol" );
130159 }
131160 } catch (IOException e ) {
@@ -135,6 +164,7 @@ public SCMBlockLocationResponse send(RpcController controller,
135164 response .setMessage (e .getMessage ());
136165 }
137166 }
167+
138168 return response .build ();
139169 }
140170
@@ -182,12 +212,12 @@ public DeleteScmKeyBlocksResponseProto deleteScmKeyBlocks(
182212 .map (BlockGroup ::getFromProto ).collect (Collectors .toList ());
183213 final List <DeleteBlockGroupResult > results =
184214 impl .deleteKeyBlocks (infoList );
185- for (DeleteBlockGroupResult result : results ) {
215+ for (DeleteBlockGroupResult result : results ) {
186216 DeleteKeyBlocksResultProto .Builder deleteResult =
187217 DeleteKeyBlocksResultProto
188- .newBuilder ()
189- .setObjectKey (result .getObjectKey ())
190- .addAllBlockResults (result .getBlockResultProtoList ());
218+ .newBuilder ()
219+ .setObjectKey (result .getObjectKey ())
220+ .addAllBlockResults (result .getBlockResultProtoList ());
191221 resp .addResults (deleteResult .build ());
192222 }
193223 return resp .build ();
0 commit comments