[ https://issues.apache.org/jira/browse/LUCENE-1374?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12628067#action_12628067 ]
Michael McCandless commented on LUCENE-1374: -------------------------------------------- Woops, you're right: I too see that failure (to rmDir the directory) only on Windows. I'll commit a fix. Thanks Chris! > Merging of compressed string Fields may hit NPE > ----------------------------------------------- > > Key: LUCENE-1374 > URL: https://issues.apache.org/jira/browse/LUCENE-1374 > Project: Lucene - Java > Issue Type: Bug > Components: Index > Affects Versions: 2.4 > Reporter: Michael McCandless > Assignee: Michael McCandless > Fix For: 2.4 > > Attachments: LUCENE-1374.patch > > > This bug was introduced with LUCENE-1219 (only present on 2.4). > The bug happens when merging compressed string fields, but only if > bulk-merging code does not apply because the FieldInfos for the segment being > merged are not congruent. This test shows the bug: > {code} > public void testMergeCompressedFields() throws IOException { > File indexDir = new File(System.getProperty("tempDir"), > "mergecompressedfields"); > Directory dir = FSDirectory.getDirectory(indexDir); > try { > for(int i=0;i<5;i++) { > // Must make a new writer & doc each time, w/ > // different fields, so bulk merge of stored fields > // cannot run: > IndexWriter w = new IndexWriter(dir, new WhitespaceAnalyzer(), i==0, > IndexWriter.MaxFieldLength.UNLIMITED); > w.setMergeFactor(5); > w.setMergeScheduler(new SerialMergeScheduler()); > Document doc = new Document(); > doc.add(new Field("test1", "this is some data that will be compressed > this this this", Field.Store.COMPRESS, Field.Index.NO)); > doc.add(new Field("test2", new byte[20], Field.Store.COMPRESS)); > doc.add(new Field("field" + i, "random field", Field.Store.NO, > Field.Index.TOKENIZED)); > w.addDocument(doc); > w.close(); > } > byte[] cmp = new byte[20]; > IndexReader r = IndexReader.open(dir); > for(int i=0;i<5;i++) { > Document doc = r.document(i); > assertEquals("this is some data that will be compressed this this > this", doc.getField("test1").stringValue()); > byte[] b = doc.getField("test2").binaryValue(); > assertTrue(Arrays.equals(b, cmp)); > } > } finally { > dir.close(); > _TestUtil.rmDir(indexDir); > } > } > {code} > It's because in FieldsReader, when we load a field "for merge" we create a > FieldForMerge instance which subsequently does not return the right values > for getBinary{Value,Length,Offset}. -- 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]