]> source.dussan.org Git - archiva.git/commitdiff
better handling of FNFE
authorOlivier Lamy <olamy@apache.org>
Mon, 16 Dec 2013 22:01:19 +0000 (22:01 +0000)
committerOlivier Lamy <olamy@apache.org>
Mon, 16 Dec 2013 22:01:19 +0000 (22:01 +0000)
git-svn-id: https://svn.apache.org/repos/asf/archiva/trunk@1551370 13f79535-47bb-0310-9956-ffa450edef68

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

index db26076b9a945fa8c59c93f70a50a656f13647ec..ba3ab2fa1bfcd7ae06e79091de33b4195e071f68 100644 (file)
@@ -63,76 +63,65 @@ public class DefaultFileLockManager
         StopWatch stopWatch = new StopWatch();
         boolean acquired = false;
         mkdirs( file.getParentFile() );
-        try
-        {
 
-            Lock lock = null;
+        Lock lock = null;
 
-            stopWatch.start();
+        stopWatch.start();
 
-            while ( !acquired )
-            {
+        while ( !acquired )
+        {
 
-                if ( timeout > 0 )
+            if ( timeout > 0 )
+            {
+                long delta = stopWatch.getTime();
+                log.debug( "delta {}, timeout {}", delta, timeout );
+                if ( delta > timeout )
                 {
-                    long delta = stopWatch.getTime();
-                    log.debug( "delta {}, timeout {}", delta, timeout );
-                    if ( delta > timeout )
-                    {
-                        log.warn( "Cannot acquire read lock within {} millis. Will skip the file: {}", timeout, file );
-                        // we could not get the lock within the timeout period, so  throw  FileLockTimeoutException
-                        throw new FileLockTimeoutException();
-                    }
+                    log.warn( "Cannot acquire read lock within {} millis. Will skip the file: {}", timeout, file );
+                    // we could not get the lock within the timeout period, so  throw  FileLockTimeoutException
+                    throw new FileLockTimeoutException();
                 }
+            }
 
-                lock = new Lock( file, false );
-
-                Lock current = lockFiles.get( file );
+            Lock current = lockFiles.get( file );
 
-                if ( current != null )
-                {
-                    log.debug( "read lock file exist continue wait" );
-                    // close RandomAccessFile!!!
-                    RandomAccessFile raf =  lock.getRandomAccessFile();
-                    if (raf != null)
-                    {
-                        raf.close();
-                    }
-                    continue;
-                }
+            if ( current != null )
+            {
+                log.debug( "read lock file exist continue wait" );
+                continue;
+            }
 
-                try
-                {
-                    createNewFileQuietly( file );
-                    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 );
-                }
-                catch ( IllegalStateException e )
-                {
-                    log.debug( "openLock {}:{}", e.getClass(), e.getMessage() );
-                }
+            try
+            {
+                lock = new Lock( file, false );
+                createNewFileQuietly( file );
+                lock.openLock( false, timeout > 0 );
+                acquired = true;
             }
-            Lock current = lockFiles.putIfAbsent( file, lock );
-            if ( current != null )
+            catch ( FileNotFoundException e )
             {
-                lock = current;
+                // can happen if an other thread has deleted the file
+                // close RandomAccessFile!!!
+                closeQuietly( lock.getRandomAccessFile() );
+                log.debug( "read Lock skip: {} try to create file", e.getMessage() );
+                createNewFileQuietly( file );
+            }
+            catch ( IOException e )
+            {
+                throw new FileLockException( e.getMessage(), e );
+            }
+            catch ( IllegalStateException e )
+            {
+                log.debug( "openLock {}:{}", e.getClass(), e.getMessage() );
             }
-            return lock;
         }
-        catch ( IOException e )
+        Lock current = lockFiles.putIfAbsent( file, lock );
+        if ( current != null )
         {
-            throw new FileLockException( e.getMessage(), e );
+            lock = current;
         }
+        return lock;
+
     }
 
 
@@ -150,85 +139,86 @@ public class DefaultFileLockManager
         StopWatch stopWatch = new StopWatch();
         boolean acquired = false;
 
-        try
-        {
-            Lock lock = null;
+        Lock lock = null;
 
-            stopWatch.start();
+        stopWatch.start();
 
-            while ( !acquired )
-            {
+        while ( !acquired )
+        {
 
-                if ( timeout > 0 )
+            if ( timeout > 0 )
+            {
+                long delta = stopWatch.getTime();
+                log.debug( "delta {}, timeout {}", delta, timeout );
+                if ( delta > timeout )
                 {
-                    long delta = stopWatch.getTime();
-                    log.debug( "delta {}, timeout {}", delta, timeout );
-                    if ( delta > timeout )
-                    {
-                        log.warn( "Cannot acquire read lock within {} millis. Will skip the file: {}", timeout, file );
-                        // we could not get the lock within the timeout period, so throw FileLockTimeoutException
-                        throw new FileLockTimeoutException();
-                    }
+                    log.warn( "Cannot acquire read lock within {} millis. Will skip the file: {}", timeout, file );
+                    // we could not get the lock within the timeout period, so throw FileLockTimeoutException
+                    throw new FileLockTimeoutException();
                 }
+            }
 
-                lock = new Lock( file, true );
+            Lock current = lockFiles.get( file );
 
-                Lock current = lockFiles.get( file );
+            try
+            {
 
-                try
+                if ( current != null )
                 {
+                    log.debug( "write lock file exist continue wait" );
 
-                    if ( current != null )
-                    {
-                        log.debug( "write lock file exist continue wait" );
-                        // close RandomAccessFile!!!
-                        RandomAccessFile raf =  lock.getRandomAccessFile();
-                        if (raf != null)
-                        {
-                            raf.close();
-                        }
-                        continue;
-                    }
-
-                    createNewFileQuietly( file );
-                    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 );
-                }
-                catch ( IllegalStateException e )
-                {
-                    log.debug( "openLock {}:{}", e.getClass(), e.getMessage() );
+                    continue;
                 }
+                lock = new Lock( file, true );
+                createNewFileQuietly( file );
+                lock.openLock( true, timeout > 0 );
+                acquired = true;
             }
+            catch ( FileNotFoundException e )
+            {
+                // can happen if an other thread has deleted the file
+                // close RandomAccessFile!!!
+                closeQuietly( lock.getRandomAccessFile() );
 
-            Lock current = lockFiles.putIfAbsent( file, lock );
-            if ( current != null )
+                log.debug( "write Lock skip: {} try to create file", e.getMessage() );
+                createNewFileQuietly( file );
+            }
+            catch ( IOException e )
+            {
+                throw new FileLockException( e.getMessage(), e );
+            }
+            catch ( IllegalStateException e )
             {
-                lock = current;
+                log.debug( "openLock {}:{}", e.getClass(), e.getMessage() );
             }
+        }
 
-            return lock;
+        Lock current = lockFiles.putIfAbsent( file, lock );
+        if ( current != null )
+        {
+            lock = current;
         }
 
-        catch (
+        return lock;
 
-            FileNotFoundException e
 
-            )
+    }
 
+    private void closeQuietly( RandomAccessFile randomAccessFile )
+    {
+        if ( randomAccessFile == null )
         {
-            throw new FileLockException( e.getMessage(), e );
+            return;
         }
 
+        try
+        {
+            randomAccessFile.close();
+        }
+        catch ( IOException e )
+        {
+            // ignore
+        }
     }
 
     private void createNewFileQuietly( File file )