You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by se...@apache.org on 2021/05/19 05:14:05 UTC

[directory-studio] branch master updated: DIRSTUDIO-1273, DIRSTUDIO-1276: Fix file delete issue on Windows

This is an automated email from the ASF dual-hosted git repository.

seelmann pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/directory-studio.git


The following commit(s) were added to refs/heads/master by this push:
     new bb684b4  DIRSTUDIO-1273, DIRSTUDIO-1276: Fix file delete issue on Windows
bb684b4 is described below

commit bb684b4ba0ac8ef775eb91ecfa053c7ed58139cd
Author: Stefan Seelmann <ma...@stefan-seelmann.de>
AuthorDate: Wed May 19 07:13:49 2021 +0200

    DIRSTUDIO-1273, DIRSTUDIO-1276: Fix file delete issue on Windows
---
 .../studio/connection/core/ILdapLogger.java        | 25 ++++++++++++++++++++++
 .../core/io/api/LdifModificationLogger.java        |  6 ++++++
 .../connection/core/io/api/LdifSearchLogger.java   |  6 ++++++
 .../ModificationLogsViewUniversalListener.java     | 25 ++--------------------
 .../SearchLogsViewUniversalListener.java           | 25 ++--------------------
 5 files changed, 41 insertions(+), 46 deletions(-)

diff --git a/plugins/connection.core/src/main/java/org/apache/directory/studio/connection/core/ILdapLogger.java b/plugins/connection.core/src/main/java/org/apache/directory/studio/connection/core/ILdapLogger.java
index 8d56186..9e3dfee 100644
--- a/plugins/connection.core/src/main/java/org/apache/directory/studio/connection/core/ILdapLogger.java
+++ b/plugins/connection.core/src/main/java/org/apache/directory/studio/connection/core/ILdapLogger.java
@@ -20,6 +20,7 @@
 package org.apache.directory.studio.connection.core;
 
 
+import java.io.File;
 import java.util.Collection;
 import java.util.HashSet;
 import java.util.Set;
@@ -236,4 +237,28 @@ public interface ILdapLogger
         return maskedAttributes;
     }
 
+
+    /**
+     * Deletes a file. Retries up to 5 times to work around Windows file delete issues.
+     */
+    default void deleteFileWithRetry( File file )
+    {
+        for ( int i = 0; i < 6; i++ )
+        {
+            if ( file != null && file.exists() )
+            {
+                if ( file.delete() )
+                {
+                    break;
+                }
+                try
+                {
+                    Thread.sleep( 500L );
+                }
+                catch ( InterruptedException e )
+                {
+                }
+            }
+        }
+    }
 }
diff --git a/plugins/connection.core/src/main/java/org/apache/directory/studio/connection/core/io/api/LdifModificationLogger.java b/plugins/connection.core/src/main/java/org/apache/directory/studio/connection/core/io/api/LdifModificationLogger.java
index c0c6c70..8144b62 100644
--- a/plugins/connection.core/src/main/java/org/apache/directory/studio/connection/core/io/api/LdifModificationLogger.java
+++ b/plugins/connection.core/src/main/java/org/apache/directory/studio/connection/core/io/api/LdifModificationLogger.java
@@ -194,6 +194,12 @@ public class LdifModificationLogger implements ILdapLogger
                 handler.close();
             }
 
+            File[] files = getLogFiles( connection );
+            for ( File file : files )
+            {
+                deleteFileWithRetry( file );
+            }
+
             loggers.remove( id );
         }
     }
diff --git a/plugins/connection.core/src/main/java/org/apache/directory/studio/connection/core/io/api/LdifSearchLogger.java b/plugins/connection.core/src/main/java/org/apache/directory/studio/connection/core/io/api/LdifSearchLogger.java
index f20e048..2e04f9e 100644
--- a/plugins/connection.core/src/main/java/org/apache/directory/studio/connection/core/io/api/LdifSearchLogger.java
+++ b/plugins/connection.core/src/main/java/org/apache/directory/studio/connection/core/io/api/LdifSearchLogger.java
@@ -189,6 +189,12 @@ public class LdifSearchLogger implements ILdapLogger
                 handler.close();
             }
 
+            File[] files = getLogFiles( connection );
+            for ( File file : files )
+            {
+                deleteFileWithRetry( file );
+            }
+
             loggers.remove( id );
         }
     }
diff --git a/plugins/ldapbrowser.ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/views/modificationlogs/ModificationLogsViewUniversalListener.java b/plugins/ldapbrowser.ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/views/modificationlogs/ModificationLogsViewUniversalListener.java
index 3fb1341..4866157 100644
--- a/plugins/ldapbrowser.ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/views/modificationlogs/ModificationLogsViewUniversalListener.java
+++ b/plugins/ldapbrowser.ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/views/modificationlogs/ModificationLogsViewUniversalListener.java
@@ -23,7 +23,6 @@ package org.apache.directory.studio.ldapbrowser.ui.views.modificationlogs;
 
 import java.io.File;
 import java.io.FileReader;
