[exo-jcr-commits] exo-jcr SVN: r2291 - jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/util/io.
do-not-reply at jboss.org
do-not-reply at jboss.org
Tue Apr 20 09:52:00 EDT 2010
Author: sergiykarpenko
Date: 2010-04-20 09:51:59 -0400 (Tue, 20 Apr 2010)
New Revision: 2291
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/util/io/FileCleaner.java
Log:
EXOJCR-671: FileCleaner - LinkedHashSet changed to ConcurrentLinkedQueue
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/util/io/FileCleaner.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/util/io/FileCleaner.java 2010-04-20 13:36:19 UTC (rev 2290)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/util/io/FileCleaner.java 2010-04-20 13:51:59 UTC (rev 2291)
@@ -23,8 +23,9 @@
import org.exoplatform.services.log.Log;
import java.io.File;
-import java.util.LinkedHashSet;
+import java.util.HashSet;
import java.util.Set;
+import java.util.concurrent.ConcurrentLinkedQueue;
/**
* Created by The eXo Platform SAS.
@@ -40,7 +41,7 @@
protected static Log log = ExoLogger.getLogger("exo.jcr.component.core.FileCleaner");
- protected Set<File> files = new LinkedHashSet<File>();
+ protected final ConcurrentLinkedQueue<File> files = new ConcurrentLinkedQueue<File>();
public FileCleaner()
{
@@ -77,11 +78,11 @@
/**
* @param file
*/
- public synchronized void addFile(File file)
+ public void addFile(File file)
{
if (file.exists())
{
- files.add(file);
+ files.offer(file);
}
}
@@ -106,51 +107,47 @@
*/
protected void callPeriodically() throws Exception
{
- if (files != null && files.size() > 0)
+ File file = null;
+ Set<File> notRemovedFiles = new HashSet<File>();
+ while ((file = files.poll()) != null)
{
- Set<File> oldFiles = files;
- files = new LinkedHashSet<File>();
- for (File file : oldFiles)
+ if (file.exists())
{
- if (file.exists())
+ if (!file.delete())
{
- if (!file.delete())
- {
- files.add(file);
+ notRemovedFiles.add(file);
- if (log.isDebugEnabled())
- log.debug("Could not delete " + (file.isDirectory() ? "directory" : "file")
- + ". Will try next time: " + file.getAbsolutePath());
- }
- else if (log.isDebugEnabled())
- {
- log.debug((file.isDirectory() ? "Directory" : "File") + " deleted : " + file.getAbsolutePath());
- }
+ if (log.isDebugEnabled())
+ log.debug("Could not delete " + (file.isDirectory() ? "directory" : "file")
+ + ". Will try next time: " + file.getAbsolutePath());
}
+ else if (log.isDebugEnabled())
+ {
+ log.debug((file.isDirectory() ? "Directory" : "File") + " deleted : " + file.getAbsolutePath());
+ }
}
}
+
+ //add do lists tail all not removed files
+ if (!notRemovedFiles.isEmpty())
+ {
+ files.addAll(notRemovedFiles);
+ }
}
private void registerShutdownHook()
{
- // register shutdownhook for final cleaning up
+ // register shutdown hook for final cleaning up
try
{
Runtime.getRuntime().addShutdownHook(new Thread()
{
public void run()
{
- Set<File> oldFiles = files;
- files = null;
- // synchronize on the list before iterating over it in order
- // to avoid ConcurrentModificationException (JCR-549)
- // @see java.lang.util.Collections.synchronizedList(java.util.List)
- synchronized (oldFiles)
+ File file = null;
+ while ((file = files.poll()) != null)
{
- for (File file : oldFiles)
- {
- file.delete();
- }
+ file.delete();
}
}
});
More information about the exo-jcr-commits
mailing list