[exo-jcr-commits] exo-jcr SVN: r4100 - jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/lucene.

do-not-reply at jboss.org do-not-reply at jboss.org
Wed Mar 16 10:12:31 EDT 2011


Author: nzamosenchuk
Date: 2011-03-16 10:12:31 -0400 (Wed, 16 Mar 2011)
New Revision: 4100

Modified:
   jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/lucene/MultiIndex.java
Log:
EXOJCR-834 : Take lastIndexReader in a more safe way. Skip exception for lastIndexReader retrieval to do the best to index data, skipping any kind of errors related to unnecessary lastIndexReader.

Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/lucene/MultiIndex.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/lucene/MultiIndex.java	2011-03-16 13:23:52 UTC (rev 4099)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/lucene/MultiIndex.java	2011-03-16 14:12:31 UTC (rev 4100)
@@ -20,6 +20,7 @@
 import org.apache.lucene.index.IndexReader;
 import org.apache.lucene.index.Term;
 import org.apache.lucene.index.TermDocs;
+import org.apache.lucene.store.AlreadyClosedException;
 import org.apache.lucene.store.Directory;
 import org.exoplatform.commons.utils.PrivilegedFileHelper;
 import org.exoplatform.commons.utils.SecurityHelper;
@@ -587,9 +588,17 @@
                // try to avoid getting index reader for each doc
                int lastIndexReaderId = indexes.size() - 1;
                // check, index list can be empty
-               lastIndexReader =
-                  (lastIndexReaderId >= 0) ? ((PersistentIndex)indexes.get(lastIndexReaderId)).getReadOnlyIndexReader()
-                     : null;
+               try
+               {
+                  lastIndexReader =
+                     (lastIndexReaderId >= 0) ? ((PersistentIndex)indexes.get(lastIndexReaderId))
+                        .getReadOnlyIndexReader() : null;
+               }
+               catch (Throwable e)
+               {
+                  // this is safe index reader retrieval. The last index already closed, possibly merged or any other exception that occurs here
+               }
+
                for (Iterator it = add.iterator(); it.hasNext();)
                {
                   Document doc = (Document)it.next();
@@ -616,7 +625,17 @@
                               lastIndexReader.release();
                            }
                            lastIndexReaderId = indexes.size() - 1;
-                           lastIndexReader = ((PersistentIndex)indexes.get(lastIndexReaderId)).getReadOnlyIndexReader();
+                           try
+                           {
+                              lastIndexReader =
+                                 ((PersistentIndex)indexes.get(lastIndexReaderId)).getReadOnlyIndexReader();
+                           }
+                           catch (Throwable e)
+                           {
+                              // this is safe index reader retrieval. The last index already closed, possibly merged or any other exception that occurs here
+                              lastIndexReader = null;
+                              lastIndexReaderId = -1;
+                           }
                         }
                         // if indexReader exists (it is possible that no persisted indexes exists on start)
                         if (lastIndexReader != null)



More information about the exo-jcr-commits mailing list