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

ostinru pushed a commit to branch add-ssid-to-mdc
in repository https://gitbox.apache.org/repos/asf/cloudberry-pxf.git

commit a4b99be63ee55bf25dc0ca38449e0664f261ddf4
Author: Nikolay Antonov <[email protected]>
AuthorDate: Sun May 31 14:47:50 2026 +0500

    Observability: Add gp_session_id and gp_command_count to MDC
---
 .../spring/PxfContextMdcLogEnhancerFilter.java     | 21 +++++++++++--
 .../spring/PxfContextMdcLogEnhancerFilterTest.java | 35 ++++++++++++++++++++++
 2 files changed, 54 insertions(+), 2 deletions(-)

diff --git 
a/server/pxf-service/src/main/java/org/apache/cloudberry/pxf/service/spring/PxfContextMdcLogEnhancerFilter.java
 
b/server/pxf-service/src/main/java/org/apache/cloudberry/pxf/service/spring/PxfContextMdcLogEnhancerFilter.java
index 04e2bb7a..a8d93050 100644
--- 
a/server/pxf-service/src/main/java/org/apache/cloudberry/pxf/service/spring/PxfContextMdcLogEnhancerFilter.java
+++ 
b/server/pxf-service/src/main/java/org/apache/cloudberry/pxf/service/spring/PxfContextMdcLogEnhancerFilter.java
@@ -21,8 +21,17 @@ import java.io.IOException;
 @Component
 public class PxfContextMdcLogEnhancerFilter extends OncePerRequestFilter {
 
+    // sessionId: composite PXF request identifier formed as 
"<X-GP-XID>:<X-GP-OPTIONS-SERVER>",
+    // where XID is the Greenplum transaction id and the server name defaults 
to "default".
+    // Groups all log records produced while serving a single PXF request.
     private static final String MDC_SESSION_ID = "sessionId";
+    // segmentId: the Greenplum segment id (X-GP-SEGMENT-ID) that issued the 
PXF request.
     private static final String MDC_SEGMENT_ID = "segmentId";
+    // ssid: query session identifier from pg_stat_activity system view.
+    private static final String MDC_SSID = "ssid";
+    // ccnt: the command number within this session as shown by 
gp_command_count.
+    // All records associated with the query will have the same ccnt.
+    private static final String MDC_CCNT = "ccnt";
 
     private final HttpHeaderDecoder decoder;
 
@@ -60,10 +69,16 @@ public class PxfContextMdcLogEnhancerFilter extends 
OncePerRequestFilter {
         String serverName = 
StringUtils.defaultIfBlank(decoder.getHeaderValue("X-GP-OPTIONS-SERVER", 
request, encoded), "default");
         String sessionId = String.format("%s:%s", xid, serverName);
         String segmentId = decoder.getHeaderValue("X-GP-SEGMENT-ID", request, 
encoded);
+        String gpSessionId = decoder.getHeaderValue("X-GP-SESSION-ID", 
request, encoded);
+        String gpCommandCount = decoder.getHeaderValue("X-GP-COMMAND-COUNT", 
request, encoded);
         MDC.put(MDC_SESSION_ID, sessionId);
         MDC.put(MDC_SEGMENT_ID, segmentId);
-        log.debug("MDC: Added {}={}", MDC_SESSION_ID, sessionId);
-        log.debug("MDC: Added {}={}", MDC_SEGMENT_ID, segmentId);
+        MDC.put(MDC_SSID, gpSessionId);
+        MDC.put(MDC_CCNT, gpCommandCount);
+        log.trace("MDC: Added {}={}", MDC_SESSION_ID, sessionId);
+        log.trace("MDC: Added {}={}", MDC_SEGMENT_ID, segmentId);
+        log.trace("MDC: Added {}={}", MDC_SSID, gpSessionId);
+        log.trace("MDC: Added {}={}", MDC_CCNT, gpCommandCount);
     }
 
     /**
@@ -73,5 +88,7 @@ public class PxfContextMdcLogEnhancerFilter extends 
OncePerRequestFilter {
         // removing possibly non-existent item is OK
         MDC.remove(MDC_SEGMENT_ID);
         MDC.remove(MDC_SESSION_ID);
+        MDC.remove(MDC_SSID);
+        MDC.remove(MDC_CCNT);
     }
 }
diff --git 
a/server/pxf-service/src/test/java/org/apache/cloudberry/pxf/service/spring/PxfContextMdcLogEnhancerFilterTest.java
 
b/server/pxf-service/src/test/java/org/apache/cloudberry/pxf/service/spring/PxfContextMdcLogEnhancerFilterTest.java
index 5b97caef..18230611 100644
--- 
a/server/pxf-service/src/test/java/org/apache/cloudberry/pxf/service/spring/PxfContextMdcLogEnhancerFilterTest.java
+++ 
b/server/pxf-service/src/test/java/org/apache/cloudberry/pxf/service/spring/PxfContextMdcLogEnhancerFilterTest.java
@@ -42,6 +42,8 @@ class PxfContextMdcLogEnhancerFilterTest {
         // always removes
         verify(mdcMock).remove("segmentId");
         verify(mdcMock).remove("sessionId");
+        verify(mdcMock).remove("ssid");
+        verify(mdcMock).remove("ccnt");
         verifyNoMoreInteractions(mdcMock);
     }
 
@@ -54,9 +56,13 @@ class PxfContextMdcLogEnhancerFilterTest {
 
         verify(mdcMock).put("sessionId", "transaction:id:default");
         verify(mdcMock).put("segmentId", "5");
+        verify(mdcMock).put("ssid", null);
+        verify(mdcMock).put("ccnt", null);
 
         verify(mdcMock).remove("segmentId");
         verify(mdcMock).remove("sessionId");
+        verify(mdcMock).remove("ssid");
+        verify(mdcMock).remove("ccnt");
         verifyNoMoreInteractions(mdcMock);
     }
 
@@ -70,9 +76,34 @@ class PxfContextMdcLogEnhancerFilterTest {
 
         verify(mdcMock).put("sessionId", "transaction:id:s3");
         verify(mdcMock).put("segmentId", "5");
+        verify(mdcMock).put("ssid", null);
+        verify(mdcMock).put("ccnt", null);
 
         verify(mdcMock).remove("segmentId");
         verify(mdcMock).remove("sessionId");
+        verify(mdcMock).remove("ssid");
+        verify(mdcMock).remove("ccnt");
+        verifyNoMoreInteractions(mdcMock);
+    }
+
+    @Test
+    void testPxfContextRequestWithGpSessionId() throws ServletException, 
IOException {
+
+        mockRequest.addHeader("X-GP-XID", "transaction:id");
+        mockRequest.addHeader("X-GP-SEGMENT-ID", "5");
+        mockRequest.addHeader("X-GP-SESSION-ID", "12345");
+        mockRequest.addHeader("X-GP-COMMAND-COUNT", "7");
+        filter.doFilter(mockRequest, mockResponse, mockFilterChain);
+
+        verify(mdcMock).put("sessionId", "transaction:id:default");
+        verify(mdcMock).put("segmentId", "5");
+        verify(mdcMock).put("ssid", "12345");
+        verify(mdcMock).put("ccnt", "7");
+
+        verify(mdcMock).remove("segmentId");
+        verify(mdcMock).remove("sessionId");
+        verify(mdcMock).remove("ssid");
+        verify(mdcMock).remove("ccnt");
         verifyNoMoreInteractions(mdcMock);
     }
 
@@ -86,9 +117,13 @@ class PxfContextMdcLogEnhancerFilterTest {
 
         verify(mdcMock).put("sessionId", "transaction:id:default");
         verify(mdcMock).put("segmentId", "5");
+        verify(mdcMock).put("ssid", null);
+        verify(mdcMock).put("ccnt", null);
 
         verify(mdcMock).remove("segmentId");
         verify(mdcMock).remove("sessionId");
+        verify(mdcMock).remove("ssid");
+        verify(mdcMock).remove("ccnt");
         verifyNoMoreInteractions(mdcMock);
     }
 }
\ No newline at end of file


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to