Author: olamy
Date: Fri Dec 13 05:31:13 2013
New Revision: 1550647

URL: http://svn.apache.org/r1550647
Log:
track FileNotFoundException if a concurrent thread delete the file before 
locking and try recreate it

Modified:
    
archiva/trunk/archiva-modules/archiva-base/archiva-filelock/src/main/java/org/apache/archiva/common/filelock/DefaultFileLockManager.java

Modified: 
archiva/trunk/archiva-modules/archiva-base/archiva-filelock/src/main/java/org/apache/archiva/common/filelock/DefaultFileLockManager.java
URL: 
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-base/archiva-filelock/src/main/java/org/apache/archiva/common/filelock/DefaultFileLockManager.java?rev=1550647&r1=1550646&r2=1550647&view=diff
==============================================================================
--- 
archiva/trunk/archiva-modules/archiva-base/archiva-filelock/src/main/java/org/apache/archiva/common/filelock/DefaultFileLockManager.java
 (original)
+++ 
archiva/trunk/archiva-modules/archiva-base/archiva-filelock/src/main/java/org/apache/archiva/common/filelock/DefaultFileLockManager.java
 Fri Dec 13 05:31:13 2013
@@ -94,10 +94,15 @@ public class DefaultFileLockManager
 
                 try
                 {
-                    file.createNewFile();
                     lock.openLock( false, timeout > 0 );
                     acquired = true;
                 }
+                catch ( FileNotFoundException e )
+                {
+                    // can happen if an other thread has deleted the file
+                    log.debug( "read Lock skip: {} try to create file", 
e.getMessage() );
+                    createNewFileQuietly( file );
+                }
                 catch ( IOException e )
                 {
                     throw new FileLockException( e.getMessage(), e );
@@ -169,6 +174,12 @@ public class DefaultFileLockManager
                     lock.openLock( true, timeout > 0 );
                     acquired = true;
                 }
+                catch ( FileNotFoundException e )
+                {
+                    // can happen if an other thread has deleted the file
+                    log.debug( "write Lock skip: {} try to create file", 
e.getMessage() );
+                    createNewFileQuietly( file );
+                }
                 catch ( IOException e )
                 {
                     throw new FileLockException( e.getMessage(), e );
@@ -187,13 +198,31 @@ public class DefaultFileLockManager
 
             return lock;
         }
-        catch ( FileNotFoundException e )
+
+        catch (
+
+            FileNotFoundException e
+
+            )
+
         {
             throw new FileLockException( e.getMessage(), e );
         }
 
     }
 
+    private void createNewFileQuietly( File file )
+    {
+        try
+        {
+            file.createNewFile();
+        }
+        catch ( IOException e )
+        {
+            // skip that
+        }
+    }
+
     @Override
     public void release( Lock lock )
         throws FileLockException


Reply via email to