You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@manifoldcf.apache.org by kw...@apache.org on 2011/10/25 02:31:35 UTC

svn commit: r1188465 - in /incubator/lcf/trunk: connectors/rss/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/rss/DataCache.java framework/core/src/main/java/org/apache/manifoldcf/core/system/ManifoldCF.java

Author: kwright
Date: Tue Oct 25 00:31:35 2011
New Revision: 1188465

URL: http://svn.apache.org/viewvc?rev=1188465&view=rev
Log:
Reduce the scope of synchronizers so that we don't single-thread file operations.  Part of CONNECTORS-281.

Modified:
    incubator/lcf/trunk/connectors/rss/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/rss/DataCache.java
    incubator/lcf/trunk/framework/core/src/main/java/org/apache/manifoldcf/core/system/ManifoldCF.java

Modified: incubator/lcf/trunk/connectors/rss/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/rss/DataCache.java
URL: http://svn.apache.org/viewvc/incubator/lcf/trunk/connectors/rss/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/rss/DataCache.java?rev=1188465&r1=1188464&r2=1188465&view=diff
==============================================================================
--- incubator/lcf/trunk/connectors/rss/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/rss/DataCache.java (original)
+++ incubator/lcf/trunk/connectors/rss/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/rss/DataCache.java Tue Oct 25 00:31:35 2011
@@ -124,13 +124,14 @@ public class DataCache
           os.close();
         }
 
+        deleteData(documentIdentifier);
+        
         synchronized(this)
         {
-          deleteData(documentIdentifier);
           cacheData.put(documentIdentifier,new DocumentData(tempFile,contentType));
-          return checkSum;
         }
-
+        
+        return checkSum;
       }
       catch (IOException e)
       {
@@ -170,10 +171,14 @@ public class DataCache
   *@param documentIdentifier is the document identifier.
   *@return the length.
   */
-  public synchronized long getDataLength(String documentIdentifier)
+  public long getDataLength(String documentIdentifier)
     throws ManifoldCFException
   {
-    DocumentData f = cacheData.get(documentIdentifier);
+    DocumentData f;
+    synchronized (this)
+    {
+      f = cacheData.get(documentIdentifier);
+    }
     if (f == null)
       return 0L;
     return f.getData().length();
@@ -183,10 +188,14 @@ public class DataCache
   *@param documentIdentifier is the document identifier (url).
   *@return a binary data stream.
   */
-  public synchronized InputStream getData(String documentIdentifier)
+  public InputStream getData(String documentIdentifier)
     throws ManifoldCFException
   {
-    DocumentData f = cacheData.get(documentIdentifier);
+    DocumentData f;
+    synchronized (this)
+    {
+      f = cacheData.get(documentIdentifier);
+    }
     if (f == null)
       return null;
     try
@@ -203,9 +212,13 @@ public class DataCache
   *@param documentIdentifier is the document identifier.
   *@return the content type, or null if there is none.
   */
-  public synchronized String getContentType(String documentIdentifier)
+  public String getContentType(String documentIdentifier)
   {
-    DocumentData dd = cacheData.get(documentIdentifier);
+    DocumentData dd;
+    synchronized (this)
+    {
+      dd = cacheData.get(documentIdentifier);
+    }
     if (dd == null)
       return null;
     return dd.getContentType();
@@ -214,10 +227,13 @@ public class DataCache
   /** Delete specified item of data.
   *@param documentIdentifier is the document identifier (url).
   */
-  public synchronized void deleteData(String documentIdentifier)
+  public void deleteData(String documentIdentifier)
   {
-    DocumentData f = cacheData.get(documentIdentifier);
-    cacheData.remove(documentIdentifier);
+    DocumentData f;
+    synchronized (this)
+    {
+      f = cacheData.remove(documentIdentifier);
+    }
     if (f != null)
     {
       ManifoldCF.deleteFile(f.getData());

Modified: incubator/lcf/trunk/framework/core/src/main/java/org/apache/manifoldcf/core/system/ManifoldCF.java
URL: http://svn.apache.org/viewvc/incubator/lcf/trunk/framework/core/src/main/java/org/apache/manifoldcf/core/system/ManifoldCF.java?rev=1188465&r1=1188464&r2=1188465&view=diff
==============================================================================
--- incubator/lcf/trunk/framework/core/src/main/java/org/apache/manifoldcf/core/system/ManifoldCF.java (original)
+++ incubator/lcf/trunk/framework/core/src/main/java/org/apache/manifoldcf/core/system/ManifoldCF.java Tue Oct 25 00:31:35 2011
@@ -1164,7 +1164,7 @@ public class ManifoldCF
   protected static class FileTrack implements IShutdownHook
   {
     /** Key and value are both File objects */
-    protected HashMap filesToDelete = new HashMap();
+    protected Map<File,File> filesToDelete = new HashMap<File,File>();
 
     /** Constructor */
     public FileTrack()
@@ -1172,17 +1172,25 @@ public class ManifoldCF
     }
 
     /** Add a file to track */
-    public synchronized void addFile(File f)
+    public void addFile(File f)
     {
-      filesToDelete.put(f,f);
+      synchronized (this)
+      {
+        filesToDelete.put(f,f);
+      }
     }
 
     /** Delete a file */
-    public synchronized void deleteFile(File f)
+    public void deleteFile(File f)
     {
+      // Because we never reuse file names, it is OK to delete twice.
+      // So the delete() can be outside the synchronizer.
       f.delete();
-      filesToDelete.remove(f);
-    }
+      synchronized (this)
+      {
+        filesToDelete.remove(f);
+      }
+  }
 
     /** Delete all remaining files */
     public void doCleanup()