lucenenet-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Doug Sale" <dougs...@gmail.com>
Subject Re: [jira] Commented: (LUCENENET-135) Race condition in DocumentsWriter.UpdateDocument
Date Fri, 08 Aug 2008 18:51:46 GMT
After applying the SuportClass.patch (prior to the commits to HEAD
yesterday), IndexWriter.TestDocumentsWriterExceptionThreads() passed and
IndexWriter.TestDiverseDocs() failed.  Additionally,
TestPayloads.TestThreadSafety() passed (which was failing before).  However,
there were still issues with TestThreadSafety(), as evidenced by all the
exceptions being thrown.

I will check out the status of the SupportClass.patch with the latest HEAD
shortly.

On Fri, Aug 8, 2008 at 12:29 PM, Digy (JIRA) <jira@apache.org> wrote:

>
>    [
> https://issues.apache.org/jira/browse/LUCENENET-135?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12620982#action_12620982]
>
> Digy commented on LUCENENET-135:
> --------------------------------
>
> Hi,
>
>  1) SupportClass.patch fixes
> "Index/TestIndexWriter/TestDocumentsWriterExceptionThreads"
>  2) In fact , There is no race condition  in DocumentsWriter(at least for
> now). It all started when I saw two threads entering the "GetThreadState" at
> the same time which is a synchronized method. So, I falsely determined that
> it was a race condition.  And finally, It turned out to be a bug in
> ThreadClass.
>
> ThreadClass'es static "Current" method always returns a new instance of
> ThreadClass,
> and because it is used as a key to HashTable
> "threadBindings"(DocumentsWriter.GetThreadState),
> {code}
> ThreadState state = (ThreadState)
> threadBindings[SupportClass.ThreadClass.Current()];
> if (state == null)
> {
>   ...
>   threadBindings[SupportClass.ThreadClass.Current()] = state;
> }
> {code}
> "State==null" never gets false and ,everytime, initializations of the
> first-time call are made.
>
> I think the patch is correct. But after applying that patch the following
> simple test case fails with an exception "Index was outside the bounds of
> the array".
> {code}
> [Test]
>        public void TestIndexWriter1()
>        {
>            RAMDirectory dir = new RAMDirectory();
>            IndexWriter wr = new IndexWriter(dir,new WhitespaceAnalyzer(),
> true);
>            wr.SetRAMBufferSizeMB(0.1);
>
>            Document doc = new Document();
>            Field f1 = new Field("field1", "", Field.Store.YES,
> Field.Index.TOKENIZED);
>            doc.Add(f1);
>
>            for (int i = 0; i < 200000; i++)
>            {
>                f1.SetValue("some text, some more text,some text, some more
> text,some text, some more text,");
>
>                try
>                {
>                    wr.AddDocument(doc);
>                    //if (i % 100 == 0) wr.Flush(); //Make that pass
>                }
>                catch (Exception ex)
>                {
>                    Console.WriteLine("loop:" + i + "\n" + ex.Message + "\n"
> + ex.StackTrace);
>                    throw ex;
>                }
>
>            }
>            wr.Close();
>        }
> {code}
> *Any Idea?*
>
> PS1:*Uncommenting Flush statement in the code makes that test pass*
>
> PS2: If you decide to close this issue, please take a look at the
> DocumentsWriter.patch(which has nothing to do with any test case but applied
> to Lucene.java after the release of 2.3.1)
>
>
> DIGY
>
> > Race condition in DocumentsWriter.UpdateDocument
> > ------------------------------------------------
> >
> >                 Key: LUCENENET-135
> >                 URL: https://issues.apache.org/jira/browse/LUCENENET-135
> >             Project: Lucene.Net
> >          Issue Type: Bug
> >         Environment: 2.3.1
> >            Reporter: Digy
> >         Attachments: DocumentsWriter+SupportClass.rar,
> DocumentsWriter-Temp.patch, DocumentsWriter.patch, DocumentsWriter.patch,
> SupportClass.patch, SupportClass.patch
> >
> >
> > There is a race condition in DocumentsWriter.UpdateDocument. Locking the
> whole method solves the problem but this is not what  is intended in java
> version
> > (testcase:  Index/TestIndexWriter/TestDocumentsWriterExceptionThreads)
> > I am working on it.
> > DIGY
>
> --
> This message is automatically generated by JIRA.
> -
> You can reply to this email to add a comment to the issue online.
>
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message