FieldsReader Thread Safety
--------------------------

                 Key: LUCENE-1033
                 URL: https://issues.apache.org/jira/browse/LUCENE-1033
             Project: Lucene - Java
          Issue Type: Bug
          Components: Search
    Affects Versions: 2.2
         Environment: Java SDK 1.5.X, Linux & FreeBSD
            Reporter: Michael Klatt
            Priority: Minor


>From what I've read, the IndexSearcher is supposed to be thread safe.  
>However, I don't think that the FieldsReader class (used by the IndexReader, 
>and in turn used by the IndexSearcher) is thread safe.  I have one 
>IndexSearcher that I use with all my threads, and what appears to happen in 
>Lucene 2.2 is that the same FieldsReader object is shared by all threads.  The 
>private "fieldStream" and "indexStream" attributes both have file pointers 
>which makes them not thread-safe.

For instance, in the "doc" method of FieldsReader:

    fieldsStream.seek(position);

    Document doc = new Document();
    int numFields = fieldsStream.readVInt();
    for (int i = 0; i < numFields; i++) {
      int fieldNumber = fieldsStream.readVInt();
      FieldInfo fi = fieldInfos.fieldInfo(fieldNumber);
      FieldSelectorResult acceptField = fieldSelector == null ? 
FieldSelectorResult.LOAD : fieldSelector.accept(fi.name);

Another thread can seek to another position, so the readVInt calls are reading 
the wrong location in the stream.  This is a race condition and only shows up 
when a lot of document field data is being read.  When I synchronized the doc 
method, the problem went away.  Another solution would be to use separate 
IndexSearchers, or to clone the FIeldsReader for each thread (I have not 
investigated either solution).

I encountered this on Lucene 2.2, but I think the problem is still in the 
trunk.  I was making a modification to the source code which caused the problem 
to be exaggerated, otherwise I probably wouldn't have discovered it.




-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


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

Reply via email to