From c991ae41362f7fb44380d3722c72bee8e3941fad Mon Sep 17 00:00:00 2001 From: Andy Seaborne Date: Fri, 13 Oct 2017 15:13:18 +0100 Subject: [PATCH 1/2] Put back jena-spatial into -Pdev for build stability --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index d09eef96fa2..27a994d2cc2 100644 --- a/pom.xml +++ b/pom.xml @@ -81,7 +81,7 @@ jena-text - + jena-spatial jena-cmds jena-fuseki2 @@ -241,4 +241,4 @@ http://issues.apache.org/jira/browse/JENA - \ No newline at end of file + From 57951c902e0f8a8c5567c6dd0f4d1ba72e3ea0d7 Mon Sep 17 00:00:00 2001 From: Andy Seaborne Date: Fri, 13 Oct 2017 15:16:48 +0100 Subject: [PATCH 2/2] JENA-1401: Use JDK-provided thread-safe set. --- .../org/apache/jena/fuseki/async/AsyncPool.java | 8 +++++++- .../org/apache/jena/fuseki/mgt/ActionSleep.java | 8 ++------ .../java/org/apache/jena/fuseki/mgt/Backup.java | 15 +++++++++++---- 3 files changed, 20 insertions(+), 11 deletions(-) diff --git a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/async/AsyncPool.java b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/async/AsyncPool.java index 90645f5df7b..2be9000274f 100644 --- a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/async/AsyncPool.java +++ b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/async/AsyncPool.java @@ -51,7 +51,13 @@ public AsyncTask submit(Runnable task, String displayName, DataService dataServi synchronized(mutex) { String taskId = Long.toString(++counter) ; Fuseki.serverLog.info(format("Task : %s : %s",taskId, displayName)) ; - Callable c = Executors.callable(task) ; + Callable c = ()->{ + try { task.run(); } + catch (Throwable th) { + Fuseki.serverLog.warn(format("Exception in task %s execution", taskId), th); + } + return null; + }; AsyncTask asyncTask = new AsyncTask(c, this, taskId, displayName, dataService, requestId) ; /* Future future = */ executor.submit(asyncTask); runningTasks.put(taskId, asyncTask) ; diff --git a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/mgt/ActionSleep.java b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/mgt/ActionSleep.java index 94d7ad8ff1e..1f7a540d4df 100644 --- a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/mgt/ActionSleep.java +++ b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/mgt/ActionSleep.java @@ -31,7 +31,7 @@ import org.apache.jena.fuseki.servlets.ServletOps ; import org.slf4j.Logger ; -/** A task that kicks off a asynchornous operation that simply waits and exits. For testing. */ +/** A task that kicks off a asynchronous operation that simply waits and exits. For testing. */ public class ActionSleep extends ActionCtl /* Not ActionAsyncTask - that is a container-item based.c */ { private static final long serialVersionUID = 1925107412069359647L; @@ -55,12 +55,8 @@ protected void perform(HttpAction action) { protected Runnable createRunnable(HttpAction action) { String name = action.getDatasetName() ; - if ( name == null ) { -// action.log.error("Null for dataset name in item request") ; -// ServletOps.errorOccurred("Null for dataset name in item request"); -// return null ; + if ( name == null ) name = "''" ; - } String interval = action.request.getParameter("interval") ; int sleepMilli = 5000 ; diff --git a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/mgt/Backup.java b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/mgt/Backup.java index 8c9a125c290..644e9537699 100644 --- a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/mgt/Backup.java +++ b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/mgt/Backup.java @@ -19,7 +19,9 @@ package org.apache.jena.fuseki.mgt; import java.io.* ; +import java.util.Collections; import java.util.Set ; +import java.util.concurrent.ConcurrentHashMap; import java.util.zip.GZIPOutputStream ; import org.apache.jena.atlas.io.IO ; @@ -34,7 +36,6 @@ import org.apache.jena.sparql.core.DatasetGraph ; import org.apache.jena.sparql.core.Transactional ; import org.apache.jena.sparql.core.TransactionalNull ; -import org.eclipse.jetty.util.ConcurrentHashSet ; /** Perform a backup */ public class Backup @@ -58,23 +59,29 @@ public static String chooseFileName(String dsName) { // Record of all backups so we don't attempt to backup the // same dataset multiple times at the same time. - private static Set activeBackups = new ConcurrentHashSet<>() ; + private static Set activeBackups = Collections.newSetFromMap(new ConcurrentHashMap<>()); /** Perform a backup. - * A backup is a dump of the datset in comrpessed N-Quads, done inside a transaction. + * A backup is a dump of the dataset in comrpessed N-Quads, done inside a transaction. */ public static void backup(Transactional transactional, DatasetGraph dsg, String backupfile) { + + Log.info(Fuseki.serverLog, "Backup("+backupfile+"):1"); + if ( transactional == null ) transactional = new TransactionalNull() ; transactional.begin(ReadWrite.READ); try { Backup.backup(dsg, backupfile) ; + } catch (Exception ex) { + Log.warn(Fuseki.serverLog, "Exception in backup", ex); } finally { transactional.end() ; } + Log.info(Fuseki.serverLog, "Backup("+backupfile+"):2"); } - + /** Perform a backup. * * @see #backup(Transactional, DatasetGraph, String)