[ https://issues.apache.org/jira/browse/SOLR-13199?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17056243#comment-17056243 ]
David Smiley commented on SOLR-13199: ------------------------------------- {quote}what about a segment with no hits? Presumably it may occurs between regular ones {quote} No, a nested document set is committed atomically; it is not split to other segments. Solr flattens the nest then supplies the list to Lucene which +guarantees+ this. {quote}One case where query could be null even if parentFilter is specified filter is defined on text field and value is stopword {quote} The dev user is then not using an appropriate query. It's mandatory that at least one document in a non-empty index be a parent; otherwise we don't actually have a nested index which is also the dev user's fault if true. {quote}Suppose, user is also using pagination. Fist page returns properly, there is one such parent product which fits the bill and we throw an exception. {quote} I suspect you are not familiar with how nested documents work and/or this particular DocTransformer. The use-case for a child doc transformer is when the master query matches only parent documents but you want to see their children in the response, attached to it. What the user pages through are parent documents; they only see parent documents. If somehow there is some use case where throwing an exception would inhibit a use case we have never thought of, I insist we wait until such a use-case actually presents itself. Otherwise, we are failing to inform the user that they are very probably making a mistake. {quote}Also, I have question if someone uses nestPathField approach(defined in the schema) but doesn't have any children for parents what does childTransformer return? Does it fail the request with valid error or return just the parent products? {quote} What is the "it" in "Does it fail ..." refer to? You probably refer to ChildDocTransformer. It attaches no child documents to the parent because there aren't any (perfectly valid!). It would not "return parents" but I think you maybe mean would the master query return parents. What the master query returns is whatever your q/fq match and is not something the transformer affects. > NPE due to unexpected null return value from QueryBitSetProducer.getBitSet > -------------------------------------------------------------------------- > > Key: SOLR-13199 > URL: https://issues.apache.org/jira/browse/SOLR-13199 > Project: Solr > Issue Type: Bug > Components: search > Affects Versions: master (9.0) > Environment: h1. Steps to reproduce > * Use a Linux machine. > * Build commit {{ea2c8ba}} of Solr as described in the section below. > * Build the films collection as described below. > * Start the server using the command {{./bin/solr start -f -p 8983 -s > /tmp/home}} > * Request the URL given in the bug description. > h1. Compiling the server > {noformat} > git clone https://github.com/apache/lucene-solr > cd lucene-solr > git checkout ea2c8ba > ant compile > cd solr > ant server > {noformat} > h1. Building the collection > We followed [Exercise > 2|http://lucene.apache.org/solr/guide/7_5/solr-tutorial.html#exercise-2] from > the [Solr > Tutorial|http://lucene.apache.org/solr/guide/7_5/solr-tutorial.html]. The > attached file ({{home.zip}}) gives the contents of folder {{/tmp/home}} that > you will obtain by following the steps below: > {noformat} > mkdir -p /tmp/home > echo '<?xml version="1.0" encoding="UTF-8" ?><solr></solr>' > > /tmp/home/solr.xml > {noformat} > In one terminal start a Solr instance in foreground: > {noformat} > ./bin/solr start -f -p 8983 -s /tmp/home > {noformat} > In another terminal, create a collection of movies, with no shards and no > replication, and initialize it: > {noformat} > bin/solr create -c films > curl -X POST -H 'Content-type:application/json' --data-binary '{"add-field": > {"name":"name", "type":"text_general", "multiValued":false, "stored":true}}' > http://localhost:8983/solr/films/schema > curl -X POST -H 'Content-type:application/json' --data-binary > '{"add-copy-field" : {"source":"*","dest":"_text_"}}' > http://localhost:8983/solr/films/schema > ./bin/post -c films example/films/films.json > {noformat} > Reporter: Johannes Kloos > Assignee: Munendra S N > Priority: Minor > Labels: diffblue, newdev > Attachments: SOLR-13199.patch, home.zip > > > Requesting the following URL causes Solr to return an HTTP 500 error response: > {noformat} > http://localhost:8983/solr/films/select?fl=[child%20parentFilter=ge]&q=*:* > {noformat} > The error response seems to be caused by the following uncaught exception: > {noformat} > java.lang.NullPointerException > at > org.apache.solr.response.transform.ChildDocTransformer.transform(ChildDocTransformer.java:92) > at org.apache.solr.response.DocsStreamer.next(DocsStreamer.java:103) > at org.apache.solr.response.DocsStreamer.next(DocsStreamer.java:1) > at > org.apache.solr.response.TextResponseWriter.writeDocuments(TextResponseWriter.java:184) > at > org.apache.solr.response.TextResponseWriter.writeVal(TextResponseWriter.java:136) > at > org.apache.solr.common.util.JsonTextWriter.writeNamedListAsMapWithDups(JsonTextWriter.java:386) > at > org.apache.solr.common.util.JsonTextWriter.writeNamedList(JsonTextWriter.java:292) > at org.apache.solr.response.JSONWriter.writeResponse(JSONWriter.java:73) > {noformat} > In ChildDocTransformer.transform, we have the following lines: > {noformat} > final BitSet segParentsBitSet = parentsFilter.getBitSet(leafReaderContext); > final int segPrevRootId = segRootId==0? -1: > segParentsBitSet.prevSetBit(segRootId - 1); // can return -1 and that's okay > {noformat} > But getBitSet can return null if the set of DocIds is empty: > {noformat} > return docIdSet == DocIdSet.EMPTY ? null : ((BitDocIdSet) docIdSet).bits(); > {noformat} > We found this bug using [Diffblue Microservices > Testing|https://www.diffblue.com/labs/?utm_source=solr-br]. Find more > information on this [fuzz testing > campaign|https://www.diffblue.com/blog/2018/12/19/diffblue-microservice-testing-a-sneak-peek-at-our-early-product-and-results?utm_source=solr-br]. -- This message was sent by Atlassian Jira (v8.3.4#803005) --------------------------------------------------------------------- To unsubscribe, e-mail: issues-unsubscr...@lucene.apache.org For additional commands, e-mail: issues-h...@lucene.apache.org