Author: srowen Date: Tue Feb 7 21:52:56 2012 New Revision: 1241650 URL: http://svn.apache.org/viewvc?rev=1241650&view=rev Log: MAHOUT-951 unroll recursion to avoid stack overflow
Modified: mahout/trunk/integration/src/main/java/org/apache/mahout/utils/vectors/lucene/LuceneIterator.java Modified: mahout/trunk/integration/src/main/java/org/apache/mahout/utils/vectors/lucene/LuceneIterator.java URL: http://svn.apache.org/viewvc/mahout/trunk/integration/src/main/java/org/apache/mahout/utils/vectors/lucene/LuceneIterator.java?rev=1241650&r1=1241649&r2=1241650&view=diff ============================================================================== --- mahout/trunk/integration/src/main/java/org/apache/mahout/utils/vectors/lucene/LuceneIterator.java (original) +++ mahout/trunk/integration/src/main/java/org/apache/mahout/utils/vectors/lucene/LuceneIterator.java Tue Feb 7 21:52:56 2012 @@ -101,31 +101,35 @@ public final class LuceneIterator extend @Override protected Vector computeNext() { try { - if (!termDocs.next()) { - return endOfData(); - } + int doc; + TermFreqVector termFreqVector; - int doc = termDocs.doc(); - TermFreqVector termFreqVector = indexReader.getTermFreqVector(doc, field); - if (termFreqVector == null) { - numErrorDocs++; - if (numErrorDocs >= maxErrorDocs) { - log.error("There are too many documents that do not have a term vector for {}", field); - throw new IllegalStateException("There are too many documents that do not have a term vector for " + field); + do { + if (!termDocs.next()) { + return endOfData(); } - if (numErrorDocs >= nextLogRecord) { - if (skippedErrorMessages == 0) { - log.warn("{} does not have a term vector for {}", indexReader.document(doc).get(idField), field); + + doc = termDocs.doc(); + termFreqVector = indexReader.getTermFreqVector(doc, field); + if (termFreqVector == null) { + numErrorDocs++; + if (numErrorDocs >= maxErrorDocs) { + log.error("There are too many documents that do not have a term vector for {}", field); + throw new IllegalStateException("There are too many documents that do not have a term vector for " + field); + } + if (numErrorDocs >= nextLogRecord) { + if (skippedErrorMessages == 0) { + log.warn("{} does not have a term vector for {}", indexReader.document(doc).get(idField), field); + } else { + log.warn("{} documents do not have a term vector for {}", numErrorDocs, field); + } + nextLogRecord = bump.increment(); + skippedErrorMessages = 0; } else { - log.warn("{} documents do not have a term vector for {}", numErrorDocs, field); + skippedErrorMessages++; } - nextLogRecord = bump.increment(); - skippedErrorMessages = 0; - } else { - skippedErrorMessages++; } - computeNext(); - } + } while (termFreqVector == null); indexReader.getTermFreqVector(doc, field, mapper); mapper.setDocumentNumber(doc);