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 2014/02/24 15:38:11 UTC
svn commit: r1571302 -
/jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/mgt/Backup.java
Author: andy
Date: Mon Feb 24 14:38:11 2014
New Revision: 1571302
URL: http://svn.apache.org/r1571302
Log:
Keep a Avoid overlapping backups
Modified:
jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/mgt/Backup.java
Modified: jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/mgt/Backup.java
URL: http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/mgt/Backup.java?rev=1571302&r1=1571301&r2=1571302&view=diff
==============================================================================
--- jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/mgt/Backup.java (original)
+++ jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/mgt/Backup.java Mon Feb 24 14:38:11 2014
@@ -19,6 +19,8 @@
package org.apache.jena.fuseki.mgt;
import java.io.* ;
+import java.util.HashSet ;
+import java.util.Set ;
import java.util.zip.GZIPOutputStream ;
import org.apache.jena.atlas.io.IO ;
@@ -46,17 +48,29 @@ public class Backup
return filename ;
}
+ // Rcord of all backups so we don't attempt to backup the
+ // same dataset multiple times at the same time.
+ private static Set<DatasetGraph> activeBackups = new HashSet<>() ;
+
public static void backup(DatasetGraph dsg, String backupfile) {
if ( !backupfile.endsWith(".nq") )
backupfile = backupfile + ".nq" ;
+ // Per backup source lock.
+ synchronized(activeBackups) {
+ // Atomically check-and-set
+ if ( activeBackups.contains(backupfile) )
+ Log.warn(Fuseki.serverLog, "Backup already in progress") ;
+ activeBackups.add(dsg) ;
+ }
+
OutputStream out = null ;
try {
+
if ( true ) {
// This seems to achive about the same as "gzip -6"
- // It's not too expensive in elapsed time but it's not zero
- // cost.
- // GZip, large buffer.
+ // It's not too expensive in elapsed time but it's not
+ // zero cost. GZip, large buffer.
out = new FileOutputStream(backupfile + ".gz") ;
out = new GZIPOutputStream(out, 8 * 1024) ;
out = new BufferedOutputStream(out) ;
@@ -78,8 +92,11 @@ public class Backup
if ( out != null )
out.close() ;
} catch (IOException e) { /* ignore */}
+ // Remove lock.
+ synchronized(activeBackups) {
+ activeBackups.remove(dsg) ;
+ }
}
}
-
}