Uploaded image for project: 'Lucene - Core'
  1. Lucene - Core
  2. LUCENE-1544

Deadlock: IndexWriter.addIndexes(IndexReader[])

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 2.4
    • 2.4.1, 2.9
    • core/index
    • None
    • should be ubiquitous... but, Win XP on a MacBookPro (Intel) under Eclipse (Ganymede) using default compiler/runtime

    • New

    Description

      A deadlock issue occurs under the following circumstances

      • IndexWriter.autoCommit == true
      • IndexWriter.directory contains multiple segments
      • IndexWriter.AddIndex(IndexReader[]) is invoked

      I put together a JUnit test that recreates the deadlock, which I've attached. It is the first test method, 'testAddIndexByIndexReader()'.

      In a nutshell, here is what happens:

      // 1) AddIndexes(IndexReader[]) acquires the write lock,
      // then begins optimization of destination index (this is
      // prior to adding any external segments).
      //
      // 2) Main thread starts a ConcurrentMergeScheduler.MergeThread
      // to merge the 2 segments.
      //
      // 3) Merging thread tries to acquire the read lock at
      // IndexWriter.blockAddIndexes(boolean) in
      // IndexWriter.StartCommit(), but cannot as...
      //
      // 4) Main thread still holds the write lock, and is
      // waiting for the IndexWriter.runningMerges data structure
      // to be devoid of merges with their optimize flag
      // set (IndexWriter.optimizeMergesPending()).

      Attachments

        1. LUCENE-1544.patch
          6 kB
          Michael McCandless
        2. TestAddIndexes.java
          6 kB
          Doug Sale

        Activity

          People

            mikemccand Michael McCandless
            dougsale Doug Sale
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: