1717 */
1818package org .apache .hadoop .hdfs .server .federation .router ;
1919
20- import com .fasterxml .jackson .core .JsonFactory ;
21- import com .fasterxml .jackson .core .JsonGenerator ;
2220import org .apache .hadoop .hdfs .protocol .DatanodeInfo ;
2321import org .apache .hadoop .hdfs .protocol .HdfsConstants ;
24- import org .apache .hadoop .net . NetUtils ;
22+ import org .apache .hadoop .hdfs . server . namenode . NetworkTopologyServlet ;
2523import org .apache .hadoop .net .Node ;
26- import org .apache .hadoop .thirdparty .com .google .common .annotations .VisibleForTesting ;
2724import org .apache .hadoop .util .StringUtils ;
2825
2926import javax .servlet .ServletContext ;
30- import javax .servlet .http .HttpServlet ;
3127import javax .servlet .http .HttpServletRequest ;
3228import javax .servlet .http .HttpServletResponse ;
33- import javax .ws .rs .core .HttpHeaders ;
3429import java .io .IOException ;
3530import java .io .PrintStream ;
3631import java .util .ArrayList ;
4237/**
4338 * A servlet to print out the network topology from router.
4439 */
45- public class RouterNetworkTopologyServlet extends HttpServlet {
40+ public class RouterNetworkTopologyServlet extends NetworkTopologyServlet {
4641
4742 public static final String SERVLET_NAME = "topology" ;
4843 public static final String PATH_SPEC = "/topology" ;
@@ -52,7 +47,7 @@ public class RouterNetworkTopologyServlet extends HttpServlet {
5247
5348 @ Override
5449 public void doGet (HttpServletRequest request , HttpServletResponse response )
55- throws IOException {
50+ throws IOException {
5651 final ServletContext context = getServletContext ();
5752
5853 String format = parseAcceptHeader (request );
@@ -89,7 +84,7 @@ public void doGet(HttpServletRequest request, HttpServletResponse response)
8984 * @param datanodeInfos datanode Infos
9085 * @param format the response format
9186 */
92- public void printTopology (PrintStream stream , DatanodeInfo [] datanodeInfos ,
87+ private void printTopology (PrintStream stream , DatanodeInfo [] datanodeInfos ,
9388 String format ) throws IOException , BadFormatException {
9489 if (datanodeInfos .length == 0 ) {
9590 stream .print ("No DataNodes" );
@@ -118,70 +113,4 @@ public void printTopology(PrintStream stream, DatanodeInfo[] datanodeInfos,
118113 throw new BadFormatException ("Bad format: " + format );
119114 }
120115 }
121-
122- private void printJsonFormat (PrintStream stream , Map <String ,
123- TreeSet <String >> tree , ArrayList <String > racks ) throws IOException {
124- JsonFactory dumpFactory = new JsonFactory ();
125- JsonGenerator dumpGenerator = dumpFactory .createGenerator (stream );
126- dumpGenerator .writeStartArray ();
127-
128- for (String r : racks ) {
129- dumpGenerator .writeStartObject ();
130- dumpGenerator .writeFieldName (r );
131- TreeSet <String > nodes = tree .get (r );
132- dumpGenerator .writeStartArray ();
133-
134- for (String n : nodes ) {
135- dumpGenerator .writeStartObject ();
136- dumpGenerator .writeStringField ("ip" , n );
137- String hostname = NetUtils .getHostNameOfIP (n );
138- if (hostname != null ) {
139- dumpGenerator .writeStringField ("hostname" , hostname );
140- }
141- dumpGenerator .writeEndObject ();
142- }
143- dumpGenerator .writeEndArray ();
144- dumpGenerator .writeEndObject ();
145- }
146- dumpGenerator .writeEndArray ();
147- dumpGenerator .flush ();
148-
149- if (!dumpGenerator .isClosed ()) {
150- dumpGenerator .close ();
151- }
152- }
153-
154- private void printTextFormat (PrintStream stream , Map <String ,
155- TreeSet <String >> tree , ArrayList <String > racks ) {
156- for (String r : racks ) {
157- stream .println ("Rack: " + r );
158- TreeSet <String > nodes = tree .get (r );
159-
160- for (String n : nodes ) {
161- stream .print (" " + n );
162- String hostname = NetUtils .getHostNameOfIP (n );
163- if (hostname != null ) {
164- stream .print (" (" + hostname + ")" );
165- }
166- stream .println ();
167- }
168- stream .println ();
169- }
170- }
171-
172- @ VisibleForTesting
173- static String parseAcceptHeader (HttpServletRequest request ) {
174- String format = request .getHeader (HttpHeaders .ACCEPT );
175- return format != null && format .contains (FORMAT_JSON ) ?
176- FORMAT_JSON : FORMAT_TEXT ;
177- }
178-
179- public static class BadFormatException extends Exception {
180- private static final long serialVersionUID = 1L ;
181-
182- public BadFormatException (String msg ) {
183- super (msg );
184- }
185- }
186-
187116}
0 commit comments