You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by mi...@apache.org on 2014/04/08 17:34:58 UTC
svn commit: r1585759 [1/9] - in /lucene/dev/trunk: lucene/
lucene/analysis/common/src/test/org/apache/lucene/analysis/core/
lucene/analysis/common/src/test/org/apache/lucene/analysis/miscellaneous/
lucene/analysis/common/src/test/org/apache/lucene/anal...
Author: mikemccand
Date: Tue Apr 8 15:34:50 2014
New Revision: 1585759
URL: http://svn.apache.org/r1585759
Log:
LUCENE-4246: fix IW.close to just close, even on exception
Modified:
lucene/dev/trunk/lucene/CHANGES.txt
lucene/dev/trunk/lucene/MIGRATE.txt
lucene/dev/trunk/lucene/analysis/common/src/test/org/apache/lucene/analysis/core/TestClassicAnalyzer.java
lucene/dev/trunk/lucene/analysis/common/src/test/org/apache/lucene/analysis/core/TestKeywordAnalyzer.java
lucene/dev/trunk/lucene/analysis/common/src/test/org/apache/lucene/analysis/miscellaneous/TestEmptyTokenStream.java
lucene/dev/trunk/lucene/analysis/common/src/test/org/apache/lucene/analysis/miscellaneous/TestLimitTokenCountAnalyzer.java
lucene/dev/trunk/lucene/analysis/common/src/test/org/apache/lucene/analysis/query/QueryAutoStopWordAnalyzerTest.java
lucene/dev/trunk/lucene/analysis/common/src/test/org/apache/lucene/analysis/shingle/ShingleAnalyzerWrapperTest.java
lucene/dev/trunk/lucene/analysis/common/src/test/org/apache/lucene/analysis/sinks/TestTeeSinkTokenFilter.java
lucene/dev/trunk/lucene/analysis/icu/src/test/org/apache/lucene/collation/TestICUCollationDocValuesField.java
lucene/dev/trunk/lucene/analysis/uima/src/test/org/apache/lucene/analysis/uima/UIMABaseAnalyzerTest.java
lucene/dev/trunk/lucene/benchmark/src/java/org/apache/lucene/benchmark/byTask/PerfRunData.java
lucene/dev/trunk/lucene/benchmark/src/java/org/apache/lucene/benchmark/byTask/tasks/CloseIndexTask.java
lucene/dev/trunk/lucene/benchmark/src/test/org/apache/lucene/benchmark/byTask/TestPerfTasksLogic.java
lucene/dev/trunk/lucene/benchmark/src/test/org/apache/lucene/benchmark/byTask/tasks/AddIndexesTaskTest.java
lucene/dev/trunk/lucene/classification/src/java/org/apache/lucene/classification/utils/DatasetSplitter.java
lucene/dev/trunk/lucene/classification/src/test/org/apache/lucene/classification/ClassificationTestBase.java
lucene/dev/trunk/lucene/classification/src/test/org/apache/lucene/classification/utils/DataSplitterTest.java
lucene/dev/trunk/lucene/codecs/src/test/org/apache/lucene/codecs/pulsing/Test10KPulsings.java
lucene/dev/trunk/lucene/codecs/src/test/org/apache/lucene/codecs/pulsing/TestPulsingReuse.java
lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/DocumentsWriter.java
lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/IndexUpgrader.java
lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/IndexWriter.java
lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/LiveIndexWriterConfig.java
lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/MergePolicy.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/TestDemo.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/TestExternalCodecs.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/TestMergeSchedulerExternal.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/TestSearch.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/TestSearchForDuplicates.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/analysis/TestCachingTokenFilter.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/analysis/TestGraphTokenizers.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/analysis/TestMockAnalyzer.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/codecs/compressing/TestCompressingStoredFieldsFormat.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/codecs/compressing/TestCompressingTermVectorsFormat.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/codecs/lucene40/TestLucene40PostingsReader.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/codecs/lucene40/TestReuseDocsEnum.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/codecs/lucene41/TestBlockPostingsFormat2.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/codecs/lucene41/TestBlockPostingsFormat3.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/codecs/perfield/TestPerFieldDocValuesFormat.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/codecs/perfield/TestPerFieldPostingsFormat2.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/document/TestBinaryDocument.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/document/TestDocument.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/Test2BBinaryDocValues.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/Test2BDocs.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/Test2BNumericDocValues.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/Test2BPositions.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/Test2BPostings.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/Test2BPostingsBytes.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/Test2BSortedDocValues.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/Test2BTerms.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/Test4GBStoredFields.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestAddIndexes.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestAllFilesHaveChecksumFooter.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestAllFilesHaveCodecHeader.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestAtomicUpdate.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestBackwardsCompatibility.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestBagOfPositions.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestBagOfPostings.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestBinaryDocValuesUpdates.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestBinaryTerms.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestCheckIndex.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestCodecHoldsOpenFiles.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestCodecs.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestCompoundFile.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestConcurrentMergeScheduler.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestConsistentFieldNumbers.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestCrash.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestCrashCausesCorruptIndex.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestCustomNorms.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestDeletionPolicy.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestDirectoryReader.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestDirectoryReaderReopen.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestDoc.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestDocCount.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestDocInverterPerFieldErrorInfo.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestDocTermOrds.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestDocValuesIndexing.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestDocValuesWithThreads.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestDocsAndPositions.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestDocumentWriter.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestDuelingCodecs.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestExceedMaxTermLength.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestFieldsReader.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestFilterAtomicReader.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestFlex.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestFlushByRamOrCountsPolicy.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestForTooMuchCloning.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestForceMergeForever.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestIndexFileDeleter.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestIndexReaderClose.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestIndexWriter.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterCommit.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterConfig.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterDelete.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterExceptions.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterForceMerge.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterMergePolicy.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterMerging.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterNRTIsCurrent.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterOnDiskFull.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterOutOfFileDescriptors.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterReader.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterUnicode.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterWithThreads.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestIndexableField.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestIsCurrent.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestLazyProxSkipping.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestLongPostings.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestMaxTermFrequency.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestMixedCodecs.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestMixedDocValuesUpdates.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestMultiDocValues.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestMultiFields.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestMultiLevelSkipList.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestNRTReaderWithThreads.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestNeverDelete.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestNewestSegment.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestNoDeletionPolicy.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestNorms.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestNumericDocValuesUpdates.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestOmitNorms.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestOmitPositions.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestOmitTf.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestParallelAtomicReader.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestParallelCompositeReader.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestParallelReaderEmptyIndex.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestParallelTermEnum.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestPayloads.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestPayloadsOnVectors.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestPerSegmentDeletes.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestPersistentSnapshotDeletionPolicy.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestPostingsOffsets.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestReaderClosed.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestRollback.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestRollingUpdates.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestSameTokenSamePosition.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestSegmentTermDocs.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestSegmentTermEnum.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestSizeBoundedForceMerge.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestSnapshotDeletionPolicy.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestStressAdvance.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestStressIndexing.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestStressIndexing2.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestStressNRT.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestSumDocFreq.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestTermVectorsReader.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestTermVectorsWriter.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestTermdocPerf.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestTermsEnum.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestTermsEnum2.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestThreadedForceMerge.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestTieredMergePolicy.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestTransactionRollback.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestTransactions.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestTryDelete.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestUniqueTermCount.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/BaseTestRangeFilter.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/FuzzyTermOnShortTermsTest.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestAutomatonQuery.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestAutomatonQueryUnicode.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestBoolean2.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestBooleanMinShouldMatch.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestBooleanOr.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestBooleanQuery.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestBooleanQueryVisitSubscorers.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestBooleanScorer.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestCachingWrapperFilter.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestConjunctions.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestConstantScoreQuery.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestControlledRealTimeReopenThread.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestCustomSearcherSort.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestDateFilter.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestDateSort.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestDisjunctionMaxQuery.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestDocBoost.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestDocIdSet.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestDocTermOrdsRangeFilter.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestDocTermOrdsRewriteMethod.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestDocValuesScoring.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestEarlyTermination.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestElevationComparator.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestExplanations.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestFieldCache.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestFieldCacheRangeFilter.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestFieldCacheTermsFilter.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestFieldValueFilter.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestFilteredQuery.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestFilteredSearch.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestFuzzyQuery.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestIndexSearcher.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestLiveFieldValues.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestMatchAllDocsQuery.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestMinShouldMatch2.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestMultiPhraseQuery.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestMultiTermConstantScore.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestMultiTermQueryRewrites.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestMultiThreadTermVectors.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestMultiValuedNumericRangeQuery.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestNGramPhraseQuery.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestNot.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestNumericRangeQuery32.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestNumericRangeQuery64.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestPhrasePrefixQuery.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestPhraseQuery.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestPositionIncrement.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestPositiveScoresOnlyCollector.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestPrefixFilter.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestPrefixInBooleanQuery.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestPrefixQuery.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestPrefixRandom.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestQueryRescorer.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestQueryWrapperFilter.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestRegexpQuery.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestRegexpRandom.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestRegexpRandom2.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestSameScoresWithThreads.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestScoreCachingWrappingScorer.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestScorerPerf.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestSearchAfter.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestSearchWithThreads.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestSearcherManager.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestSimilarity.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestSimilarityProvider.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestSloppyPhraseQuery.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestSort.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestSortDocValues.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestSortRandom.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestSortRescorer.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestSubScorerFreqs.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestTermRangeQuery.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestTermScorer.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestTermVectors.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestTimeLimitingCollector.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestTopDocsCollector.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestTopDocsMerge.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestTopFieldCollector.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestTopScoreDocCollector.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestTotalHitCountCollector.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestWildcard.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestWildcardRandom.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/payloads/PayloadHelper.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/payloads/TestPayloadNearQuery.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/payloads/TestPayloadTermQuery.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/similarities/TestSimilarity2.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/similarities/TestSimilarityBase.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/spans/TestBasics.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/spans/TestFieldMaskingSpanQuery.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/spans/TestNearSpansOrdered.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/spans/TestPayloadSpans.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/spans/TestSpanFirstQuery.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/spans/TestSpanMultiTermQueryWrapper.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/spans/TestSpans.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/spans/TestSpansAdvanced.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/spans/TestSpansAdvanced2.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/store/TestBufferedIndexInput.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/store/TestFileSwitchDirectory.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/store/TestLockFactory.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/store/TestMockDirectoryWrapper.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/store/TestMultiMMap.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/store/TestNRTCachingDirectory.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/store/TestRAMDirectory.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/store/TestWindowsMMap.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/util/TestFieldCacheSanityChecker.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/util/fst/TestFSTs.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/util/junitcompat/TestFailIfUnreferencedFiles.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/util/junitcompat/TestFailOnFieldCacheInsanity.java
lucene/dev/trunk/lucene/demo/src/java/org/apache/lucene/demo/IndexFiles.java
lucene/dev/trunk/lucene/demo/src/java/org/apache/lucene/demo/facet/AssociationsFacetsExample.java
lucene/dev/trunk/lucene/demo/src/java/org/apache/lucene/demo/facet/DistanceFacetsExample.java
lucene/dev/trunk/lucene/demo/src/java/org/apache/lucene/demo/facet/ExpressionAggregationFacetsExample.java
lucene/dev/trunk/lucene/demo/src/java/org/apache/lucene/demo/facet/MultiCategoryListsFacetsExample.java
lucene/dev/trunk/lucene/demo/src/java/org/apache/lucene/demo/facet/RangeFacetsExample.java
lucene/dev/trunk/lucene/demo/src/java/org/apache/lucene/demo/facet/SimpleFacetsExample.java
lucene/dev/trunk/lucene/demo/src/java/org/apache/lucene/demo/facet/SimpleSortedSetFacetsExample.java
lucene/dev/trunk/lucene/demo/src/java/org/apache/lucene/demo/xmlparser/FormBasedXmlQueryDemo.java
lucene/dev/trunk/lucene/expressions/src/test/org/apache/lucene/expressions/TestDemoExpressions.java
lucene/dev/trunk/lucene/expressions/src/test/org/apache/lucene/expressions/TestExpressionRescorer.java
lucene/dev/trunk/lucene/expressions/src/test/org/apache/lucene/expressions/TestExpressionSorts.java
lucene/dev/trunk/lucene/expressions/src/test/org/apache/lucene/expressions/TestExpressionValueSource.java
lucene/dev/trunk/lucene/facet/src/java/org/apache/lucene/facet/taxonomy/directory/DirectoryTaxonomyWriter.java
lucene/dev/trunk/lucene/facet/src/test/org/apache/lucene/facet/TestDrillDownQuery.java
lucene/dev/trunk/lucene/facet/src/test/org/apache/lucene/facet/TestDrillSideways.java
lucene/dev/trunk/lucene/facet/src/test/org/apache/lucene/facet/TestFacetsConfig.java
lucene/dev/trunk/lucene/facet/src/test/org/apache/lucene/facet/TestMultipleIndexFields.java
lucene/dev/trunk/lucene/facet/src/test/org/apache/lucene/facet/TestRandomSamplingFacetsCollector.java
lucene/dev/trunk/lucene/facet/src/test/org/apache/lucene/facet/range/TestRangeFacetCounts.java
lucene/dev/trunk/lucene/facet/src/test/org/apache/lucene/facet/sortedset/TestSortedSetDocValuesFacets.java
lucene/dev/trunk/lucene/facet/src/test/org/apache/lucene/facet/taxonomy/TestCachedOrdinalsReader.java
lucene/dev/trunk/lucene/facet/src/test/org/apache/lucene/facet/taxonomy/TestSearcherTaxonomyManager.java
lucene/dev/trunk/lucene/facet/src/test/org/apache/lucene/facet/taxonomy/TestTaxonomyFacetAssociations.java
lucene/dev/trunk/lucene/facet/src/test/org/apache/lucene/facet/taxonomy/TestTaxonomyFacetCounts.java
lucene/dev/trunk/lucene/facet/src/test/org/apache/lucene/facet/taxonomy/TestTaxonomyFacetCounts2.java
lucene/dev/trunk/lucene/facet/src/test/org/apache/lucene/facet/taxonomy/TestTaxonomyFacetSumValueSource.java
lucene/dev/trunk/lucene/facet/src/test/org/apache/lucene/facet/taxonomy/directory/TestConcurrentFacetedIndexing.java
lucene/dev/trunk/lucene/facet/src/test/org/apache/lucene/facet/taxonomy/directory/TestDirectoryTaxonomyWriter.java
lucene/dev/trunk/lucene/grouping/src/test/org/apache/lucene/search/grouping/AllGroupHeadsCollectorTest.java
lucene/dev/trunk/lucene/grouping/src/test/org/apache/lucene/search/grouping/AllGroupsCollectorTest.java
lucene/dev/trunk/lucene/grouping/src/test/org/apache/lucene/search/grouping/DistinctValuesCollectorTest.java
lucene/dev/trunk/lucene/grouping/src/test/org/apache/lucene/search/grouping/GroupFacetCollectorTest.java
lucene/dev/trunk/lucene/grouping/src/test/org/apache/lucene/search/grouping/GroupingSearchTest.java
lucene/dev/trunk/lucene/grouping/src/test/org/apache/lucene/search/grouping/TestGrouping.java
lucene/dev/trunk/lucene/highlighter/src/test/org/apache/lucene/search/highlight/HighlighterPhraseTest.java
lucene/dev/trunk/lucene/highlighter/src/test/org/apache/lucene/search/highlight/HighlighterTest.java
lucene/dev/trunk/lucene/highlighter/src/test/org/apache/lucene/search/highlight/TokenSourcesTest.java
lucene/dev/trunk/lucene/highlighter/src/test/org/apache/lucene/search/postingshighlight/TestMultiTermHighlighting.java
lucene/dev/trunk/lucene/highlighter/src/test/org/apache/lucene/search/postingshighlight/TestPostingsHighlighter.java
lucene/dev/trunk/lucene/highlighter/src/test/org/apache/lucene/search/postingshighlight/TestPostingsHighlighterRanking.java
lucene/dev/trunk/lucene/highlighter/src/test/org/apache/lucene/search/vectorhighlight/AbstractTestCase.java
lucene/dev/trunk/lucene/highlighter/src/test/org/apache/lucene/search/vectorhighlight/FastVectorHighlighterTest.java
lucene/dev/trunk/lucene/highlighter/src/test/org/apache/lucene/search/vectorhighlight/SimpleFragmentsBuilderTest.java
lucene/dev/trunk/lucene/join/src/test/org/apache/lucene/search/join/TestBlockJoin.java
lucene/dev/trunk/lucene/join/src/test/org/apache/lucene/search/join/TestBlockJoinSorting.java
lucene/dev/trunk/lucene/join/src/test/org/apache/lucene/search/join/TestBlockJoinValidation.java
lucene/dev/trunk/lucene/join/src/test/org/apache/lucene/search/join/TestJoinUtil.java
lucene/dev/trunk/lucene/memory/src/test/org/apache/lucene/index/memory/MemoryIndexTest.java
lucene/dev/trunk/lucene/misc/src/java/org/apache/lucene/index/MultiPassIndexSplitter.java
lucene/dev/trunk/lucene/misc/src/java/org/apache/lucene/index/PKIndexSplitter.java
lucene/dev/trunk/lucene/misc/src/java/org/apache/lucene/misc/IndexMergeTool.java
lucene/dev/trunk/lucene/misc/src/test/org/apache/lucene/document/TestLazyDocument.java
lucene/dev/trunk/lucene/misc/src/test/org/apache/lucene/index/TestIndexSplitter.java
lucene/dev/trunk/lucene/misc/src/test/org/apache/lucene/index/TestMultiPassIndexSplitter.java
lucene/dev/trunk/lucene/misc/src/test/org/apache/lucene/index/TestPKIndexSplitter.java
lucene/dev/trunk/lucene/misc/src/test/org/apache/lucene/index/sorter/IndexSortingTest.java
lucene/dev/trunk/lucene/misc/src/test/org/apache/lucene/index/sorter/SorterTestBase.java
lucene/dev/trunk/lucene/misc/src/test/org/apache/lucene/index/sorter/TestBlockJoinSorter.java
lucene/dev/trunk/lucene/misc/src/test/org/apache/lucene/index/sorter/TestEarlyTermination.java
lucene/dev/trunk/lucene/misc/src/test/org/apache/lucene/index/sorter/TestSortingMergePolicy.java
lucene/dev/trunk/lucene/misc/src/test/org/apache/lucene/misc/TestHighFreqTerms.java
lucene/dev/trunk/lucene/queries/src/test/org/apache/lucene/queries/BooleanFilterTest.java
lucene/dev/trunk/lucene/queries/src/test/org/apache/lucene/queries/ChainedFilterTest.java
lucene/dev/trunk/lucene/queries/src/test/org/apache/lucene/queries/CommonTermsQueryTest.java
lucene/dev/trunk/lucene/queries/src/test/org/apache/lucene/queries/TermFilterTest.java
lucene/dev/trunk/lucene/queries/src/test/org/apache/lucene/queries/TermsFilterTest.java
lucene/dev/trunk/lucene/queries/src/test/org/apache/lucene/queries/function/FunctionTestSetup.java
lucene/dev/trunk/lucene/queries/src/test/org/apache/lucene/queries/function/TestBoostedQuery.java
lucene/dev/trunk/lucene/queries/src/test/org/apache/lucene/queries/function/TestDocValuesFieldSources.java
lucene/dev/trunk/lucene/queries/src/test/org/apache/lucene/queries/function/TestFunctionQuerySort.java
lucene/dev/trunk/lucene/queries/src/test/org/apache/lucene/queries/function/TestLongNormValueSource.java
lucene/dev/trunk/lucene/queries/src/test/org/apache/lucene/queries/function/TestValueSources.java
lucene/dev/trunk/lucene/queries/src/test/org/apache/lucene/queries/mlt/TestMoreLikeThis.java
lucene/dev/trunk/lucene/queryparser/src/test/org/apache/lucene/queryparser/analyzing/TestAnalyzingQueryParser.java
lucene/dev/trunk/lucene/queryparser/src/test/org/apache/lucene/queryparser/classic/TestMultiFieldQueryParser.java
lucene/dev/trunk/lucene/queryparser/src/test/org/apache/lucene/queryparser/complexPhrase/TestComplexPhraseQuery.java
lucene/dev/trunk/lucene/queryparser/src/test/org/apache/lucene/queryparser/flexible/standard/TestMultiFieldQPHelper.java
lucene/dev/trunk/lucene/queryparser/src/test/org/apache/lucene/queryparser/flexible/standard/TestNumericQueryParser.java
lucene/dev/trunk/lucene/queryparser/src/test/org/apache/lucene/queryparser/flexible/standard/TestQPHelper.java
lucene/dev/trunk/lucene/queryparser/src/test/org/apache/lucene/queryparser/surround/query/SingleFieldTestDb.java
lucene/dev/trunk/lucene/queryparser/src/test/org/apache/lucene/queryparser/util/QueryParserTestBase.java
lucene/dev/trunk/lucene/queryparser/src/test/org/apache/lucene/queryparser/xml/TestParser.java
lucene/dev/trunk/lucene/queryparser/src/test/org/apache/lucene/queryparser/xml/TestQueryTemplateManager.java
lucene/dev/trunk/lucene/queryparser/src/test/org/apache/lucene/queryparser/xml/builders/TestNumericRangeFilterBuilder.java
lucene/dev/trunk/lucene/replicator/src/test/org/apache/lucene/replicator/IndexAndTaxonomyReplicationClientTest.java
lucene/dev/trunk/lucene/replicator/src/test/org/apache/lucene/replicator/IndexAndTaxonomyRevisionTest.java
lucene/dev/trunk/lucene/replicator/src/test/org/apache/lucene/replicator/IndexReplicationClientTest.java
lucene/dev/trunk/lucene/replicator/src/test/org/apache/lucene/replicator/IndexRevisionTest.java
lucene/dev/trunk/lucene/replicator/src/test/org/apache/lucene/replicator/LocalReplicatorTest.java
lucene/dev/trunk/lucene/replicator/src/test/org/apache/lucene/replicator/SessionTokenTest.java
lucene/dev/trunk/lucene/replicator/src/test/org/apache/lucene/replicator/http/HttpReplicatorTest.java
lucene/dev/trunk/lucene/sandbox/src/test/org/apache/lucene/sandbox/queries/DuplicateFilterTest.java
lucene/dev/trunk/lucene/sandbox/src/test/org/apache/lucene/sandbox/queries/FuzzyLikeThisQueryTest.java
lucene/dev/trunk/lucene/sandbox/src/test/org/apache/lucene/sandbox/queries/TestSlowCollationMethods.java
lucene/dev/trunk/lucene/sandbox/src/test/org/apache/lucene/sandbox/queries/TestSlowFuzzyQuery.java
lucene/dev/trunk/lucene/sandbox/src/test/org/apache/lucene/sandbox/queries/TestSlowFuzzyQuery2.java
lucene/dev/trunk/lucene/sandbox/src/test/org/apache/lucene/sandbox/queries/TestSortedSetSortField.java
lucene/dev/trunk/lucene/sandbox/src/test/org/apache/lucene/sandbox/queries/TestSortedSetSortFieldDocValues.java
lucene/dev/trunk/lucene/sandbox/src/test/org/apache/lucene/sandbox/queries/TestSortedSetSortFieldSelectors.java
lucene/dev/trunk/lucene/sandbox/src/test/org/apache/lucene/sandbox/queries/regex/TestRegexQuery.java
lucene/dev/trunk/lucene/sandbox/src/test/org/apache/lucene/sandbox/queries/regex/TestSpanRegexQuery.java
lucene/dev/trunk/lucene/spatial/src/test/org/apache/lucene/spatial/SpatialExample.java
lucene/dev/trunk/lucene/spatial/src/test/org/apache/lucene/spatial/SpatialTestCase.java
lucene/dev/trunk/lucene/suggest/src/java/org/apache/lucene/search/spell/SpellChecker.java
lucene/dev/trunk/lucene/suggest/src/java/org/apache/lucene/search/suggest/analyzing/AnalyzingInfixSuggester.java
lucene/dev/trunk/lucene/suggest/src/java/org/apache/lucene/search/suggest/analyzing/FreeTextSuggester.java
lucene/dev/trunk/lucene/suggest/src/test/org/apache/lucene/search/spell/TestDirectSpellChecker.java
lucene/dev/trunk/lucene/suggest/src/test/org/apache/lucene/search/spell/TestLuceneDictionary.java
lucene/dev/trunk/lucene/suggest/src/test/org/apache/lucene/search/spell/TestSpellChecker.java
lucene/dev/trunk/lucene/suggest/src/test/org/apache/lucene/search/spell/TestWordBreakSpellChecker.java
lucene/dev/trunk/lucene/suggest/src/test/org/apache/lucene/search/suggest/DocumentDictionaryTest.java
lucene/dev/trunk/lucene/suggest/src/test/org/apache/lucene/search/suggest/DocumentValueSourceDictionaryTest.java
lucene/dev/trunk/lucene/suggest/src/test/org/apache/lucene/search/suggest/TestHighFrequencyDictionary.java
lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/analysis/BaseTokenStreamTestCase.java
lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/analysis/CollationTestBase.java
lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/index/BaseDocValuesFormatTestCase.java
lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/index/BaseMergePolicyTestCase.java
lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/index/BasePostingsFormatTestCase.java
lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/index/BaseStoredFieldsFormatTestCase.java
lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/index/BaseTermVectorsFormatTestCase.java
lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/index/DocHelper.java
lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/index/RandomIndexWriter.java
lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/index/ThreadedIndexingAndSearchingTestCase.java
lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/search/QueryUtils.java
lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/search/SearchEquivalenceTestBase.java
lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/search/ShardSearchingTestBase.java
lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/store/MockDirectoryWrapper.java
lucene/dev/trunk/solr/contrib/map-reduce/src/java/org/apache/solr/hadoop/TreeMergeOutputFormat.java
lucene/dev/trunk/solr/core/src/java/org/apache/solr/spelling/FileBasedSpellChecker.java
lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/DirectUpdateHandler2.java
lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/SolrIndexSplitter.java
lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/SolrIndexWriter.java
lucene/dev/trunk/solr/core/src/test/org/apache/solr/core/SolrCoreCheckLockOnStartupTest.java
lucene/dev/trunk/solr/core/src/test/org/apache/solr/core/TestArbitraryIndexDir.java
lucene/dev/trunk/solr/core/src/test/org/apache/solr/search/TestSort.java
lucene/dev/trunk/solr/core/src/test/org/apache/solr/search/TestStressLucene.java
lucene/dev/trunk/solr/core/src/test/org/apache/solr/spelling/IndexBasedSpellCheckerTest.java
Modified: lucene/dev/trunk/lucene/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/CHANGES.txt?rev=1585759&r1=1585758&r2=1585759&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/CHANGES.txt (original)
+++ lucene/dev/trunk/lucene/CHANGES.txt Tue Apr 8 15:34:50 2014
@@ -53,6 +53,14 @@ API Changes
* LUCENE-5527: The Collector API has been refactored to use a dedicated Collector
per leaf. (Shikhar Bhushan, Adrien Grand)
+* LUCENE-4246: IndexWriter.close now discards any changes and always
+ closes, even if it throws an exception. If matchVersion is <
+ LUCENE_50 yet there were uncommitted changes or still-running
+ merges, then a RuntimeException will be thrown indicating changes
+ were lost (but the writer will still be closed). Finally, a new
+ shutdown method was added to do what close used to do (flush, wait
+ for merges, commit, close).
+
Documentation
* LUCENE-5392: Add/improve analysis package documentation to reflect
Modified: lucene/dev/trunk/lucene/MIGRATE.txt
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/MIGRATE.txt?rev=1585759&r1=1585758&r2=1585759&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/MIGRATE.txt (original)
+++ lucene/dev/trunk/lucene/MIGRATE.txt Tue Apr 8 15:34:50 2014
@@ -19,3 +19,11 @@ The Collector API has been refactored to
per segment. It is possible to migrate existing collectors painlessly by
extending SimpleCollector instead of Collector: SimpleCollector is a
specialization of Collector that returns itself as a per-segment Collector.
+
+## IndexWriter.close now discards all changes and closes, even on exception (LUCENE-4246)
+
+When you close an IndexWriter it will discard all changes; you must
+call .commit() and .waitForMerges() beforehand. If
+IndexWriterConfig's matchVersion is before 5.0, then close will
+throw an exception indicating that changes were lost (but the
+IndexWriter will still have been closed).
Modified: lucene/dev/trunk/lucene/analysis/common/src/test/org/apache/lucene/analysis/core/TestClassicAnalyzer.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/analysis/common/src/test/org/apache/lucene/analysis/core/TestClassicAnalyzer.java?rev=1585759&r1=1585758&r2=1585759&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/analysis/common/src/test/org/apache/lucene/analysis/core/TestClassicAnalyzer.java (original)
+++ lucene/dev/trunk/lucene/analysis/common/src/test/org/apache/lucene/analysis/core/TestClassicAnalyzer.java Tue Apr 8 15:34:50 2014
@@ -270,7 +270,7 @@ public class TestClassicAnalyzer extends
doc = new Document();
doc.add(new TextField("content", "abc bbb ccc", Field.Store.NO));
writer.addDocument(doc);
- writer.close();
+ writer.shutdown();
IndexReader reader = DirectoryReader.open(dir);
@@ -304,7 +304,7 @@ public class TestClassicAnalyzer extends
sa.setMaxTokenLength(100000);
writer = new IndexWriter(dir, new IndexWriterConfig(TEST_VERSION_CURRENT, sa));
writer.addDocument(doc);
- writer.close();
+ writer.shutdown();
reader = DirectoryReader.open(dir);
assertEquals(1, reader.docFreq(new Term("content", bigTerm)));
reader.close();
Modified: lucene/dev/trunk/lucene/analysis/common/src/test/org/apache/lucene/analysis/core/TestKeywordAnalyzer.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/analysis/common/src/test/org/apache/lucene/analysis/core/TestKeywordAnalyzer.java?rev=1585759&r1=1585758&r2=1585759&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/analysis/common/src/test/org/apache/lucene/analysis/core/TestKeywordAnalyzer.java (original)
+++ lucene/dev/trunk/lucene/analysis/common/src/test/org/apache/lucene/analysis/core/TestKeywordAnalyzer.java Tue Apr 8 15:34:50 2014
@@ -57,7 +57,7 @@ public class TestKeywordAnalyzer extends
doc.add(new TextField("description", "Illidium Space Modulator", Field.Store.YES));
writer.addDocument(doc);
- writer.close();
+ writer.shutdown();
reader = DirectoryReader.open(directory);
searcher = newSearcher(reader);
@@ -94,7 +94,7 @@ public class TestKeywordAnalyzer extends
doc = new Document();
doc.add(new TextField("partnum", "Q37", Field.Store.YES));
writer.addDocument(doc);
- writer.close();
+ writer.shutdown();
IndexReader reader = DirectoryReader.open(dir);
DocsEnum td = TestUtil.docs(random(),
Modified: lucene/dev/trunk/lucene/analysis/common/src/test/org/apache/lucene/analysis/miscellaneous/TestEmptyTokenStream.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/analysis/common/src/test/org/apache/lucene/analysis/miscellaneous/TestEmptyTokenStream.java?rev=1585759&r1=1585758&r2=1585759&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/analysis/common/src/test/org/apache/lucene/analysis/miscellaneous/TestEmptyTokenStream.java (original)
+++ lucene/dev/trunk/lucene/analysis/common/src/test/org/apache/lucene/analysis/miscellaneous/TestEmptyTokenStream.java Tue Apr 8 15:34:50 2014
@@ -67,7 +67,7 @@ public class TestEmptyTokenStream extend
assertEquals(1, writer.numDocs());
- writer.close();
+ writer.shutdown();
directory.close();
}
Modified: lucene/dev/trunk/lucene/analysis/common/src/test/org/apache/lucene/analysis/miscellaneous/TestLimitTokenCountAnalyzer.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/analysis/common/src/test/org/apache/lucene/analysis/miscellaneous/TestLimitTokenCountAnalyzer.java?rev=1585759&r1=1585758&r2=1585759&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/analysis/common/src/test/org/apache/lucene/analysis/miscellaneous/TestLimitTokenCountAnalyzer.java (original)
+++ lucene/dev/trunk/lucene/analysis/common/src/test/org/apache/lucene/analysis/miscellaneous/TestLimitTokenCountAnalyzer.java Tue Apr 8 15:34:50 2014
@@ -78,7 +78,7 @@ public class TestLimitTokenCountAnalyzer
b.append(" z");
doc.add(newTextField("field", b.toString(), Field.Store.NO));
writer.addDocument(doc);
- writer.close();
+ writer.shutdown();
IndexReader reader = DirectoryReader.open(dir);
Term t = new Term("field", "x");
Modified: lucene/dev/trunk/lucene/analysis/common/src/test/org/apache/lucene/analysis/query/QueryAutoStopWordAnalyzerTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/analysis/common/src/test/org/apache/lucene/analysis/query/QueryAutoStopWordAnalyzerTest.java?rev=1585759&r1=1585758&r2=1585759&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/analysis/common/src/test/org/apache/lucene/analysis/query/QueryAutoStopWordAnalyzerTest.java (original)
+++ lucene/dev/trunk/lucene/analysis/common/src/test/org/apache/lucene/analysis/query/QueryAutoStopWordAnalyzerTest.java Tue Apr 8 15:34:50 2014
@@ -52,7 +52,7 @@ public class QueryAutoStopWordAnalyzerTe
doc.add(new TextField("repetitiveField", repetitiveFieldValue, Field.Store.YES));
writer.addDocument(doc);
}
- writer.close();
+ writer.shutdown();
reader = DirectoryReader.open(dir);
}
Modified: lucene/dev/trunk/lucene/analysis/common/src/test/org/apache/lucene/analysis/shingle/ShingleAnalyzerWrapperTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/analysis/common/src/test/org/apache/lucene/analysis/shingle/ShingleAnalyzerWrapperTest.java?rev=1585759&r1=1585758&r2=1585759&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/analysis/common/src/test/org/apache/lucene/analysis/shingle/ShingleAnalyzerWrapperTest.java (original)
+++ lucene/dev/trunk/lucene/analysis/common/src/test/org/apache/lucene/analysis/shingle/ShingleAnalyzerWrapperTest.java Tue Apr 8 15:34:50 2014
@@ -73,7 +73,7 @@ public class ShingleAnalyzerWrapperTest
doc.add(new TextField("content", "a sentence which contains no test", Field.Store.YES));
writer.addDocument(doc);
- writer.close();
+ writer.shutdown();
reader = DirectoryReader.open(directory);
searcher = newSearcher(reader);
Modified: lucene/dev/trunk/lucene/analysis/common/src/test/org/apache/lucene/analysis/sinks/TestTeeSinkTokenFilter.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/analysis/common/src/test/org/apache/lucene/analysis/sinks/TestTeeSinkTokenFilter.java?rev=1585759&r1=1585758&r2=1585759&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/analysis/common/src/test/org/apache/lucene/analysis/sinks/TestTeeSinkTokenFilter.java (original)
+++ lucene/dev/trunk/lucene/analysis/common/src/test/org/apache/lucene/analysis/sinks/TestTeeSinkTokenFilter.java Tue Apr 8 15:34:50 2014
@@ -104,7 +104,7 @@ public class TestTeeSinkTokenFilter exte
doc.add(f1);
doc.add(f2);
w.addDocument(doc);
- w.close();
+ w.shutdown();
IndexReader r = DirectoryReader.open(dir);
Terms vector = r.getTermVectors(0).terms("field");
Modified: lucene/dev/trunk/lucene/analysis/icu/src/test/org/apache/lucene/collation/TestICUCollationDocValuesField.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/analysis/icu/src/test/org/apache/lucene/collation/TestICUCollationDocValuesField.java?rev=1585759&r1=1585758&r2=1585759&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/analysis/icu/src/test/org/apache/lucene/collation/TestICUCollationDocValuesField.java (original)
+++ lucene/dev/trunk/lucene/analysis/icu/src/test/org/apache/lucene/collation/TestICUCollationDocValuesField.java Tue Apr 8 15:34:50 2014
@@ -67,7 +67,7 @@ public class TestICUCollationDocValuesFi
iw.addDocument(doc);
IndexReader ir = iw.getReader();
- iw.close();
+ iw.shutdown();
IndexSearcher is = newSearcher(ir);
@@ -102,7 +102,7 @@ public class TestICUCollationDocValuesFi
}
IndexReader ir = iw.getReader();
- iw.close();
+ iw.shutdown();
IndexSearcher is = newSearcher(ir);
int numChecks = atLeast(100);
Modified: lucene/dev/trunk/lucene/analysis/uima/src/test/org/apache/lucene/analysis/uima/UIMABaseAnalyzerTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/analysis/uima/src/test/org/apache/lucene/analysis/uima/UIMABaseAnalyzerTest.java?rev=1585759&r1=1585758&r2=1585759&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/analysis/uima/src/test/org/apache/lucene/analysis/uima/UIMABaseAnalyzerTest.java (original)
+++ lucene/dev/trunk/lucene/analysis/uima/src/test/org/apache/lucene/analysis/uima/UIMABaseAnalyzerTest.java Tue Apr 8 15:34:50 2014
@@ -114,7 +114,7 @@ public class UIMABaseAnalyzerTest extend
indexSearcher = newSearcher(directoryReader);
result = indexSearcher.search(new MatchAllDocsQuery(), 2);
assertEquals(2, result.totalHits);
- writer.close();
+ writer.shutdown();
indexSearcher.getIndexReader().close();
dir.close();
}
Modified: lucene/dev/trunk/lucene/benchmark/src/java/org/apache/lucene/benchmark/byTask/PerfRunData.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/benchmark/src/java/org/apache/lucene/benchmark/byTask/PerfRunData.java?rev=1585759&r1=1585758&r2=1585759&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/benchmark/src/java/org/apache/lucene/benchmark/byTask/PerfRunData.java (original)
+++ lucene/dev/trunk/lucene/benchmark/src/java/org/apache/lucene/benchmark/byTask/PerfRunData.java Tue Apr 8 15:34:50 2014
@@ -142,7 +142,10 @@ public class PerfRunData implements Clos
@Override
public void close() throws IOException {
- IOUtils.close(indexWriter, indexReader, directory,
+ if (indexWriter != null) {
+ indexWriter.shutdown();
+ }
+ IOUtils.close(indexReader, directory,
taxonomyWriter, taxonomyReader, taxonomyDir,
docMaker, facetSource, contentSource);
@@ -160,7 +163,10 @@ public class PerfRunData implements Clos
public void reinit(boolean eraseIndex) throws Exception {
// cleanup index
- IOUtils.close(indexWriter, indexReader, directory);
+ if (indexWriter != null) {
+ indexWriter.shutdown();
+ }
+ IOUtils.close(indexReader, directory);
indexWriter = null;
indexReader = null;
Modified: lucene/dev/trunk/lucene/benchmark/src/java/org/apache/lucene/benchmark/byTask/tasks/CloseIndexTask.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/benchmark/src/java/org/apache/lucene/benchmark/byTask/tasks/CloseIndexTask.java?rev=1585759&r1=1585758&r2=1585759&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/benchmark/src/java/org/apache/lucene/benchmark/byTask/tasks/CloseIndexTask.java (original)
+++ lucene/dev/trunk/lucene/benchmark/src/java/org/apache/lucene/benchmark/byTask/tasks/CloseIndexTask.java Tue Apr 8 15:34:50 2014
@@ -45,7 +45,10 @@ public class CloseIndexTask extends Perf
if (infoStream != null) {
infoStream.close();
}
- iw.close(doWait);
+ if (doWait == false) {
+ iw.abortMerges();
+ }
+ iw.shutdown();
getRunData().setIndexWriter(null);
}
return 1;
Modified: lucene/dev/trunk/lucene/benchmark/src/test/org/apache/lucene/benchmark/byTask/TestPerfTasksLogic.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/benchmark/src/test/org/apache/lucene/benchmark/byTask/TestPerfTasksLogic.java?rev=1585759&r1=1585758&r2=1585759&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/benchmark/src/test/org/apache/lucene/benchmark/byTask/TestPerfTasksLogic.java (original)
+++ lucene/dev/trunk/lucene/benchmark/src/test/org/apache/lucene/benchmark/byTask/TestPerfTasksLogic.java Tue Apr 8 15:34:50 2014
@@ -106,7 +106,7 @@ public class TestPerfTasksLogic extends
IndexWriter iw = new IndexWriter(benchmark.getRunData().getDirectory(),
new IndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random()))
.setOpenMode(OpenMode.APPEND));
- iw.close();
+ iw.shutdown();
IndexReader ir = DirectoryReader.open(benchmark.getRunData().getDirectory());
assertEquals("1000 docs were added to the index, this is what we expect to find!",1000,ir.numDocs());
ir.close();
@@ -197,7 +197,7 @@ public class TestPerfTasksLogic extends
assertTrue("Index does not exist?...!", DirectoryReader.indexExists(benchmark.getRunData().getDirectory()));
// now we should be able to open the index for write.
IndexWriter iw = new IndexWriter(benchmark.getRunData().getDirectory(), new IndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random())).setOpenMode(OpenMode.APPEND));
- iw.close();
+ iw.shutdown();
IndexReader ir = DirectoryReader.open(benchmark.getRunData().getDirectory());
assertEquals("100 docs were added to the index, this is what we expect to find!",100,ir.numDocs());
ir.close();
@@ -237,7 +237,7 @@ public class TestPerfTasksLogic extends
assertTrue("Index does not exist?...!", DirectoryReader.indexExists(benchmark.getRunData().getDirectory()));
// now we should be able to open the index for write.
IndexWriter iw = new IndexWriter(benchmark.getRunData().getDirectory(), new IndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random())).setOpenMode(OpenMode.APPEND));
- iw.close();
+ iw.shutdown();
IndexReader ir = DirectoryReader.open(benchmark.getRunData().getDirectory());
assertEquals("1000 docs were added to the index, this is what we expect to find!",1000,ir.numDocs());
ir.close();
@@ -310,7 +310,7 @@ public class TestPerfTasksLogic extends
assertTrue("Index does not exist?...!", DirectoryReader.indexExists(benchmark.getRunData().getDirectory()));
// now we should be able to open the index for write.
IndexWriter iw = new IndexWriter(benchmark.getRunData().getDirectory(), new IndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random())).setOpenMode(OpenMode.APPEND));
- iw.close();
+ iw.shutdown();
IndexReader ir = DirectoryReader.open(benchmark.getRunData().getDirectory());
assertEquals("1 docs were added to the index, this is what we expect to find!",1,ir.numDocs());
ir.close();
@@ -442,7 +442,7 @@ public class TestPerfTasksLogic extends
IndexWriter iw = new IndexWriter(benchmark.getRunData().getDirectory(),
new IndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random()))
.setOpenMode(OpenMode.APPEND));
- iw.close();
+ iw.shutdown();
IndexReader ir = DirectoryReader.open(benchmark.getRunData().getDirectory());
assertEquals(numLines + " lines were created but " + ir.numDocs() + " docs are in the index", numLines, ir.numDocs());
@@ -665,7 +665,7 @@ public class TestPerfTasksLogic extends
assertTrue("did not use the specified MergeScheduler",
((MyMergeScheduler) benchmark.getRunData().getIndexWriter().getConfig()
.getMergeScheduler()).called);
- benchmark.getRunData().getIndexWriter().close();
+ benchmark.getRunData().getIndexWriter().shutdown();
// 3. test number of docs in the index
IndexReader ir = DirectoryReader.open(benchmark.getRunData().getDirectory());
@@ -711,7 +711,7 @@ public class TestPerfTasksLogic extends
// 2. execute the algorithm (required in every "logic" test)
Benchmark benchmark = execBenchmark(algLines);
assertTrue("did not use the specified MergePolicy", ((MyMergePolicy) benchmark.getRunData().getIndexWriter().getConfig().getMergePolicy()).called);
- benchmark.getRunData().getIndexWriter().close();
+ benchmark.getRunData().getIndexWriter().shutdown();
// 3. test number of docs in the index
IndexReader ir = DirectoryReader.open(benchmark.getRunData().getDirectory());
@@ -756,7 +756,7 @@ public class TestPerfTasksLogic extends
assertEquals(IndexWriterConfig.DISABLE_AUTO_FLUSH, (int) writer.getConfig().getRAMBufferSizeMB());
assertEquals(3, ((LogMergePolicy) writer.getConfig().getMergePolicy()).getMergeFactor());
assertEquals(0.0d, writer.getConfig().getMergePolicy().getNoCFSRatio(), 0.0);
- writer.close();
+ writer.shutdown();
Directory dir = benchmark.getRunData().getDirectory();
IndexReader reader = DirectoryReader.open(dir);
Fields tfv = reader.getTermVectors(0);
Modified: lucene/dev/trunk/lucene/benchmark/src/test/org/apache/lucene/benchmark/byTask/tasks/AddIndexesTaskTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/benchmark/src/test/org/apache/lucene/benchmark/byTask/tasks/AddIndexesTaskTest.java?rev=1585759&r1=1585758&r2=1585759&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/benchmark/src/test/org/apache/lucene/benchmark/byTask/tasks/AddIndexesTaskTest.java (original)
+++ lucene/dev/trunk/lucene/benchmark/src/test/org/apache/lucene/benchmark/byTask/tasks/AddIndexesTaskTest.java Tue Apr 8 15:34:50 2014
@@ -51,7 +51,7 @@ public class AddIndexesTaskTest extends
for (int i = 0; i < 10; i++) {
writer.addDocument(new Document());
}
- writer.close();
+ writer.shutdown();
} finally {
tmpDir.close();
}
Modified: lucene/dev/trunk/lucene/classification/src/java/org/apache/lucene/classification/utils/DatasetSplitter.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/classification/src/java/org/apache/lucene/classification/utils/DatasetSplitter.java?rev=1585759&r1=1585758&r2=1585759&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/classification/src/java/org/apache/lucene/classification/utils/DatasetSplitter.java (original)
+++ lucene/dev/trunk/lucene/classification/src/java/org/apache/lucene/classification/utils/DatasetSplitter.java Tue Apr 8 15:34:50 2014
@@ -128,9 +128,9 @@ public class DatasetSplitter {
cvWriter.commit();
trainingWriter.commit();
// close IWs
- testWriter.close();
- cvWriter.close();
- trainingWriter.close();
+ testWriter.shutdown();
+ cvWriter.shutdown();
+ trainingWriter.shutdown();
}
}
Modified: lucene/dev/trunk/lucene/classification/src/test/org/apache/lucene/classification/ClassificationTestBase.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/classification/src/test/org/apache/lucene/classification/ClassificationTestBase.java?rev=1585759&r1=1585758&r2=1585759&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/classification/src/test/org/apache/lucene/classification/ClassificationTestBase.java (original)
+++ lucene/dev/trunk/lucene/classification/src/test/org/apache/lucene/classification/ClassificationTestBase.java Tue Apr 8 15:34:50 2014
@@ -74,7 +74,7 @@ public abstract class ClassificationTest
@After
public void tearDown() throws Exception {
super.tearDown();
- indexWriter.close();
+ indexWriter.shutdown();
dir.close();
}
Modified: lucene/dev/trunk/lucene/classification/src/test/org/apache/lucene/classification/utils/DataSplitterTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/classification/src/test/org/apache/lucene/classification/utils/DataSplitterTest.java?rev=1585759&r1=1585758&r2=1585759&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/classification/src/test/org/apache/lucene/classification/utils/DataSplitterTest.java (original)
+++ lucene/dev/trunk/lucene/classification/src/test/org/apache/lucene/classification/utils/DataSplitterTest.java Tue Apr 8 15:34:50 2014
@@ -86,7 +86,7 @@ public class DataSplitterTest extends Lu
@After
public void tearDown() throws Exception {
originalIndex.close();
- indexWriter.close();
+ indexWriter.shutdown();
dir.close();
super.tearDown();
}
Modified: lucene/dev/trunk/lucene/codecs/src/test/org/apache/lucene/codecs/pulsing/Test10KPulsings.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/codecs/src/test/org/apache/lucene/codecs/pulsing/Test10KPulsings.java?rev=1585759&r1=1585758&r2=1585759&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/codecs/src/test/org/apache/lucene/codecs/pulsing/Test10KPulsings.java (original)
+++ lucene/dev/trunk/lucene/codecs/src/test/org/apache/lucene/codecs/pulsing/Test10KPulsings.java Tue Apr 8 15:34:50 2014
@@ -78,7 +78,7 @@ public class Test10KPulsings extends Luc
}
IndexReader ir = iw.getReader();
- iw.close();
+ iw.shutdown();
TermsEnum te = MultiFields.getTerms(ir, "field").iterator(null);
DocsEnum de = null;
@@ -136,7 +136,7 @@ public class Test10KPulsings extends Luc
}
IndexReader ir = iw.getReader();
- iw.close();
+ iw.shutdown();
TermsEnum te = MultiFields.getTerms(ir, "field").iterator(null);
DocsEnum de = null;
Modified: lucene/dev/trunk/lucene/codecs/src/test/org/apache/lucene/codecs/pulsing/TestPulsingReuse.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/codecs/src/test/org/apache/lucene/codecs/pulsing/TestPulsingReuse.java?rev=1585759&r1=1585758&r2=1585759&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/codecs/src/test/org/apache/lucene/codecs/pulsing/TestPulsingReuse.java (original)
+++ lucene/dev/trunk/lucene/codecs/src/test/org/apache/lucene/codecs/pulsing/TestPulsingReuse.java Tue Apr 8 15:34:50 2014
@@ -52,7 +52,7 @@ public class TestPulsingReuse extends Lu
doc.add(new TextField("foo", "a b b c c c d e f g g h i i j j k", Field.Store.NO));
iw.addDocument(doc);
DirectoryReader ir = iw.getReader();
- iw.close();
+ iw.shutdown();
AtomicReader segment = getOnlySegmentReader(ir);
DocsEnum reuse = null;
@@ -93,7 +93,7 @@ public class TestPulsingReuse extends Lu
// but this seems 'good enough' for now.
iw.addDocument(doc);
DirectoryReader ir = iw.getReader();
- iw.close();
+ iw.shutdown();
AtomicReader segment = getOnlySegmentReader(ir);
DocsEnum reuse = null;
Modified: lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/DocumentsWriter.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/DocumentsWriter.java?rev=1585759&r1=1585758&r2=1585759&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/DocumentsWriter.java (original)
+++ lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/DocumentsWriter.java Tue Apr 8 15:34:50 2014
@@ -424,9 +424,12 @@ final class DocumentsWriter implements C
final DocumentsWriterPerThread dwpt = perThread.dwpt;
final int dwptNumDocs = dwpt.getNumDocsInRAM();
try {
- final int docCount = dwpt.updateDocuments(docs, analyzer, delTerm);
- numDocsInRAM.addAndGet(docCount);
+ dwpt.updateDocuments(docs, analyzer, delTerm);
} finally {
+ // We don't know how many documents were actually
+ // counted as indexed, so we must subtract here to
+ // accumulate our separate counter:
+ numDocsInRAM.addAndGet(dwpt.getNumDocsInRAM() - dwptNumDocs);
if (dwpt.checkAndResetHasAborted()) {
if (!dwpt.pendingFilesToDelete().isEmpty()) {
putEvent(new DeleteNewFilesEvent(dwpt.pendingFilesToDelete()));
@@ -463,8 +466,11 @@ final class DocumentsWriter implements C
final int dwptNumDocs = dwpt.getNumDocsInRAM();
try {
dwpt.updateDocument(doc, analyzer, delTerm);
- numDocsInRAM.incrementAndGet();
} finally {
+ // We don't know whether the document actually
+ // counted as being indexed, so we must subtract here to
+ // accumulate our separate counter:
+ numDocsInRAM.addAndGet(dwpt.getNumDocsInRAM() - dwptNumDocs);
if (dwpt.checkAndResetHasAborted()) {
if (!dwpt.pendingFilesToDelete().isEmpty()) {
putEvent(new DeleteNewFilesEvent(dwpt.pendingFilesToDelete()));
@@ -585,6 +591,7 @@ final class DocumentsWriter implements C
while (!numDocsInRAM.compareAndSet(oldValue, oldValue - numFlushed)) {
oldValue = numDocsInRAM.get();
}
+ assert numDocsInRAM.get() >= 0;
}
// for asserts
Modified: lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/IndexUpgrader.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/IndexUpgrader.java?rev=1585759&r1=1585758&r2=1585759&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/IndexUpgrader.java (original)
+++ lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/IndexUpgrader.java Tue Apr 8 15:34:50 2014
@@ -169,7 +169,7 @@ public final class IndexUpgrader {
infoStream.message("IndexUpgrader", "All segments upgraded to version " + Constants.LUCENE_MAIN_VERSION);
}
} finally {
- w.close();
+ w.shutdown();
}
}
Modified: lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/IndexWriter.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/IndexWriter.java?rev=1585759&r1=1585758&r2=1585759&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/IndexWriter.java (original)
+++ lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/IndexWriter.java Tue Apr 8 15:34:50 2014
@@ -59,6 +59,7 @@ import org.apache.lucene.util.Constants;
import org.apache.lucene.util.IOUtils;
import org.apache.lucene.util.InfoStream;
import org.apache.lucene.util.ThreadInterruptedException;
+import org.apache.lucene.util.Version;
/**
An <code>IndexWriter</code> creates and maintains an index.
@@ -843,109 +844,113 @@ public class IndexWriter implements Clos
}
}
+ /** Gracefully shuts down this {@code IndexWriter} instance,
+ * by writing any changes, waiting for any running
+ * merges, committing, and closing. If you don't want to
+ * wait for merges, use {@link #shutdown(boolean)} instead.
+ *
+ * <p>If you called prepareCommit but failed to call
+ * commit, this method will throw {@code
+ * IllegalStateException} and the {@code IndexWriter}
+ * will not be closed.
+ *
+ * <p>If this method throws any other
+ * exception, the {@code IndexWriter} will be closed, but
+ * changes may have been lost.
+ *
+ * <p><b>NOTE</b>: You must ensure no
+ * other threads are still making changes at the same
+ * time that this method is invoked. */
+ public void shutdown() throws IOException {
+ shutdown(true);
+ }
+
+ /** Gracefully shut down this {@code IndexWriter}
+ * instance, with control over whether to wait for
+ * merges. See {@link #shutdown()}. */
+ public void shutdown(boolean waitForMerges) throws IOException {
+ if (pendingCommit != null) {
+ throw new IllegalStateException("cannot shutdown: prepareCommit was already called with no corresponding call to commit");
+ }
+ if (infoStream.isEnabled("IW")) {
+ infoStream.message("IW", "now flush at shutdown");
+ }
+ boolean success = false;
+ try {
+ flush(waitForMerges, true);
+ finishMerges(waitForMerges);
+ commit();
+ // TODO: we could just call rollback, but ... it's nice
+ // to catch IW bugs where after waitForMerges/commit we
+ // still have running merges / uncommitted changes, or
+ // tests that illegally leave threads indexing and then
+ // try to use shutdown:
+ close();
+ success = true;
+ } finally {
+ if (success == false) {
+ // Be certain to close the index on any exception
+ try {
+ rollback();
+ } catch (Throwable t) {
+ // Suppress so we keep throwing original exception
+ }
+ }
+ }
+ }
+
/**
- * Commits all changes to an index, waits for pending merges
- * to complete, and closes all associated files.
- * <p>
- * This is a "slow graceful shutdown" which may take a long time
- * especially if a big merge is pending: If you only want to close
- * resources use {@link #rollback()}. If you only want to commit
- * pending changes and close resources see {@link #close(boolean)}.
- * <p>
- * Note that this may be a costly
- * operation, so, try to re-use a single writer instead of
- * closing and opening a new one. See {@link #commit()} for
- * caveats about write caching done by some IO devices.
- *
- * <p> If an Exception is hit during close, eg due to disk
- * full or some other reason, then both the on-disk index
- * and the internal state of the IndexWriter instance will
- * be consistent. However, the close will not be complete
- * even though part of it (flushing buffered documents)
- * may have succeeded, so the write lock will still be
- * held.</p>
- *
- * <p> If you can correct the underlying cause (eg free up
- * some disk space) then you can call close() again.
- * Failing that, if you want to force the write lock to be
- * released (dangerous, because you may then lose buffered
- * docs in the IndexWriter instance) then you can do
- * something like this:</p>
- *
- * <pre class="prettyprint">
- * try {
- * writer.close();
- * } finally {
- * if (IndexWriter.isLocked(directory)) {
- * IndexWriter.unlock(directory);
- * }
- * }
- * </pre>
- *
- * after which, you must be certain not to use the writer
- * instance anymore.</p>
- *
- * <p><b>NOTE</b>: if this method hits an OutOfMemoryError
- * you should immediately close the writer, again. See <a
- * href="#OOME">above</a> for details.</p>
+ * Closes all open resources and releases the write lock.
+ * If there are running merges or uncommitted
+ * changes:
+ * <ul>
+ * <li> If config.matchVersion >= LUCENE_50 then the
+ * changes are silently discarded.
+ * <li> Otherwise, a RuntimeException is thrown to
+ * indicate what was lost, but the IndexWriter is
+ * still closed.
+ * </ul>
*
+ * Use {@link #shutdown} if you want to flush, commit, and
+ * wait for merges, before closing.
+ *
* @throws IOException if there is a low-level IO error
+ * (the IndexWriter will still be closed)
+ * @throws RuntimeException if config.matchVersion <
+ * LUCENE_50 and there were pending changes that were
+ * lost (the IndexWriter will still be closed)
*/
@Override
public void close() throws IOException {
- close(true);
- }
-
- /**
- * Closes the index with or without waiting for currently
- * running merges to finish. This is only meaningful when
- * using a MergeScheduler that runs merges in background
- * threads.
- *
- * <p><b>NOTE</b>: if this method hits an OutOfMemoryError
- * you should immediately close the writer, again. See <a
- * href="#OOME">above</a> for details.</p>
- *
- * <p><b>NOTE</b>: it is dangerous to always call
- * close(false), especially when IndexWriter is not open
- * for very long, because this can result in "merge
- * starvation" whereby long merges will never have a
- * chance to finish. This will cause too many segments in
- * your index over time.</p>
- *
- * @param waitForMerges if true, this call will block
- * until all merges complete; else, it will ask all
- * running merges to abort, wait until those merges have
- * finished (which should be at most a few seconds), and
- * then return.
- */
- public void close(boolean waitForMerges) throws IOException {
- // Ensure that only one thread actually gets to do the
- // closing, and make sure no commit is also in progress:
- synchronized(commitLock) {
- if (shouldClose()) {
- // If any methods have hit OutOfMemoryError, then abort
- // on close, in case the internal state of IndexWriter
- // or DocumentsWriter is corrupt
- if (hitOOM) {
- rollbackInternal();
- } else {
- closeInternal(waitForMerges, true);
+ // If there are uncommitted changes, or still running
+ // merges, we will in fact close, but we'll throw an
+ // exception notifying the caller that they lost
+ // changes, if IWC.matchVersion is < 5.0:
+ boolean lostChanges = false;
+
+ // Only check for lost changes if the version earlier than 5.0:
+ if (config.getMatchVersion().onOrAfter(Version.LUCENE_50) == false) {
+ lostChanges = hasUncommittedChanges();
+ if (lostChanges == false) {
+ synchronized(this) {
+ if (pendingMerges.isEmpty() == false) {
+ lostChanges = true;
+ }
+ if (runningMerges.isEmpty() == false) {
+ lostChanges = true;
+ }
}
}
- assert assertEventQueueAfterClose();
}
- }
- private boolean assertEventQueueAfterClose() {
- if (eventQueue.isEmpty()) {
- return true;
- }
- for (Event e : eventQueue) {
- assert e instanceof DocumentsWriter.MergePendingEvent : e;
+ // As long as there are no pending changes and no
+ // running merges, we just rollback to close:
+ rollback();
+
+ if (lostChanges) {
+ throw new RuntimeException("this writer is closed, but some pending changes or running merges were discarded; use shutdown to save pending changes and finish merges before closing");
}
- return true;
}
// Returns true if this thread should attempt to close, or
@@ -969,117 +974,6 @@ public class IndexWriter implements Clos
}
}
- private void closeInternal(boolean waitForMerges, boolean doFlush) throws IOException {
- boolean interrupted = false;
- try {
-
- if (pendingCommit != null) {
- throw new IllegalStateException("cannot close: prepareCommit was already called with no corresponding call to commit");
- }
-
- if (infoStream.isEnabled("IW")) {
- infoStream.message("IW", "now flush at close waitForMerges=" + waitForMerges);
- }
-
- docWriter.close();
-
- try {
- // Only allow a new merge to be triggered if we are
- // going to wait for merges:
- if (doFlush) {
- flush(waitForMerges, true);
- } else {
- docWriter.abort(this); // already closed -- never sync on IW
- }
-
- } finally {
- try {
- // clean up merge scheduler in all cases, although flushing may have failed:
- interrupted = Thread.interrupted();
-
- if (waitForMerges) {
- try {
- // Give merge scheduler last chance to run, in case
- // any pending merges are waiting:
- mergeScheduler.merge(this, MergeTrigger.CLOSING, false);
- } catch (ThreadInterruptedException tie) {
- // ignore any interruption, does not matter
- interrupted = true;
- if (infoStream.isEnabled("IW")) {
- infoStream.message("IW", "interrupted while waiting for final merges");
- }
- }
- }
-
- synchronized(this) {
- for (;;) {
- try {
- finishMerges(waitForMerges && !interrupted);
- break;
- } catch (ThreadInterruptedException tie) {
- // by setting the interrupted status, the
- // next call to finishMerges will pass false,
- // so it will not wait
- interrupted = true;
- if (infoStream.isEnabled("IW")) {
- infoStream.message("IW", "interrupted while waiting for merges to finish");
- }
- }
- }
- stopMerges = true;
- }
-
- } finally {
- // shutdown policy, scheduler and all threads (this call is not interruptible):
- IOUtils.closeWhileHandlingException(mergePolicy, mergeScheduler);
- }
- }
-
- if (infoStream.isEnabled("IW")) {
- infoStream.message("IW", "now call final commit()");
- }
-
- if (doFlush) {
- commitInternal();
- }
- processEvents(false, true);
- synchronized(this) {
- // commitInternal calls ReaderPool.commit, which
- // writes any pending liveDocs from ReaderPool, so
- // it's safe to drop all readers now:
- readerPool.dropAll(true);
- deleter.close();
- }
-
- if (infoStream.isEnabled("IW")) {
- infoStream.message("IW", "at close: " + segString());
- }
-
- if (writeLock != null) {
- writeLock.close(); // release write lock
- writeLock = null;
- }
- synchronized(this) {
- closed = true;
- }
- assert docWriter.perThreadPool.numDeactivatedThreadStates() == docWriter.perThreadPool.getMaxThreadStates() : "" + docWriter.perThreadPool.numDeactivatedThreadStates() + " " + docWriter.perThreadPool.getMaxThreadStates();
- } catch (OutOfMemoryError oom) {
- handleOOM(oom, "closeInternal");
- } finally {
- synchronized(this) {
- closing = false;
- notifyAll();
- if (!closed) {
- if (infoStream.isEnabled("IW")) {
- infoStream.message("IW", "hit exception while closing");
- }
- }
- }
- // finally, restore interrupt status:
- if (interrupted) Thread.currentThread().interrupt();
- }
- }
-
/** Returns the Directory used by this index. */
public Directory getDirectory() {
return directory;
@@ -1732,10 +1626,10 @@ public class IndexWriter implements Clos
* you should immediately close the writer. See <a
* href="#OOME">above</a> for details.</p>
*
- * <p><b>NOTE</b>: if you call {@link #close(boolean)}
- * with <tt>false</tt>, which aborts all running merges,
- * then any thread still running this method might hit a
- * {@link MergePolicy.MergeAbortedException}.
+ * <p><b>NOTE</b>: if you call {@link #abortMerges}, which
+ * aborts all running merges, then any thread still
+ * running this method might hit a {@link
+ * MergePolicy.MergeAbortedException}.
*
* @param maxNumSegments maximum number of segments left
* in the index after merging finishes
@@ -1863,11 +1757,10 @@ public class IndexWriter implements Clos
* you should immediately close the writer. See <a
* href="#OOME">above</a> for details.</p>
*
- * <p><b>NOTE</b>: if you call {@link #close(boolean)}
- * with <tt>false</tt>, which aborts all running merges,
- * then any thread still running this method might hit a
- * {@link MergePolicy.MergeAbortedException}.
- */
+ * <p><b>NOTE</b>: if you call {@link #abortMerges}, which
+ * aborts all running merges, then any thread still
+ * running this method might hit a {@link
+ * MergePolicy.MergeAbortedException}. */
public void forceMergeDeletes(boolean doWait)
throws IOException {
ensureOpen();
@@ -2136,7 +2029,6 @@ public class IndexWriter implements Clos
if (infoStream.isEnabled("IW") ) {
infoStream.message("IW", "rollback: infos=" + segString(segmentInfos));
}
-
assert testPoint("rollback before checkpoint");
@@ -2147,7 +2039,6 @@ public class IndexWriter implements Clos
lastCommitChangeCount = changeCount;
- processEvents(false, true);
deleter.refresh();
deleter.close();
@@ -2161,6 +2052,12 @@ public class IndexWriter implements Clos
} catch (OutOfMemoryError oom) {
handleOOM(oom, "rollbackInternal");
} finally {
+ if (!success) {
+ // Must not hold IW's lock while closing
+ // mergePolicy/Scheduler: this can lead to deadlock,
+ // e.g. TestIW.testThreadInterruptDeadlock
+ IOUtils.closeWhileHandlingException(mergePolicy, mergeScheduler);
+ }
synchronized(this) {
if (!success) {
// we tried to be nice about it: do the minimum
@@ -2174,7 +2071,7 @@ public class IndexWriter implements Clos
}
// close all the closeables we can (but important is readerPool and writeLock to prevent leaks)
- IOUtils.closeWhileHandlingException(mergePolicy, mergeScheduler, readerPool, deleter, writeLock);
+ IOUtils.closeWhileHandlingException(readerPool, deleter, writeLock);
writeLock = null;
}
closed = true;
@@ -2262,6 +2159,13 @@ public class IndexWriter implements Clos
}
}
+ /** Aborts running merges. Be careful when using this
+ * method: when you abort a long-running merge, you lose
+ * a lot of work that must later be redone. */
+ public void abortMerges() {
+ finishMerges(false);
+ }
+
private synchronized void finishMerges(boolean waitForMerges) {
if (!waitForMerges) {
@@ -2613,7 +2517,7 @@ public class IndexWriter implements Clos
* call.
*
* <p>
- * <b>NOTE</b>: if you call {@link #close(boolean)} with <tt>false</tt>, which
+ * <b>NOTE</b>: if you call {@link #abortMerges}, which
* aborts all running merges, then any thread still running this method might
* hit a {@link MergePolicy.MergeAbortedException}.
*
Modified: lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/LiveIndexWriterConfig.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/LiveIndexWriterConfig.java?rev=1585759&r1=1585758&r2=1585759&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/LiveIndexWriterConfig.java (original)
+++ lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/LiveIndexWriterConfig.java Tue Apr 8 15:34:50 2014
@@ -527,6 +527,9 @@ public class LiveIndexWriterConfig {
return sb.toString();
}
-
-
+ /** Returns the {@code matchVersion} that was provided to
+ * the constructor. */
+ public Version getMatchVersion() {
+ return matchVersion;
+ }
}
Modified: lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/MergePolicy.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/MergePolicy.java?rev=1585759&r1=1585758&r2=1585759&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/MergePolicy.java (original)
+++ lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/MergePolicy.java Tue Apr 8 15:34:50 2014
@@ -345,9 +345,9 @@ public abstract class MergePolicy implem
}
/** Thrown when a merge was explicity aborted because
- * {@link IndexWriter#close(boolean)} was called with
- * <code>false</code>. Normally this exception is
- * privately caught and suppresed by {@link IndexWriter}. */
+ * {@link IndexWriter#abortMerges} was called. Normally
+ * this exception is privately caught and suppresed by
+ * {@link IndexWriter}. */
public static class MergeAbortedException extends IOException {
/** Create a {@link MergeAbortedException}. */
public MergeAbortedException() {
Modified: lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/TestDemo.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/TestDemo.java?rev=1585759&r1=1585758&r2=1585759&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/TestDemo.java (original)
+++ lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/TestDemo.java Tue Apr 8 15:34:50 2014
@@ -53,7 +53,7 @@ public class TestDemo extends LuceneTest
String text = "This is the text to be indexed. " + longTerm;
doc.add(newTextField("fieldname", text, Field.Store.YES));
iwriter.addDocument(doc);
- iwriter.close();
+ iwriter.shutdown();
// Now search the index:
IndexReader ireader = DirectoryReader.open(directory); // read-only=true
Modified: lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/TestExternalCodecs.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/TestExternalCodecs.java?rev=1585759&r1=1585758&r2=1585759&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/TestExternalCodecs.java (original)
+++ lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/TestExternalCodecs.java Tue Apr 8 15:34:50 2014
@@ -130,7 +130,7 @@ public class TestExternalCodecs extends
}
r.close();
- w.close();
+ w.shutdown();
dir.close();
}
Modified: lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/TestMergeSchedulerExternal.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/TestMergeSchedulerExternal.java?rev=1585759&r1=1585758&r2=1585759&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/TestMergeSchedulerExternal.java (original)
+++ lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/TestMergeSchedulerExternal.java Tue Apr 8 15:34:50 2014
@@ -103,7 +103,7 @@ public class TestMergeSchedulerExternal
writer.addDocument(doc);
((MyMergeScheduler) writer.getConfig().getMergeScheduler()).sync();
- writer.close();
+ writer.shutdown();
assertTrue(mergeThreadCreated);
assertTrue(mergeCalled);
@@ -142,7 +142,7 @@ public class TestMergeSchedulerExternal
writer.addDocument(new Document());
writer.commit(); // trigger flush
writer.forceMerge(1);
- writer.close();
+ writer.shutdown();
dir.close();
}
Modified: lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/TestSearch.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/TestSearch.java?rev=1585759&r1=1585758&r2=1585759&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/TestSearch.java (original)
+++ lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/TestSearch.java Tue Apr 8 15:34:50 2014
@@ -50,7 +50,7 @@ public class TestSearch extends LuceneTe
d.add(newTextField("foo", "bar", Field.Store.YES));
writer.addDocument(d);
} finally {
- writer.close();
+ writer.shutdown();
}
IndexReader reader = DirectoryReader.open(directory);
@@ -130,7 +130,7 @@ public class TestSearch extends LuceneTe
d.add(new IntField("id", j, Field.Store.NO));
writer.addDocument(d);
}
- writer.close();
+ writer.shutdown();
IndexReader reader = DirectoryReader.open(directory);
IndexSearcher searcher = newSearcher(reader);