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/11 17:15:24 UTC
svn commit: r1213017 - in /lucene/dev/branches/branch_3x: ./ lucene/
lucene/src/java/org/apache/lucene/index/DirectoryReader.java
lucene/src/java/org/apache/lucene/index/MultiReader.java
Author: uschindler
Date: Sun Dec 11 16:15:23 2011
New Revision: 1213017
URL: http://svn.apache.org/viewvc?rev=1213017&view=rev
Log:
Merged revision(s) 1213016 from lucene/dev/trunk:
LUCENE-3633: Improve DirectoryReader and MultiReader to use IOUtils when IOExceptions occur during opening segments
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/DirectoryReader.java
lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/index/MultiReader.java
Modified: lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/index/DirectoryReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/index/DirectoryReader.java?rev=1213017&r1=1213016&r2=1213017&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/index/DirectoryReader.java (original)
+++ lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/index/DirectoryReader.java Sun Dec 11 16:15:23 2011
@@ -37,6 +37,7 @@ import org.apache.lucene.search.Similari
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.Lock;
import org.apache.lucene.store.LockObtainFailedException;
+import org.apache.lucene.util.IOUtils;
import org.apache.lucene.util.MapBackedSet;
/**
@@ -108,22 +109,17 @@ class DirectoryReader extends IndexReade
SegmentReader[] readers = new SegmentReader[sis.size()];
for (int i = sis.size()-1; i >= 0; i--) {
+ IOException prior = null;
boolean success = false;
try {
readers[i] = SegmentReader.get(readOnly, sis.info(i), termInfosIndexDivisor);
readers[i].readerFinishedListeners = this.readerFinishedListeners;
success = true;
+ } catch(IOException ex) {
+ prior = ex;
} finally {
- if (!success) {
- // Close all readers we had opened:
- for(i++;i<sis.size();i++) {
- try {
- readers[i].close();
- } catch (Throwable ignore) {
- // keep going - we want to clean up as much as possible
- }
- }
- }
+ if (!success)
+ IOUtils.closeWhileHandlingException(prior, readers);
}
}
@@ -150,6 +146,7 @@ class DirectoryReader extends IndexReade
segmentInfos = (SegmentInfos) infos.clone();
int infosUpto = 0;
for (int i=0;i<numSegments;i++) {
+ IOException prior = null;
boolean success = false;
try {
final SegmentInfo info = infos.info(i);
@@ -164,17 +161,11 @@ class DirectoryReader extends IndexReade
segmentInfos.remove(infosUpto);
}
success = true;
+ } catch(IOException ex) {
+ prior = ex;
} finally {
- if (!success) {
- // Close all readers we had opened:
- for(SegmentReader reader : readers) {
- try {
- reader.close();
- } catch (Throwable ignore) {
- // keep going - we want to clean up as much as possible
- }
- }
- }
+ if (!success)
+ IOUtils.closeWhileHandlingException(prior, readers);
}
}
@@ -223,6 +214,7 @@ class DirectoryReader extends IndexReade
newReaders[i] = oldReaders[oldReaderIndex.intValue()];
}
+ IOException prior = null;
boolean success = false;
try {
SegmentReader newReader;
@@ -251,6 +243,8 @@ class DirectoryReader extends IndexReade
}
}
success = true;
+ } catch (IOException ex) {
+ prior = ex;
} finally {
if (!success) {
for (i++; i < infos.size(); i++) {
@@ -265,12 +259,14 @@ class DirectoryReader extends IndexReade
// closing we must decRef it
newReaders[i].decRef();
}
- } catch (IOException ignore) {
- // keep going - we want to clean up as much as possible
+ } catch (IOException ex) {
+ if (prior == null) prior = ex;
}
}
}
}
+ // throw the first exception
+ if (prior != null) throw prior;
}
}
Modified: lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/index/MultiReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/index/MultiReader.java?rev=1213017&r1=1213016&r2=1213017&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/index/MultiReader.java (original)
+++ lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/index/MultiReader.java Sun Dec 11 16:15:23 2011
@@ -410,13 +410,20 @@ public class MultiReader extends IndexRe
@Override
protected synchronized void doClose() throws IOException {
+ IOException ioe = null;
for (int i = 0; i < subReaders.length; i++) {
- if (decrefOnClose[i]) {
- subReaders[i].decRef();
- } else {
- subReaders[i].close();
+ try {
+ if (decrefOnClose[i]) {
+ subReaders[i].decRef();
+ } else {
+ subReaders[i].close();
+ }
+ } catch (IOException e) {
+ if (ioe == null) ioe = e;
}
}
+ // throw the first exception
+ if (ioe != null) throw ioe;
}
@Override