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) ;
+            }
         }
     }
-
 }