Hi all, given Adrien's limited availability, Chris and I flipped a coin and decided that I will be the release manager for Lucene 10. branch_10x and branch_10_0 have already been created. I will follow up with the first RC tomorrow.
On Mon, Sep 30, 2024 at 5:14 PM Adrien Grand <jpou...@gmail.com> wrote: > FYI I have little availability this week so Luca and Chris offered to help > with the release. Thank you both! > > Le sam. 14 sept. 2024, 18:07, Luca Cavanna <java...@apache.org> a écrit : > >> On the topic of removing search(Query, Collector), I think it is unlikely >> that we will be able to complete that task before the Lucene 10 branch is >> cut. It would be nice to still work on the remaining issues, but it's >> probably good to have less urgency around it hence more time to think about >> how to properly address the remaining issues. I think that removing a >> deprecated method leaving users without a proper replacement is not a good >> trade-off. >> >> I have an outstanding PR around CollectorManager#forSequentialExecution, >> based on the risk I described in my previous message.I am now concluding >> that it would be safer to remove such a public method from branch_9x before >> it gets released. I described the reason in the PR I just opened: >> https://github.com/apache/lucene/pull/13790 . I'd like to know what >> folks think about this. I myself have changed my mind a few times on the >> topic. >> >> On Thu, Sep 12, 2024 at 10:09 PM Michael Froh <msf...@gmail.com> wrote: >> >>> Aha! I realized that I was totally misreading some stacktraces while >>> debugging some of the Join tests. You're absolutely right that a >>> ScorerSupplier is created for each doc ID range -- not just the Scorer. >>> Also, the test that I "helped" Vamsi with didn't really get fixed by moving >>> construction of the TermsEnum into the get() method -- it just didn't >>> happen to fail that time. *facepalm* >>> >>> Please ignore my unfounded panic :D >>> >>> Thanks, >>> Froh >>> >>> On Thu, Sep 12, 2024 at 1:33 AM Luca Cavanna <java...@apache.org> wrote: >>> >>>> Thanks for raising this Michael. >>>> >>>> I see a risk as well around removing the deprecated search(Query, >>>> Collector) method by using a sequential collector manager. Previously, we >>>> would happily execute sequentially despite an executor being provided to >>>> the searcher (because search(Query, Collector) bypasses concurrency >>>> entirely). After the migration, we would execute concurrently, hence the >>>> collector manager would throw an exception as soon as more than one slice >>>> gets searched. The sequential collector manager can be used in tests to >>>> overcome the lack of a collector manager, but that only moves the problem >>>> to the user side: what are users of these collectors going to do given they >>>> need a collector manager to call search, and we don't provide one? Their >>>> only option would be to not set an executor to their searcher. Maybe it is >>>> a possibility to clearly document that but is it acceptable to require >>>> users to have a non concurrent index searcher instance around to use for >>>> non concurrent queries? There's only a few cases of this fortunately. >>>> There's also a couple of cases like QueryUtils and JoinUtil where we have >>>> utility methods that call search internally and accept an external >>>> searcher. Those searchers may have an executor set to them, and the only >>>> safe way to migrate these is to add concurrent collector managers support >>>> or explicitly state that the provided search shouldn't have an executor set >>>> to it. Another option if we are not happy with the workaround I mentioned, >>>> is to consider leaving search(Query, Collector) deprecated in Lucene 10 and >>>> removing it in Lucene 11. It is a shame because we are not far off, but I >>>> am not sure that this warrants delaying the release. >>>> I am not entirely sure how this aligns with the risk you mentioned, >>>> which cases of SimpleCollector are you referring to specifically? >>>> >>>> Regarding your second concern around intra-segment concurrency: while I >>>> had to adapt a couple of tests to be intra-segment ready as they made wrong >>>> assumptions, we are now leveraging intra-segment concurrency in all tests >>>> (provided that the searcher is created using LuceneTestCase#newSearcher), >>>> besides when DrillSideways is used. I have seen a couple of post-merge >>>> failures that may be related which I will look into, but nothing that would >>>> suggest that the design is entirely problematic. When you retrieve a scorer >>>> supplier or a bulk scorer you provide a LeafReaderContext. The overall >>>> expectation is that you get a different instance each time, regardless of >>>> whether you have already seen the segment or not. If that is the case there >>>> is no state shared between threads, because ScorerSuppliers should not get >>>> shared across threads? It is not the expectation that the support for >>>> intra-segment concurrency requires bulk scorers and scorer suppliers to >>>> become thread-safe. >>>> With that in mind, I checked DefaultScorerSupplier and I do not see why >>>> it would not work, as long as each call to retrieve a scorer supplier >>>> returns a new instance of if that points to a new instance of Scorer, which >>>> holds state created as part of that same scorerSupplier call. The problem >>>> that we have is that we duplicate ahead of time work for partitions of the >>>> same segment (tracked in https://github.com/apache/lucene/issues/13745), >>>> because if we need to pull doc_values, we will do so for the same segment >>>> multiple times. I would assume that if something is off with >>>> DefaultScorerSupplier, tests would show that clearly, as it is widely used. >>>> I also checked FeatureQuery, and I see that each call to >>>> scorerSupplier(LeafReaderContext) returns a new instance of the supplier >>>> which points to different TermsEnum instance retrieved multiple times for >>>> the same segment. Removing this duplication will require additional work, >>>> and there will be bugs, or incorrect assumptions made in existing scorer >>>> supplier instances, but those should not be too hard to fix. >>>> Does this make sense to you? Perhaps there are additional changes to >>>> make in the migrate guide or javadocs to clarify what I described, let me >>>> know what you think. >>>> >>>> Cheers >>>> Luca >>>> >>>> On Thu, Sep 12, 2024 at 9:42 AM Michael Froh <msf...@gmail.com> wrote: >>>> >>>>> Oh, I forgot to mention: >>>>> >>>>> I think we should deprecate the DefaultScorerSupplier constructor that >>>>> takes a Scorer. There's no way that works with intra-segment concurrency. >>>>> >>>>> Maybe we remove DefaultScorerSupplier altogether? >>>>> >>>>> On Thu, Sep 12, 2024 at 12:35 AM Michael Froh <msf...@gmail.com> >>>>> wrote: >>>>> >>>>>> I'm a big fan of both of Luca's topics. I'd like to raise a small red >>>>>> flag around them, though, since they seem to be connected. >>>>>> >>>>>> Working through the join module and helping my colleague @harshavamsi >>>>>> on the QueryUtils side, I see two layers of unpreparatedness for the >>>>>> modern >>>>>> "concurrency first" architecture. (Again, I want to make clear that I >>>>>> think >>>>>> the modern architecture is the way to go and we can and should get there >>>>>> in >>>>>> time for Lucene 10.) >>>>>> >>>>>> 1. There are several uses of SimpleCollector, where it's assumed that >>>>>> one collector will collect all results on a single thread. With the >>>>>> deprecated method, this forces single-threaded behavior all the time. In >>>>>> my >>>>>> opinion, these represent 13+ year technical debt for cases where you >>>>>> couldn't properly use an IndexSearcher to do concurrent searches. >>>>>> 2. With the merge of intra-segment searches, we have another layer: >>>>>> ScorerSuppliers that share mutable state across the Scorers that they >>>>>> produce. For example, @harshavamsi came across a case today in the >>>>>> sigmoid >>>>>> function for FeatureQuery where a TermsEnum was created in the >>>>>> ScorerSupplier and passed into the Scorers. Each Scorer shared the same >>>>>> TermsEnum. What changed? In the old concurrency model, one thread might >>>>>> search a few segments, but each segment was guaranteed to only be >>>>>> searched >>>>>> by one thread. Now, with intra-segment concurrency, we produce one >>>>>> ScorerSupplier per segment, but may produce multiple Scorers across >>>>>> different threads. If the ScorerSupplier produces some mutable object and >>>>>> shares it across the resulting Scorers, you're going to have a bad time. >>>>>> Fun fact: back in 2012, we had an office Halloween party and I dressed as >>>>>> the thing that scares me the most. I printed a picture of Texas (since >>>>>> everyone recognizes Texas) with a TV remote control mute button in the >>>>>> middle. I sewed it to my shirt in the four corners. It was mutable state >>>>>> held by multiple threads. >>>>>> >>>>>> I definitely think we should address these before the Lucene 10 >>>>>> release, as they provide a clean break from the old world. I also think >>>>>> it's a decent amount of work (but not unsurmountable). I'm also maybe no >>>>>> longer a fan of the helper method that Greg added in his PR for the >>>>>> monitor >>>>>> module, since it risks sweeping non-threadsafe code under the rug, if >>>>>> folks >>>>>> make single-threaded tests (which is essentially what they've been doing >>>>>> all along -- see my first point above). >>>>>> >>>>>> I haven't properly looked into the scope of my second point above, >>>>>> but I've seen at least two cases in the past two days. Hopefully it's not >>>>>> too bad, but it might be a risk. I think the first point is still pretty >>>>>> easy to address. >>>>>> >>>>>> Thanks, >>>>>> Froh >>>>>> >>>>>> On Thu, Aug 29, 2024 at 2:15 AM Luca Cavanna <l...@elastic.co.invalid> >>>>>> wrote: >>>>>> >>>>>>> For Lucene 10.0, I have two topics to raise: >>>>>>> >>>>>>> 1. Remove the deprecated IndexSearcher#search(Query, Collector) in >>>>>>> favour of IndexSearcher#search(Query, CollectorManager) ( >>>>>>> https://github.com/apache/lucene/issues/12892): this involves >>>>>>> removing the leftover usages in facet, grouping, join and >>>>>>> test-framework, >>>>>>> plus in some tests. A list of the leftover usages is in the description >>>>>>> of >>>>>>> the issue. It would be great to complete this for Lucene 10, otherwise >>>>>>> this >>>>>>> deprecated method and usages will stick around for much longer. What do >>>>>>> others think? Should we make this a blocker for the release? I think >>>>>>> this >>>>>>> is not a huge effort and it is parallelizable across different people. >>>>>>> >>>>>>> 2. Intra-segment concurrency ( >>>>>>> https://github.com/apache/lucene/pull/13542): current thinking is >>>>>>> to add support for partitioning segments when searching, and searching >>>>>>> across segment partitions concurrently. My intention is to introduce >>>>>>> breaking changes and documentation in Lucene 10 (really only the >>>>>>> basics), >>>>>>> without switching the default slicing of IndexSearcher to create segment >>>>>>> partitions. We will want to leverage segment partitions in testing. More >>>>>>> iterations are going to be needed to remove duplicated work across >>>>>>> partitions of the same segment, which is my next step, but currently >>>>>>> out of >>>>>>> scope for Lucene 10. Judging from the reviews I got so far, my PR is not >>>>>>> far and I am working on it to address comments, polish it a bit more and >>>>>>> merge it soon. >>>>>>> >>>>>>> Feedback is welcome >>>>>>> >>>>>>> Cheers >>>>>>> Luca >>>>>>> >>>>>>> On Wed, Aug 28, 2024 at 3:05 PM Adrien Grand <jpou...@gmail.com> >>>>>>> wrote: >>>>>>> >>>>>>>> Thanks Mike. >>>>>>>> >>>>>>>> On Wed, Aug 28, 2024 at 2:16 PM Michael McCandless < >>>>>>>> luc...@mikemccandless.com> wrote: >>>>>>>> >>>>>>>>> I think maybe also https://github.com/apache/lucene/issues/13519 >>>>>>>>> should be a blocker? It looks like 8 bit vector HNSW quantization is >>>>>>>>> broken (unless I'm making a silly mistake with luceneutil tooling). >>>>>>>>> >>>>>>>>> I've also set its milestone to 10.0.0. >>>>>>>>> >>>>>>>>> Do we really not have a way to mark an issue a blocker for a given >>>>>>>>> release? That's insane. OK well I went and created "blocker" label, >>>>>>>>> and >>>>>>>>> added that to GH 13519. Greg, I'll also go mark your linked issue as >>>>>>>>> "blocker". >>>>>>>>> >>>>>>>>> Mike McCandless >>>>>>>>> >>>>>>>>> http://blog.mikemccandless.com >>>>>>>>> >>>>>>>>> >>>>>>>>> On Sat, Aug 24, 2024 at 2:33 PM Uwe Schindler <u...@thetaphi.de> >>>>>>>>> wrote: >>>>>>>>> >>>>>>>>>> Hi, >>>>>>>>>> >>>>>>>>>> I updated Policeman Jenkins to have JDK 23 RC and JDK 24 EA >>>>>>>>>> releases. >>>>>>>>>> >>>>>>>>>> Uwe >>>>>>>>>> >>>>>>>>>> P.S.: Unfortunately I have to update the macOS Hackintosh VM to >>>>>>>>>> have a newer operating system version: JDK 22 and later no longer >>>>>>>>>> run on >>>>>>>>>> this machine. >>>>>>>>>> Am 23.08.2024 um 10:41 schrieb Uwe Schindler: >>>>>>>>>> >>>>>>>>>> Hi, >>>>>>>>>> >>>>>>>>>> In 9.x there's still the backport of >>>>>>>>>> https://github.com/apache/lucene/pull/13570 to be done. The PR >>>>>>>>>> apperas in the changelog, but was not backported yet. Chris and I >>>>>>>>>> will do >>>>>>>>>> this soon. >>>>>>>>>> >>>>>>>>>> 9.last release on Sept 22 fits perfectly with the JDK 23 release >>>>>>>>>> (and we will have Panama Vector Support). I am seeting up Jenkins >>>>>>>>>> Job with >>>>>>>>>> latest RC now to verify all vector stuff works with 23. >>>>>>>>>> >>>>>>>>>> Uwe >>>>>>>>>> Am 08.08.2024 um 18:50 schrieb Adrien Grand: >>>>>>>>>> >>>>>>>>>> Hello everyone, >>>>>>>>>> >>>>>>>>>> As previously discussed >>>>>>>>>> <https://lists.apache.org/thread/4bhnkkvvodxxgrpj4yqm5yrgj0ppc59r>, >>>>>>>>>> I plan on releasing 9.last and 10.0 under the following timeline: >>>>>>>>>> - ~September 15th: 10.0 feature freeze - main becomes 11.0 >>>>>>>>>> - ~September 22nd: 9.last release, >>>>>>>>>> - ~October 1st: 10.0 release. >>>>>>>>>> >>>>>>>>>> Unless someone shortly volunteers to do a 9.x release, this >>>>>>>>>> 9.last release will likely be 9.12. >>>>>>>>>> >>>>>>>>>> As these dates are coming shortly, I would like to start tracking >>>>>>>>>> blockers. Please reply to this thread with issues that you know >>>>>>>>>> about that >>>>>>>>>> should delay the 9.last or 10.0 releases. >>>>>>>>>> >>>>>>>>>> Chris, Uwe: I also wanted to check with you if this timeline >>>>>>>>>> works well with regards to supporting Java 23 in 9.last and 10.0? >>>>>>>>>> >>>>>>>>>> -- >>>>>>>>>> Adrien >>>>>>>>>> >>>>>>>>>> -- >>>>>>>>>> Uwe SchindlerAchterdiek 19, D-28357 Bremen >>>>>>>>>> <https://www.google.com/maps/search/Achterdiek+19,+D-28357+Bremen?entry=gmail&source=g>https://www.thetaphi.de >>>>>>>>>> eMail: u...@thetaphi.de >>>>>>>>>> >>>>>>>>>> -- >>>>>>>>>> Uwe SchindlerAchterdiek 19, D-28357 Bremen >>>>>>>>>> <https://www.google.com/maps/search/Achterdiek+19,+D-28357+Bremen?entry=gmail&source=g>https://www.thetaphi.de >>>>>>>>>> eMail: u...@thetaphi.de >>>>>>>>>> >>>>>>>>>> >>>>>>>> >>>>>>>> -- >>>>>>>> Adrien >>>>>>>> >>>>>>>