Lucene - Core
  1. Lucene - Core
  2. LUCENE-3365

Create or Append mode determined before obtaining write lock

    Details

    • Type: Bug Bug
    • Status: Closed
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: 3.1, 3.2, 3.3
    • Fix Version/s: 3.4, 4.0-ALPHA
    • Component/s: core/index
    • Labels:
    • Lucene Fields:
      New, Patch Available

      Description

      If an IndexWriter("writer1") is opened in CREATE_OR_APPEND mode, it determines whether to CREATE or APPEND before obtaining the write lock. When another IndexWriter("writer2") is in the process of creating the index, this can result in writer1 entering create mode and then waiting to obtain the lock. When writer2 commits and releases the lock, writer1 is already in create mode and overwrites the index created by write2.

      This bug was probably effected by LUCENE-2386 as prior to that Lucene generated an empty commit when a new index was created. I think the issue could still have occurred prior to that but the two IndexWriters would have needed to be opened nearly simultaneously and the first IndexWriter would need to release the lock before the second timed out.

      1. LUCENE-3365.patch
        5 kB
        Simon Willnauer
      2. LUCENE-3365.patch
        6 kB
        Geoff Cooney

        Activity

        Hide
        Geoff Cooney added a comment -

        I'm uploading a patch that contains a test that demonstrates this issue as well as a proposed fix.

        The proposed fix is simply to move the create or append decision a step lower so it occurs after the lock is obtained.

        Show
        Geoff Cooney added a comment - I'm uploading a patch that contains a test that demonstrates this issue as well as a proposed fix. The proposed fix is simply to move the create or append decision a step lower so it occurs after the lock is obtained.
        Hide
        Simon Willnauer added a comment -

        hey Geoff, thanks for reporting and fixing this. I updated your patch to trunk (4.0) and simplyfied the testcase a little (no busy waiting etc) I am planning to commit this soon to trunk and backport to 3.x

        thanks!

        Show
        Simon Willnauer added a comment - hey Geoff, thanks for reporting and fixing this. I updated your patch to trunk (4.0) and simplyfied the testcase a little (no busy waiting etc) I am planning to commit this soon to trunk and backport to 3.x thanks!
        Hide
        Simon Willnauer added a comment -

        committed to trunk & backported to 3.x

        thanks geoff!

        Show
        Simon Willnauer added a comment - committed to trunk & backported to 3.x thanks geoff!
        Hide
        Geoff Cooney added a comment -

        Glad I could help!

        Show
        Geoff Cooney added a comment - Glad I could help!

          People

          • Assignee:
            Simon Willnauer
            Reporter:
            Geoff Cooney
          • Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved:

              Development