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

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

commit b2e978129329c155fcfcd24954eae359b2c4c1ac
Author: Andy Seaborne <[email protected]>
AuthorDate: Sun Nov 23 21:13:08 2025 +0000

    Query cancellation HTTP status code
---
 .../src/main/java/org/apache/jena/fuseki/Fuseki.java                 | 5 +++++
 .../src/main/java/org/apache/jena/fuseki/servlets/ActionExecLib.java | 2 +-
 .../src/main/java/org/apache/jena/fuseki/servlets/Responses.java     | 3 ++-
 3 files changed, 8 insertions(+), 2 deletions(-)

diff --git 
a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/Fuseki.java
 
b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/Fuseki.java
index e7a996dd11..7d49fdca77 100644
--- 
a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/Fuseki.java
+++ 
b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/Fuseki.java
@@ -32,6 +32,7 @@ import org.apache.jena.riot.system.stream.LocatorHTTP;
 import org.apache.jena.riot.system.stream.StreamManager;
 import org.apache.jena.sparql.util.Context;
 import org.apache.jena.sparql.util.Symbol;
+import org.apache.jena.web.HttpSC;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -169,6 +170,10 @@ public class Fuseki {
     public static final String        compactLogName    = PATH + ".Compact";
     public static final Logger        compactLog        = 
LoggerFactory.getLogger(compactLogName);;
 
+    // There isn't an ideal status code for a cancelled query.
+    // HTTP 408 "Request timeout" which is about connection management
+    public static int SC_QueryCancelled                 = 
HttpSC.SERVICE_UNAVAILABLE_503;
+
     // Servlet context attribute names used by the core engine.
     // Also in FusekiServerCtl for Fuseki server
     public static final String attrVerbose                 = 
"org.apache.jena.fuseki:verbose";
diff --git 
a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/ActionExecLib.java
 
b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/ActionExecLib.java
index 96ec9dca2e..18f5597fb2 100644
--- 
a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/ActionExecLib.java
+++ 
b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/ActionExecLib.java
@@ -129,7 +129,7 @@ public class ActionExecLib {
             //    dataset -- dataset.getContect(ARQ.queryTimeout)
             //    protocol -- SPARQL_Query.setAnyTimeouts
             String message = "Query timed out";
-            ServletOps.responseSendError(response, 
HttpSC.SERVICE_UNAVAILABLE_503, message);
+            ServletOps.responseSendError(response, Fuseki.SC_QueryCancelled, 
message);
         } catch (QueryDeniedException ex) {
             // Typically a configuration setting blocks the query.
             ServletOps.responseSendError(response, 
HttpSC.UNPROCESSABLE_ENTITY_422, ex.getMessage());
diff --git 
a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/Responses.java
 
b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/Responses.java
index 018a6290a0..4ba8b5cd6b 100644
--- 
a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/Responses.java
+++ 
b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/Responses.java
@@ -132,7 +132,8 @@ public class Responses
                 // Status code 200 may have already been sent.
                 // We can try to set the HTTP response code anyway.
                 // Breaking the results is the best we can do to indicate the 
timeout.
-                action.setResponseStatus(HttpSC.BAD_REQUEST_400);
+                // There isn't an ideal status code. Keep this aligned with 
the status used in ActionExecLib. execActionSub
+                action.setResponseStatus(Fuseki.SC_QueryCancelled);
                 action.log.info(format("[%d] Query Cancelled - results 
truncated (but 200 may have already been sent)", action.id));
                 PrintStream ps = new PrintStream(out);
                 ps.println();

Reply via email to