I think, SuportClass.patch is correct but revealed a hidden bug in DocumentsWriter. (Last comment in https://issues.apache.org/jira/browse/LUCENENET-135)
DIGY -----Original Message----- From: Doug Sale [mailto:[EMAIL PROTECTED] Sent: Friday, August 08, 2008 9:52 PM To: [email protected] Subject: Re: [jira] Commented: (LUCENENET-135) Race condition in DocumentsWriter.UpdateDocument 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) <[EMAIL PROTECTED]> wrote: > > [ > https://issues.apache.org/jira/browse/LUCENENET-135?page=com.atlassian.jira. plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12620982#acti on_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. > >