-import java.io.FileWriter;
 
 import org.apache.directory.studio.connection.core.Connection;
 import org.apache.directory.studio.connection.core.ConnectionCorePlugin;
@@ -153,9 +152,8 @@ public class ModificationLogsViewUniversalListener implements EntryUpdateListene
                 int i = input.getIndex();
                 if ( 0 <= i && i < files.length && files[i] != null && files[i].exists() && files[i].canRead() )
                 {
-                    try
+                    try ( FileReader fr = new FileReader( files[i] ) )
                     {
-                        FileReader fr = new FileReader( files[i] );
                         char[] cbuf = new char[4096];
                         for ( int length = fr.read( cbuf ); length > 0; length = fr.read( cbuf ) )
                         {
@@ -227,29 +225,10 @@ public class ModificationLogsViewUniversalListener implements EntryUpdateListene
     {
         if ( input.getBrowserConnection().getConnection() != null )
         {
-            StringBuffer sb = new StringBuffer( "" ); //$NON-NLS-1$
-            FileWriter fw = null;
             LdifModificationLogger modificationLogger = ConnectionCorePlugin.getDefault().getLdifModificationLogger();
-            File[] files = modificationLogger.getFiles( input.getBrowserConnection().getConnection() );
             modificationLogger.dispose( input.getBrowserConnection().getConnection() );
-            for ( int i = 0; i < files.length; i++ )
-            {
-                try
-                {
-                    if ( files[i] != null && files[i].exists() && !files[i].delete() )
-                    {
-                        fw = new FileWriter( files[i] );
-                        fw.write( "" ); //$NON-NLS-1$
-                    }
-
-                }
-                catch ( Exception e )
-                {
-                    sb.append( e.getMessage() );
-                }
-            }
             view.getMainWidget().getSourceViewer().setTopIndex( 0 );
-            view.getMainWidget().getSourceViewer().getDocument().set( sb.toString() );
+            view.getMainWidget().getSourceViewer().getDocument().set( "" );
         }
     }
 
diff --git a/plugins/ldapbrowser.ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/views/searchlogs/SearchLogsViewUniversalListener.java b/plugins/ldapbrowser.ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/views/searchlogs/SearchLogsViewUniversalListener.java
index cd7c177..45e334a 100644
--- a/plugins/ldapbrowser.ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/views/searchlogs/SearchLogsViewUniversalListener.java
+++ b/plugins/ldapbrowser.ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/views/searchlogs/SearchLogsViewUniversalListener.java
@@ -23,7 +23,6 @@ package org.apache.directory.studio.ldapbrowser.ui.views.searchlogs;
 
 import java.io.File;
 import java.io.FileReader;
-import java.io.FileWriter;
 
 import org.apache.directory.studio.connection.core.Connection;
 import org.apache.directory.studio.connection.core.ConnectionCorePlugin;
@@ -165,9 +164,8 @@ public class SearchLogsViewUniversalListener implements BrowserConnectionUpdateL
                 int i = input.getIndex();
                 if ( 0 <= i && i < files.length && files[i] != null && files[i].exists() && files[i].canRead() )
                 {
-                    try
+                    try ( FileReader fr = new FileReader( files[i] ) )
                     {
-                        FileReader fr = new FileReader( files[i] );
                         char[] cbuf = new char[4096];
                         for ( int length = fr.read( cbuf ); length > 0; length = fr.read( cbuf ) )
                         {
@@ -280,29 +278,10 @@ public class SearchLogsViewUniversalListener implements BrowserConnectionUpdateL
     {
         if ( input.getBrowserConnection().getConnection() != null )
         {
-            StringBuffer sb = new StringBuffer( "" ); //$NON-NLS-1$
-            FileWriter fw = null;
             LdifSearchLogger searchLogger = ConnectionCorePlugin.getDefault().getLdifSearchLogger();
-            File[] files = searchLogger.getFiles( input.getBrowserConnection().getConnection() );
             searchLogger.dispose( input.getBrowserConnection().getConnection() );
-            for ( int i = 0; i < files.length; i++ )
-            {
-                try
-                {
-                    if ( files[i] != null && files[i].exists() && !files[i].delete() )
-                    {
-                        fw = new FileWriter( files[i] );
-                        fw.write( "" ); //$NON-NLS-1$
-                    }
-
-                }
-                catch ( Exception e )
-                {
-                    sb.append( e.getMessage() );
-                }
-            }
             view.getMainWidget().getSourceViewer().setTopIndex( 0 );
-            view.getMainWidget().getSourceViewer().getDocument().set( sb.toString() );
+            view.getMainWidget().getSourceViewer().getDocument().set( "" );
         }
     }