This is an automated email from the ASF dual-hosted git repository.

rexxiong pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/celeborn.git


The following commit(s) were added to refs/heads/main by this push:
     new 8c65ddd01 [CELEBORN-1390] ServletContextHandler should allow null path 
info to avoid redirection
8c65ddd01 is described below

commit 8c65ddd017f126ff463b995a425daeca29e04150
Author: SteNicholas <[email protected]>
AuthorDate: Wed Apr 17 15:09:04 2024 +0800

    [CELEBORN-1390] ServletContextHandler should allow null path info to avoid 
redirection
    
    ### What changes were proposed in this pull request?
    
    `ServletContextHandler` allows null path info to avoid redirection via 
`setAllowNullPathInfo(true)`.
    
    ### Why are the changes needed?
    
    `ServletContextHandler` does not allow null path info which causes that 
`celeborn.metrics.prometheus.path` and `celeborn.metrics.json.path` could not 
access without redirection. For example:
    
    ```
    celebornceleborn-test:/data/service/celeborn$ curl 
http://localhost:9096/metrics/prometheus
    celebornceleborn-test:/data/service/celeborn$ curl 
http://localhost:9096/metrics/prometheus/
    metrics_WriteDataHardSplitCount_Count{role="Worker"} 0 1713182689795
    metrics_ReplicateDataWriteFailCount_Count{role="Worker"} 0 1713182689795
    metrics_ReplicateDataConnectionExceptionCount_Count{role="Worker"} 0 
1713182689795
    metrics_FetchChunkFailCount_Count{role="Worker"} 0 1713182689795
    metrics_ReplicateDataCreateConnectionFailCount_Count{role="Worker"} 0 
1713182689795
    metrics_WriteDataSuccessCount_Count{role="Worker"} 0 1713182689795
    metrics_FetchChunkSuccessCount_Count{role="Worker"} 0 1713182689795
    metrics_ReplicateDataFailCount_Count{role="Worker"} 0 1713182689795
    metrics_RegionStartFailCount_Count{role="Worker"} 0 1713182689795
    metrics_RegionFinishFailCount_Count{role="Worker"} 0 1713182689795
    metrics_ActiveConnectionCount_Count{role="Worker"} 0 1713182689795
    metrics_SlotsAllocated_Count{role="Worker"} 0 1713182689795
    metrics_OpenStreamSuccessCount_Count{role="Worker"} 0 1713182689795
    metrics_WriteDataFailCount_Count{role="Worker"} 0 1713182689795
    metrics_ReplicateDataFailNonCriticalCauseCount_Count{role="Worker"} 0 
1713182689795
    metrics_ReplicateDataTimeoutCount_Count{role="Worker"} 0 1713182689795
    metrics_PushDataHandshakeFailCount_Count{role="Worker"} 0 1713182689795
    metrics_OpenStreamFailCount_Count{role="Worker"} 0 1713182689795
    ```
    
    `ServletContextHandler` should allow null path info to avoid redirection 
via `setAllowNullPathInfo(true)`. `setAllowNullPathInfo()` sets true if 
`/context` is not redirected to `/context/`.
    
    ### Does this PR introduce _any_ user-facing change?
    
    No.
    
    ### How was this patch tested?
    
    - `ApiMasterResourceSuite`
    - `ApiWorkerResourceSuite`
    
    ```
    celebornceleborn-test:/data/service/celeborn$ curl 
http://localhost:9096/metrics/prometheus
    metrics_WriteDataHardSplitCount_Count{role="Worker"} 0 1713182689795
    metrics_ReplicateDataWriteFailCount_Count{role="Worker"} 0 1713182689795
    metrics_ReplicateDataConnectionExceptionCount_Count{role="Worker"} 0 
1713182689795
    metrics_FetchChunkFailCount_Count{role="Worker"} 0 1713182689795
    metrics_ReplicateDataCreateConnectionFailCount_Count{role="Worker"} 0 
1713182689795
    metrics_WriteDataSuccessCount_Count{role="Worker"} 0 1713182689795
    metrics_FetchChunkSuccessCount_Count{role="Worker"} 0 1713182689795
    metrics_ReplicateDataFailCount_Count{role="Worker"} 0 1713182689795
    metrics_RegionStartFailCount_Count{role="Worker"} 0 1713182689795
    metrics_RegionFinishFailCount_Count{role="Worker"} 0 1713182689795
    metrics_ActiveConnectionCount_Count{role="Worker"} 0 1713182689795
    metrics_SlotsAllocated_Count{role="Worker"} 0 1713182689795
    metrics_OpenStreamSuccessCount_Count{role="Worker"} 0 1713182689795
    metrics_WriteDataFailCount_Count{role="Worker"} 0 1713182689795
    metrics_ReplicateDataFailNonCriticalCauseCount_Count{role="Worker"} 0 
1713182689795
    metrics_ReplicateDataTimeoutCount_Count{role="Worker"} 0 1713182689795
    metrics_PushDataHandshakeFailCount_Count{role="Worker"} 0 1713182689795
    metrics_OpenStreamFailCount_Count{role="Worker"} 0 1713182689795
    celebornceleborn-test:/data/service/celeborn$ curl 
http://localhost:9096/metrics/prometheus/
    metrics_WriteDataHardSplitCount_Count{role="Worker"} 0 1713182689795
    metrics_ReplicateDataWriteFailCount_Count{role="Worker"} 0 1713182689795
    metrics_ReplicateDataConnectionExceptionCount_Count{role="Worker"} 0 
1713182689795
    metrics_FetchChunkFailCount_Count{role="Worker"} 0 1713182689795
    metrics_ReplicateDataCreateConnectionFailCount_Count{role="Worker"} 0 
1713182689795
    metrics_WriteDataSuccessCount_Count{role="Worker"} 0 1713182689795
    metrics_FetchChunkSuccessCount_Count{role="Worker"} 0 1713182689795
    metrics_ReplicateDataFailCount_Count{role="Worker"} 0 1713182689795
    metrics_RegionStartFailCount_Count{role="Worker"} 0 1713182689795
    metrics_RegionFinishFailCount_Count{role="Worker"} 0 1713182689795
    metrics_ActiveConnectionCount_Count{role="Worker"} 0 1713182689795
    metrics_SlotsAllocated_Count{role="Worker"} 0 1713182689795
    metrics_OpenStreamSuccessCount_Count{role="Worker"} 0 1713182689795
    metrics_WriteDataFailCount_Count{role="Worker"} 0 1713182689795
    metrics_ReplicateDataFailNonCriticalCauseCount_Count{role="Worker"} 0 
1713182689795
    metrics_ReplicateDataTimeoutCount_Count{role="Worker"} 0 1713182689795
    metrics_PushDataHandshakeFailCount_Count{role="Worker"} 0 1713182689795
    metrics_OpenStreamFailCount_Count{role="Worker"} 0 1713182689795
    
    Closes #2464 from SteNicholas/CELEBORN-1390.
    
    Authored-by: SteNicholas <[email protected]>
    Signed-off-by: Shuang <[email protected]>
---
 .../celeborn/server/common/http/HttpUtils.scala      | 20 ++++++++++++--------
 1 file changed, 12 insertions(+), 8 deletions(-)

diff --git 
a/service/src/main/scala/org/apache/celeborn/server/common/http/HttpUtils.scala 
b/service/src/main/scala/org/apache/celeborn/server/common/http/HttpUtils.scala
index b9b6a3ec2..521edae1c 100644
--- 
a/service/src/main/scala/org/apache/celeborn/server/common/http/HttpUtils.scala
+++ 
b/service/src/main/scala/org/apache/celeborn/server/common/http/HttpUtils.scala
@@ -75,7 +75,6 @@ private[celeborn] object HttpUtils extends Logging {
   def createStaticHandler(
       resourceBase: String,
       contextPath: String): ServletContextHandler = {
-    val contextHandler = new ServletContextHandler()
     val holder = new ServletHolder(classOf[DefaultServlet])
     
Option(Thread.currentThread().getContextClassLoader.getResource(resourceBase)) 
match {
       case Some(res) =>
@@ -83,17 +82,12 @@ private[celeborn] object HttpUtils extends Logging {
       case None =>
         throw new CelebornException("Could not find resource path for Web UI: 
" + resourceBase)
     }
-    contextHandler.setContextPath(contextPath)
-    contextHandler.addServlet(holder, "/")
-    contextHandler
+    createContextHandler(contextPath, holder)
   }
 
   def createServletHandler(contextPath: String, servlet: HttpServlet): 
ServletContextHandler = {
-    val handler = new ServletContextHandler()
     val holder = new ServletHolder(servlet)
-    handler.setContextPath(contextPath)
-    handler.addServlet(holder, "/")
-    handler
+    createContextHandler(contextPath, holder)
   }
 
   def createRedirectHandler(src: String, dest: String): ServletContextHandler 
= {
@@ -125,4 +119,14 @@ private[celeborn] object HttpUtils extends Logging {
 
     createServletHandler(src, redirectedServlet)
   }
+
+  def createContextHandler(
+      contextPath: String,
+      servletHolder: ServletHolder): ServletContextHandler = {
+    val contextHandler = new ServletContextHandler()
+    contextHandler.setContextPath(contextPath)
+    contextHandler.addServlet(servletHolder, "/")
+    contextHandler.setAllowNullPathInfo(true)
+    contextHandler
+  }
 }

Reply via email to