4242import  org .apache .hadoop .hdfs .DFSConfigKeys ;
4343import  org .apache .hadoop .hdfs .DFSUtilClient ;
4444import  org .apache .hadoop .security .SecurityUtil ;
45+ import  org .eclipse .jetty .server .Response ;
4546import  org .slf4j .Logger ;
4647import  org .slf4j .LoggerFactory ;
4748import  org .apache .hadoop .classification .InterfaceAudience ;
@@ -119,7 +120,7 @@ private FSImage getAndValidateFSImage(ServletContext context,
119120    if  (nnImage  == null ) {
120121      String  errorMsg  = "NameNode initialization not yet complete. " 
121122          + "FSImage has not been set in the NameNode." ;
122-       response . sendError (HttpServletResponse .SC_FORBIDDEN , errorMsg );
123+       sendError (response ,  HttpServletResponse .SC_FORBIDDEN , errorMsg );
123124      throw  new  IOException (errorMsg );
124125    }
125126    return  nnImage ;
@@ -218,7 +219,7 @@ private void serveFile(File file) throws IOException {
218219
219220    } catch  (Throwable  t ) {
220221      String  errMsg  = "GetImage failed. "  + StringUtils .stringifyException (t );
221-       response . sendError (HttpServletResponse .SC_GONE , errMsg );
222+       sendError (response ,  HttpServletResponse .SC_GONE , errMsg );
222223      throw  new  IOException (errMsg );
223224    } finally  {
224225      response .getOutputStream ().close ();
@@ -234,7 +235,7 @@ private void validateRequest(ServletContext context, Configuration conf,
234235            conf )) {
235236      String  errorMsg  = "Only Namenode, Secondary Namenode, and administrators may access " 
236237          + "this servlet" ;
237-       response . sendError (HttpServletResponse .SC_FORBIDDEN , errorMsg );
238+       sendError (response ,  HttpServletResponse .SC_FORBIDDEN , errorMsg );
238239      LOG .warn ("Received non-NN/SNN/administrator request for image or edits from " 
239240          + request .getUserPrincipal ().getName ()
240241          + " at " 
@@ -247,7 +248,7 @@ private void validateRequest(ServletContext context, Configuration conf,
247248        && !myStorageInfoString .equals (theirStorageInfoString )) {
248249      String  errorMsg  = "This namenode has storage info "  + myStorageInfoString 
249250          + " but the secondary expected "  + theirStorageInfoString ;
250-       response . sendError (HttpServletResponse .SC_FORBIDDEN , errorMsg );
251+       sendError (response ,  HttpServletResponse .SC_FORBIDDEN , errorMsg );
251252      LOG .warn ("Received an invalid request file transfer request " 
252253          + "from a secondary with storage info "  + theirStorageInfoString );
253254      throw  new  IOException (errorMsg );
@@ -578,7 +579,7 @@ public Void run() throws Exception {
578579                // we need a different response type here so the client can differentiate this 
579580                // from the failure to upload due to (1) security, or (2) other checkpoints already 
580581                // present 
581-                 response . sendError (HttpServletResponse .SC_EXPECTATION_FAILED ,
582+                 sendError (response ,  HttpServletResponse .SC_EXPECTATION_FAILED ,
582583                    "Nameode " +request .getLocalAddr ()+" is currently not in a state which can " 
583584                        + "accept uploads of new fsimages. State: " +state );
584585                return  null ;
@@ -593,15 +594,15 @@ public Void run() throws Exception {
593594              // if the node is attempting to upload an older transaction, we ignore it 
594595              SortedSet <ImageUploadRequest > larger  = currentlyDownloadingCheckpoints .tailSet (imageRequest );
595596              if  (larger .size () > 0 ) {
596-                 response . sendError (HttpServletResponse .SC_CONFLICT ,
597+                 sendError (response ,  HttpServletResponse .SC_CONFLICT ,
597598                    "Another checkpointer is already in the process of uploading a"  +
598599                        " checkpoint made up to transaction ID "  + larger .last ());
599600                return  null ;
600601              }
601602
602603              //make sure no one else has started uploading one 
603604              if  (!currentlyDownloadingCheckpoints .add (imageRequest )) {
604-                 response . sendError (HttpServletResponse .SC_CONFLICT ,
605+                 sendError (response ,  HttpServletResponse .SC_CONFLICT ,
605606                    "Either current namenode is checkpointing or another" 
606607                        + " checkpointer is already in the process of " 
607608                        + "uploading a checkpoint made at transaction ID " 
@@ -648,7 +649,7 @@ public Void run() throws Exception {
648649                    (txid  - lastCheckpointTxid ) + " expecting at least " 
649650                    + checkpointTxnCount ;
650651                LOG .info (message );
651-                 response . sendError (HttpServletResponse .SC_CONFLICT , message );
652+                 sendError (response ,  HttpServletResponse .SC_CONFLICT , message );
652653                return  null ;
653654              }
654655
@@ -658,7 +659,7 @@ public Void run() throws Exception {
658659                      + "another checkpointer already uploaded an " 
659660                      + "checkpoint for txid "  + txid ;
660661                  LOG .info (message );
661-                   response . sendError (HttpServletResponse .SC_CONFLICT , message );
662+                   sendError (response ,  HttpServletResponse .SC_CONFLICT , message );
662663                  return  null ;
663664                }
664665
@@ -695,11 +696,20 @@ public Void run() throws Exception {
695696          });
696697    } catch  (Throwable  t ) {
697698      String  errMsg  = "PutImage failed. "  + StringUtils .stringifyException (t );
698-       response . sendError (HttpServletResponse .SC_GONE , errMsg );
699+       sendError (response ,  HttpServletResponse .SC_GONE , errMsg );
699700      throw  new  IOException (errMsg );
700701    }
701702  }
702703
704+   private  void  sendError (HttpServletResponse  response , int  code , String  message )
705+       throws  IOException  {
706+     if  (response  instanceof  Response ) {
707+       ((Response )response ).setStatusWithReason (code , message );
708+     }
709+ 
710+     response .sendError (code , message );
711+   }
712+ 
703713  /* 
704714   * Params required to handle put image request 
705715   */ 
0 commit comments