You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by us...@apache.org on 2011/12/20 19:02:25 UTC

svn commit: r1221371 - in /lucene/dev/branches/branch_3x: ./ lucene/ lucene/src/java/org/apache/lucene/index/IndexReader.java lucene/src/java/org/apache/lucene/index/SegmentCoreReaders.java lucene/src/java/org/apache/lucene/index/SegmentReader.java

Author: uschindler
Date: Tue Dec 20 18:02:25 2011
New Revision: 1221371

URL: http://svn.apache.org/viewvc?rev=1221371&view=rev
Log:
Merged revision(s) 1221369 from lucene/dev/trunk:
LUCENE-3656: Change data type used for Core-/ReaderClosedListener from ConcurrentHashMap to simple synchronized HashSet

Modified:
    lucene/dev/branches/branch_3x/   (props changed)
    lucene/dev/branches/branch_3x/lucene/   (props changed)
    lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/index/IndexReader.java
    lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/index/SegmentCoreReaders.java
    lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/index/SegmentReader.java

Modified: lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/index/IndexReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/index/IndexReader.java?rev=1221371&r1=1221370&r2=1221371&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/index/IndexReader.java (original)
+++ lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/index/IndexReader.java Tue Dec 20 18:02:25 2011
@@ -22,9 +22,11 @@ import java.io.File;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.util.Collection;
+import java.util.Collections;
+import java.util.LinkedHashSet;
+import java.util.List;
 import java.util.Map;
 import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.atomic.AtomicInteger;
 
 import org.apache.lucene.document.Document;
@@ -93,7 +95,7 @@ public abstract class IndexReader implem
   }
 
   private final Set<ReaderClosedListener> readerClosedListeners = 
-      new MapBackedSet<ReaderClosedListener>(new ConcurrentHashMap<ReaderClosedListener, Boolean>());
+      Collections.synchronizedSet(new LinkedHashSet<ReaderClosedListener>());
 
   /** Expert: adds a {@link ReaderClosedListener}.  The
    * provided listener will be invoked when this reader is closed.
@@ -113,8 +115,10 @@ public abstract class IndexReader implem
   }
 
   private final void notifyReaderClosedListeners() {
-    for(ReaderClosedListener listener : readerClosedListeners) {
-      listener.onClose(this);
+    synchronized(readerClosedListeners) {
+      for(ReaderClosedListener listener : readerClosedListeners) {
+        listener.onClose(this);
+      }
     }
   }
 

Modified: lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/index/SegmentCoreReaders.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/index/SegmentCoreReaders.java?rev=1221371&r1=1221370&r2=1221371&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/index/SegmentCoreReaders.java (original)
+++ lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/index/SegmentCoreReaders.java Tue Dec 20 18:02:25 2011
@@ -18,15 +18,15 @@ package org.apache.lucene.index;
  */
 
 import java.io.IOException;
+import java.util.Collections;
+import java.util.LinkedHashSet;
 import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.atomic.AtomicInteger;
 
 import org.apache.lucene.index.SegmentReader.CoreClosedListener;
 import org.apache.lucene.store.Directory;
 import org.apache.lucene.store.IndexInput;
 import org.apache.lucene.util.IOUtils;
-import org.apache.lucene.util.MapBackedSet;
 
 /** Holds core readers that are shared (unchanged) when
  * SegmentReader is cloned or reopened */
@@ -59,8 +59,8 @@ final class SegmentCoreReaders {
   CompoundFileReader cfsReader;
   CompoundFileReader storeCFSReader;
 
-  final Set<CoreClosedListener> coreClosedListeners = 
-      new MapBackedSet<CoreClosedListener>(new ConcurrentHashMap<CoreClosedListener, Boolean>());
+  private final Set<CoreClosedListener> coreClosedListeners = 
+      Collections.synchronizedSet(new LinkedHashSet<CoreClosedListener>());
 
   SegmentCoreReaders(SegmentReader owner, Directory dir, SegmentInfo si, int readBufferSize, int termsIndexDivisor) throws IOException {
     segment = si.name;
@@ -171,12 +171,26 @@ final class SegmentCoreReaders {
                     fieldsReaderOrig, cfsReader, storeCFSReader);
       tis = null;
       // Now, notify any ReaderFinished listeners:
+      notifyCoreClosedListeners();
+    }
+  }
+  
+  private final void notifyCoreClosedListeners() {
+    synchronized(coreClosedListeners) {
       for (CoreClosedListener listener : coreClosedListeners) {
         listener.onClose(owner);
       }
     }
   }
 
+  void addCoreClosedListener(CoreClosedListener listener) {
+    coreClosedListeners.add(listener);
+  }
+  
+  void removeCoreClosedListener(CoreClosedListener listener) {
+    coreClosedListeners.remove(listener);
+  }
+
   synchronized void openDocStores(SegmentInfo si) throws IOException {
 
     assert si.name.equals(segment);

Modified: lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/index/SegmentReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/index/SegmentReader.java?rev=1221371&r1=1221370&r2=1221371&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/index/SegmentReader.java (original)
+++ lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/index/SegmentReader.java Tue Dec 20 18:02:25 2011
@@ -957,12 +957,12 @@ public class SegmentReader extends Index
   /** Expert: adds a CoreClosedListener to this reader's shared core */
   public void addCoreClosedListener(CoreClosedListener listener) {
     ensureOpen();
-    core.coreClosedListeners.add(listener);
+    core.addCoreClosedListener(listener);
   }
   
   /** Expert: removes a CoreClosedListener from this reader's shared core */
   public void removeCoreClosedListener(CoreClosedListener listener) {
     ensureOpen();
-    core.coreClosedListeners.remove(listener);
+    core.removeCoreClosedListener(listener);
   }
 }