[ 
https://issues.apache.org/jira/browse/LUCENE-4583?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13656831#comment-13656831
 ] 

Robert Muir commented on LUCENE-4583:
-------------------------------------

I can compromise with this. 

However, I don't like the current patch.

I don't think we should modify ByteBlockPool. Instead, I think 
BinaryDocValuesWriter should do the following:
* use PagedBytes to append the bytes (which has append-only writing, via 
getDataOutput)
* implement the iterator with PagedBytes.getDataInput (its just an iterator so 
this is simple)
* store the lengths instead as absolute offsets with 
MonotonicAppendingLongBuffer (this should be more efficient)

The only thing ByteBlockPool gives is some "automagic" ram accounting, but this 
is not as good as it looks anyway.
* today, it seems to me ram accounting is broken for this dv type already (the 
lengths are not considered or am i missing something!?)
* since we need to fix that bug anyway (by just adding updateBytesUsed like the 
other consumers), the magic accounting buys us nothing really anyway.

Anyway I can help with this, tomorrow.

                
> StraightBytesDocValuesField fails if bytes > 32k
> ------------------------------------------------
>
>                 Key: LUCENE-4583
>                 URL: https://issues.apache.org/jira/browse/LUCENE-4583
>             Project: Lucene - Core
>          Issue Type: Bug
>          Components: core/index
>    Affects Versions: 4.0, 4.1, 5.0
>            Reporter: David Smiley
>            Priority: Critical
>             Fix For: 4.4
>
>         Attachments: LUCENE-4583.patch, LUCENE-4583.patch, LUCENE-4583.patch
>
>
> I didn't observe any limitations on the size of a bytes based DocValues field 
> value in the docs.  It appears that the limit is 32k, although I didn't get 
> any friendly error telling me that was the limit.  32k is kind of small IMO; 
> I suspect this limit is unintended and as such is a bug.    The following 
> test fails:
> {code:java}
>   public void testBigDocValue() throws IOException {
>     Directory dir = newDirectory();
>     IndexWriter writer = new IndexWriter(dir, writerConfig(false));
>     Document doc = new Document();
>     BytesRef bytes = new BytesRef((4+4)*4097);//4096 works
>     bytes.length = bytes.bytes.length;//byte data doesn't matter
>     doc.add(new StraightBytesDocValuesField("dvField", bytes));
>     writer.addDocument(doc);
>     writer.commit();
>     writer.close();
>     DirectoryReader reader = DirectoryReader.open(dir);
>     DocValues docValues = MultiDocValues.getDocValues(reader, "dvField");
>     //FAILS IF BYTES IS BIG!
>     docValues.getSource().getBytes(0, bytes);
>     reader.close();
>     dir.close();
>   }
> {code}

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to