You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by an...@apache.org on 2013/07/28 12:04:30 UTC

svn commit: r1507774 - in /jena/branches/jena-218: pages/ src/main/java/org/apache/jena/fuseki/server/ src/main/java/org/apache/jena/fuseki/servlets/

Author: andy
Date: Sun Jul 28 10:04:30 2013
New Revision: 1507774

URL: http://svn.apache.org/r1507774
Log:
JENA-218

Changes from jena-218-default-timeout.diff (18/Jul/13).
default timeout and maximum timeout (as single numeric values).

Modified:
    jena/branches/jena-218/pages/sparql.html
    jena/branches/jena-218/pages/sparql.tpl
    jena/branches/jena-218/src/main/java/org/apache/jena/fuseki/server/DatasetRef.java
    jena/branches/jena-218/src/main/java/org/apache/jena/fuseki/server/FusekiConfig.java
    jena/branches/jena-218/src/main/java/org/apache/jena/fuseki/server/FusekiVocab.java
    jena/branches/jena-218/src/main/java/org/apache/jena/fuseki/servlets/HttpAction.java
    jena/branches/jena-218/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_Query.java
    jena/branches/jena-218/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_ServletBase.java

Modified: jena/branches/jena-218/pages/sparql.html
URL: http://svn.apache.org/viewvc/jena/branches/jena-218/pages/sparql.html?rev=1507774&r1=1507773&r2=1507774&view=diff
==============================================================================
--- jena/branches/jena-218/pages/sparql.html (original)
+++ jena/branches/jena-218/pages/sparql.html Sun Jul 28 10:04:30 2013
@@ -50,7 +50,9 @@
           <input name="stylesheet" size="20" value="/xml-to-html.xsl" />
           <br/>
           <input type="checkbox" name="force-accept" value="text/plain"/>
-          Force the accept header to <tt>text/plain</tt> regardless 
+          Force the accept header to <tt>text/plain</tt> regardless
+          <br/>
+          Timeout: <input type="text" name="timeout"/> (seconds; leave blank for server default)
 	      <br/>
 	      <input type="submit" value="Get Results" />
 	    </p>

Modified: jena/branches/jena-218/pages/sparql.tpl
URL: http://svn.apache.org/viewvc/jena/branches/jena-218/pages/sparql.tpl?rev=1507774&r1=1507773&r2=1507774&view=diff
==============================================================================
--- jena/branches/jena-218/pages/sparql.tpl (original)
+++ jena/branches/jena-218/pages/sparql.tpl Sun Jul 28 10:04:30 2013
@@ -63,6 +63,8 @@
         <br/>
         <input type="checkbox" name="force-accept" value="text/plain"/>
         Force the accept header to <tt>text/plain</tt> regardless.
+        <br/>
+        Timeout: <input type="text" name="timeout" size="4"/> (seconds; leave blank for server default)
 	    <br/>
 	    <input type="submit" value="Get Results" />
       </form>

Modified: jena/branches/jena-218/src/main/java/org/apache/jena/fuseki/server/DatasetRef.java
URL: http://svn.apache.org/viewvc/jena/branches/jena-218/src/main/java/org/apache/jena/fuseki/server/DatasetRef.java?rev=1507774&r1=1507773&r2=1507774&view=diff
==============================================================================
--- jena/branches/jena-218/src/main/java/org/apache/jena/fuseki/server/DatasetRef.java (original)
+++ jena/branches/jena-218/src/main/java/org/apache/jena/fuseki/server/DatasetRef.java Sun Jul 28 10:04:30 2013
@@ -145,7 +145,8 @@ public class DatasetRef implements Datas
 
     //TODO Need to be able to set this from the config file.  
     public boolean allowDatasetUpdate           = false;
-    
+
+    public long defaultTimeout                  = Long.MAX_VALUE;
     public boolean allowTimeoutOverride         = false;
     public long maximumTimeoutOverride          = Long.MAX_VALUE;
     

