BitDocSet can get corrupt size info?
------------------------------------

         Key: SOLR-22
         URL: http://issues.apache.org/jira/browse/SOLR-22
     Project: Solr
        Type: Bug

    Reporter: Hoss Man


I don't have a test case demonstrating this yet, but i wnated to file it before 
i forget.

Glancing at the code for BitDocSet this morning i think i see a way for the 
size information (which is cached) to be corrupted.

If a client tries to be helpful by using addUnique when it knows it can, but 
the size cache is already invalid, then the size will be recorded incorrectly 
as 0 (which will now be considered a valid (but incorect) size, which may be 
further trusted for additional addUnique calls)

ie...
    DocSet a = ...                   # get a BitDocSet from somewhere
    a.add(42);                        # this internal sets size=-1 since we 
don't know if 42 was alreayd set so we don't trust the cache
    if (! a.exists(666) ) {
       ...                                   # client does it's thing
       a.addUnique(666);        # client tries to be helpfull, but at this 
point size is incrimented to 0, making it a legal value
    }
    int s = a.size();                # bogus 0 is returned.


the most straight forward fix may be to decouple a boolean indicating wether 
the cached value is valid from the actual cached value.



-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira

Reply via email to