goller      2004/08/06 05:21:24

  Modified:    src/java/org/apache/lucene/index IndexWriter.java
  Log:
  addIndexes(IndexReader[]): Delete segment of non-empty
  goal index an close its SegmentReader
  
  Revision  Changes    Path
  1.34      +13 -4     jakarta-lucene/src/java/org/apache/lucene/index/IndexWriter.java
  
  Index: IndexWriter.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-lucene/src/java/org/apache/lucene/index/IndexWriter.java,v
  retrieving revision 1.33
  retrieving revision 1.34
  diff -u -r1.33 -r1.34
  --- IndexWriter.java  5 Aug 2004 18:00:13 -0000       1.33
  +++ IndexWriter.java  6 Aug 2004 12:21:24 -0000       1.34
  @@ -400,11 +400,16 @@
       optimize();                                        // start with zero or 1 seg
   
       String mergedName = newSegmentName();
  -    SegmentMerger merger = new SegmentMerger(directory, mergedName, false);
  -
  -    if (segmentInfos.size() == 1)                 // add existing index, if any
  -      merger.add(new SegmentReader(segmentInfos.info(0)));
  +    SegmentMerger merger = new SegmentMerger(directory, mergedName, 
useCompoundFile);
   
  +    final Vector segmentsToDelete = new Vector();
  +    IndexReader sReader = null;
  +    if (segmentInfos.size() == 1){ // add existing index, if any
  +        sReader = new SegmentReader(segmentInfos.info(0));
  +        merger.add(sReader);
  +        segmentsToDelete.addElement(sReader);   // queue segment for deletion
  +    }
  +      
       for (int i = 0; i < readers.length; i++)      // add new indexes
         merger.add(readers[i]);
   
  @@ -412,11 +417,15 @@
   
       segmentInfos.setSize(0);                      // pop old infos & add new
       segmentInfos.addElement(new SegmentInfo(mergedName, docCount, directory));
  +    
  +    if(sReader != null)
  +        sReader.close();
   
       synchronized (directory) {                         // in- & inter-process sync
         new Lock.With(directory.makeLock("commit.lock"), COMMIT_LOCK_TIMEOUT) {
          public Object doBody() throws IOException {
            segmentInfos.write(directory);        // commit changes
  +         deleteSegments(segmentsToDelete);  // delete now-unused segments
            return null;
          }
        }.run();
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to