Modified: jena/branches/jena-218/src/main/java/org/apache/jena/fuseki/server/FusekiConfig.java
URL: http://svn.apache.org/viewvc/jena/branches/jena-218/src/main/java/org/apache/jena/fuseki/server/FusekiConfig.java?rev=1507774&r1=1507773&r2=1507774&view=diff
==============================================================================
--- jena/branches/jena-218/src/main/java/org/apache/jena/fuseki/server/FusekiConfig.java (original)
+++ jena/branches/jena-218/src/main/java/org/apache/jena/fuseki/server/FusekiConfig.java Sun Jul 28 10:04:30 2013
@@ -222,12 +222,17 @@ public class FusekiConfig
         addServiceEP("graphStore(RW)", sDesc.name, sDesc.readWriteGraphStore, svc, "fu:serviceReadWriteGraphStore") ;
         addServiceEP("graphStore(R)", sDesc.name, sDesc.readGraphStore, svc, "fu:serviceReadGraphStore") ;
         // Extract timeout overriding configuration if present.
+        if (svc.hasProperty(FusekiVocab.pDefaultTimeout)) {
+        	sDesc.defaultTimeout = (long) (svc.getProperty(FusekiVocab.pDefaultTimeout).getObject().asLiteral().getFloat() * 1000);
+        }
         if (svc.hasProperty(FusekiVocab.pAllowTimeoutOverride)) {
             sDesc.allowTimeoutOverride = svc.getProperty(FusekiVocab.pAllowTimeoutOverride).getObject().asLiteral().getBoolean();
             if (svc.hasProperty(FusekiVocab.pMaximumTimeoutOverride)) {
-                sDesc.maximumTimeoutOverride = (int) (svc.getProperty(FusekiVocab.pMaximumTimeoutOverride).getObject().asLiteral().getFloat() * 1000);
+                sDesc.maximumTimeoutOverride = (long) (svc.getProperty(FusekiVocab.pMaximumTimeoutOverride).getObject().asLiteral().getFloat() * 1000);
             }
         }
+        log.info("  timeouts = default: " + (sDesc.defaultTimeout == Long.MAX_VALUE ? "unlimited" : sDesc.defaultTimeout + "ms")
+        	+ (sDesc.allowTimeoutOverride ? (", max: " + (sDesc.maximumTimeoutOverride == Long.MAX_VALUE ? "unlimited" : sDesc.maximumTimeoutOverride + "ms")) : ", cannot be overridden"));
         
         Resource datasetDesc = ((Resource)getOne(svc, "fu:dataset")) ;
 

Modified: jena/branches/jena-218/src/main/java/org/apache/jena/fuseki/server/FusekiVocab.java
URL: http://svn.apache.org/viewvc/jena/branches/jena-218/src/main/java/org/apache/jena/fuseki/server/FusekiVocab.java?rev=1507774&r1=1507773&r2=1507774&view=diff
==============================================================================
--- jena/branches/jena-218/src/main/java/org/apache/jena/fuseki/server/FusekiVocab.java (original)
+++ jena/branches/jena-218/src/main/java/org/apache/jena/fuseki/server/FusekiVocab.java Sun Jul 28 10:04:30 2013
@@ -41,6 +41,7 @@ public class FusekiVocab
     public static final Property pServiceReadWriteGraphStoreEP = property("serviceReadWriteGraphStore") ;
     public static final Property pServiceReadgraphStoreEP = property("serviceReadGraphStore") ;
 
+    public static final Property pDefaultTimeout = property("defaultTimeout");
     public static final Property pAllowTimeoutOverride = property("allowTimeoutOverride");
     public static final Property pMaximumTimeoutOverride = property("maximumTimeoutOverride");
 

Modified: jena/branches/jena-218/src/main/java/org/apache/jena/fuseki/servlets/HttpAction.java
URL: http://svn.apache.org/viewvc/jena/branches/jena-218/src/main/java/org/apache/jena/fuseki/servlets/HttpAction.java?rev=1507774&r1=1507773&r2=1507774&view=diff
==============================================================================
--- jena/branches/jena-218/src/main/java/org/apache/jena/fuseki/servlets/HttpAction.java (original)
+++ jena/branches/jena-218/src/main/java/org/apache/jena/fuseki/servlets/HttpAction.java Sun Jul 28 10:04:30 2013
@@ -60,6 +60,9 @@ public class HttpAction
 
     private long startTime = -2 ;
     private long finishTime = -2 ;
+
+    // Set by e.g. SPARQL_Query.setAnyTimeouts(), for picking up later.
+    public long timeout = Long.MAX_VALUE;
     
     // Incoming
     //public final 

