Whoops, send with no content -- fumble-fingered.
On 4 April 2017 at 12:43, Chris Dollin <chris.dol...@epimorphics.com> wrote: > > > On 4 April 2017 at 09:37, Chris Dollin <chris.dol...@epimorphics.com> > wrote: > >> I ran a simplified version of the test code, with no >> sort but with a limit, and could not produce warnings. >> > Well of course not, it needs sort + small limit to involve TopN. Chris > So I'd not do anything to change TopN unless/until we >> have more warnings to work with. >> >> Have we stabilised enough that I turn this into a JIRA/PR with >> a unit test? >> >> Chris >> >> >> On 3 April 2017 at 15:34, Chris Dollin <chris.dol...@epimorphics.com> >> wrote: >> >>> Argh, yes, all occurences of "open()" are supposed >>> to be "close()". >>> >>> | Have you seen warnings in the TopN case? >>> >>> I haven't got an isolated TopN test case but it has a similar >>> pattern of keeping references to the source iterator but >>> not closing via them. >>> >>> I can construct an example and see what happens. >>> >>> Chris >>> >>> >>> >>> >>> >>> On 3 April 2017 at 11:15, Andy Seaborne <a...@apache.org> wrote: >>> >>>> >>>> >>>> On 31/03/17 16:40, Chris Dollin wrote: >>>> >>>>> Hi Andy >>>>> >>>>> Yes, the cancel thread doesn't call open(), I understand >>>>> that. >>>>> >>>> >>>> is that "close()" not "open()"? >>>> >>>> The warnings are intermittent because the iterator >>>>> in question (the "source" interator of QueryIterSort) >>>>> is only left open if the cancel request is noticed while >>>>> the sort databag is filling up. >>>>> >>>>> QueryIterSort never explicitly closes the source >>>>> iterator. But if the sort databag pulls all of the >>>>> source bindings, the source iterator self-closes. >>>>> So there's a window while the bag is filling when >>>>> a detected cancellation will leave the source >>>>> iterator open. >>>>> >>>>> A fix is to ensure that the source iterator >>>>> is closed when QueryIterSort closes: >>>>> >>>>> @Override public void closeIterator() { >>>>> >>>> >>>> and also: >>>> >>>> this.db.close(); >>>> >>>> c.f. requestCancel >>>> >>>> embeddedIterator.close(); >>>>> super.closeIterator(); >>>>> } >>>>> >>>>> "embeddedIterator" is the source iterator. >>>>> >>>> >>>> SortedDataBag: add close() to cancel: >>>> >>>> public void cancel() { >>>> comparator.cancel(); >>>> close(); >>>> } >>>> >>>> >>>> >>>>> This fix eliminates the presenting problem and >>>>> the tests continue to pass /except/ that >>>>> CallBackIterator's close() method needs to >>>>> be made a no-op rather than failing, since >>>>> that open() is now actually called. >>>>> >>>> >>>> close()? >>>> >>>> >>>>> [It looks like QueryIterTopN has the same problem] >>>>> >>>> >>>> It would do no harm to have the same close processing in QueryIterTopN >>>> though it does not use data bags because it is an unconditional single pass >>>> over the data. >>>> >>>> Have you seen warnings in the TopN case? >>>> >>>> Andy >>>> >>>> >>>> >>>>> Chris >>>>> >>>>> >>>>> >>>>> On 20 March 2017 at 15:48, Chris Dollin <chris.dol...@epimorphics.com> >>>>> wrote: >>>>> >>>>> On 17 March 2017 at 17:08, Andy Seaborne <a...@apache.org> wrote: >>>>>> >>>>>> >>>>>>> SortedDataBag.cancel does not call close. >>>>>>> >>>>>>> >>>>>> You're quite right, am having another look at the problem. >>>>>> >>>>>> Chris >>>>>> >>>>>> >>>>> >>>>> >>>>> >>> >>> >>> -- >>> "What I don't understand is this ..." Trevor Chaplin, /The Beiderbeck >>> Affair/ >>> >>> Epimorphics Ltd, http://www.epimorphics.com >>> Registered address: Court Lodge, 105 High Street, Portishead, Bristol >>> BS20 6PT >>> Epimorphics Ltd. is a limited company registered in England (number >>> 7016688) >>> >> >> >> >> -- >> "What I don't understand is this ..." Trevor Chaplin, /The Beiderbeck >> Affair/ >> >> Epimorphics Ltd, http://www.epimorphics.com >> Registered address: Court Lodge, 105 High Street, Portishead, Bristol >> BS20 6PT >> Epimorphics Ltd. is a limited company registered in England (number >> 7016688) >> > > > > -- > "What I don't understand is this ..." Trevor Chaplin, /The Beiderbeck > Affair/ > > Epimorphics Ltd, http://www.epimorphics.com > Registered address: Court Lodge, 105 High Street, Portishead, Bristol BS20 > 6PT > Epimorphics Ltd. is a limited company registered in England (number > 7016688) > -- "What I don't understand is this ..." Trevor Chaplin, /The Beiderbeck Affair/ Epimorphics Ltd, http://www.epimorphics.com Registered address: Court Lodge, 105 High Street, Portishead, Bristol BS20 6PT Epimorphics Ltd. is a limited company registered in England (number 7016688)