Modified: jena/branches/jena-218/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_Query.java
URL: http://svn.apache.org/viewvc/jena/branches/jena-218/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_Query.java?rev=1507774&r1=1507773&r2=1507774&view=diff
==============================================================================
--- jena/branches/jena-218/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_Query.java (original)
+++ jena/branches/jena-218/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_Query.java Sun Jul 28 10:04:30 2013
@@ -20,6 +20,9 @@ package org.apache.jena.fuseki.servlets;
 
 import static java.lang.String.format ;
 import static org.apache.jena.fuseki.HttpNames.* ;
+import static org.apache.jena.fuseki.server.CounterName.QueryExecErrors ;
+import static org.apache.jena.fuseki.server.CounterName.QueryTimeouts ;
+import static org.apache.jena.fuseki.server.CounterName.RequestsBad ;
 
 import java.io.IOException ;
 import java.io.InputStream ;
@@ -31,10 +34,9 @@ import javax.servlet.http.HttpServletRes
 import org.apache.jena.atlas.io.IO ;
 import org.apache.jena.atlas.io.IndentedLineBuffer ;
 import org.apache.jena.atlas.web.MediaType ;
-import org.apache.jena.fuseki.FusekiException ;
 import org.apache.jena.fuseki.FusekiLib ;
+import org.apache.jena.fuseki.FusekiRequestException ;
 import org.apache.jena.fuseki.HttpNames ;
-import static org.apache.jena.fuseki.server.CounterName.* ;
 import org.apache.jena.riot.WebContent ;
 import org.apache.jena.riot.web.HttpOp ;
 import org.apache.jena.web.HttpSC ;
@@ -316,26 +318,29 @@ public abstract class SPARQL_Query exten
         if (!(action.getDatasetRef().allowTimeoutOverride))
             return;
 
-        long desiredTimeout = Long.MAX_VALUE;
+        long desiredTimeout = action.getDatasetRef().defaultTimeout;
         String timeoutHeader = action.request.getHeader("Timeout");
         String timeoutParameter = action.request.getParameter("timeout");
         if (timeoutHeader != null) {
             try {
-                desiredTimeout = (int) Float.parseFloat(timeoutHeader) * 1000;
+                desiredTimeout = (long) (Float.parseFloat(timeoutHeader) * 1000);
             } catch (NumberFormatException e) {
-                throw new FusekiException("Timeout header must be a number", e);
+                throw FusekiRequestException.create(HttpSC.BAD_REQUEST_400, "Timeout header must be a number");
             }
-        } else if (timeoutParameter != null) {
+        } else if (timeoutParameter != null && !timeoutParameter.equals("")) {
             try {
-                desiredTimeout = (int) Float.parseFloat(timeoutParameter) * 1000;
+                desiredTimeout = (long) (Float.parseFloat(timeoutParameter) * 1000);
             } catch (NumberFormatException e) {
-                throw new FusekiException("timeout parameter must be a number", e);
+                throw FusekiRequestException.create(HttpSC.BAD_REQUEST_400, "timeout parameter must be a number");
             }
         }
 
         desiredTimeout = Math.min(action.getDatasetRef().maximumTimeoutOverride, desiredTimeout);
-        if (desiredTimeout != Long.MAX_VALUE)
+        if (desiredTimeout != Long.MAX_VALUE) {
+        	log.info(String.format("[%d] Setting timeout: %d ms", action.id, desiredTimeout));
+        	action.timeout = desiredTimeout;
             qexec.setTimeout(desiredTimeout);
+        }
     }
 
     protected abstract Dataset decideDataset(HttpAction action, Query query, String queryStringLog) ;

Modified: jena/branches/jena-218/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_ServletBase.java
URL: http://svn.apache.org/viewvc/jena/branches/jena-218/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_ServletBase.java?rev=1507774&r1=1507773&r2=1507774&view=diff
==============================================================================
--- jena/branches/jena-218/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_ServletBase.java (original)
+++ jena/branches/jena-218/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_ServletBase.java Sun Jul 28 10:04:30 2013
@@ -73,7 +73,7 @@ public abstract class SPARQL_ServletBase
                 execCommonWorker(action) ;
             } catch (QueryCancelledException ex) {
                 // Also need the per query info ...
-                String message = String.format("The query timed out (restricted to %s ms)", cxt.get(ARQ.queryTimeout));
+                String message = String.format("The query timed out (restricted to %s ms)", action.timeout);
                 // Possibility :: response.setHeader("Retry-after", "600") ;    // 5 minutes
                 responseSendError(response, HttpSC.SERVICE_UNAVAILABLE_503, message);
             } catch (ActionErrorException ex) {