One simple solution is to revert SOLR-15223 Deprecate HttpSolrClient and 
friends in 9.0, do the 9.0 release and then continue planning for the next-gen 
Cloud client.

It could be that we should be even bolder in 10.0 and provide a more modern 
Cluster SolrJ client that supports an instant pub/sub over HTTP/2 for 
clusterstate changes (i.e. a push from Solr server to client over HTTP/2), 
eliminating the need for user apps talking to Zookeeper at all. That would also 
make it easier for 3rd party clients to implement a good Solr client.

Jan

> 17. mar. 2022 kl. 04:40 skrev David Smiley <dsmi...@apache.org>:
> 
> "ClusterSolrClient" is a fine name but we already have a fine name that users 
> are using.  Waiting till 10.0 is depressing to me, particularly because it 
> seems unnecessary.  Is there disagreement that the possibility of some users 
> having to change something is too much to ask in a major version?
> 
> ~ David Smiley
> Apache Lucene/Solr Search Developer
> http://www.linkedin.com/in/davidwsmiley 
> <http://www.linkedin.com/in/davidwsmiley>
> 
> On Wed, Mar 16, 2022 at 4:53 PM Jason Gerlowski <gerlowsk...@gmail.com 
> <mailto:gerlowsk...@gmail.com>> wrote:
> > We can only hypothesize _why_ a client is dependent in the first place ...  
> > Perhaps to tweak/tune advanced options, timeouts.  Perhaps to instrument 
> > mTLS details
> 
> Another use-case to add to this list would be auth settings.  I'm
> struggling to come up with a concrete example this minute, but I know
> I've written SolrJ code that customized the underlying HttpClient for
> auth-related purposes.
> 
> > "CloudSolrClient" is an intuitive/obvious name to a user that wants to talk 
> > to SolrCloud [...] HTTP protocol or wether the client is using whatever 
> > HTTP library is all an implementation detail.
> 
> +1  I like the idea of keeping implementation details out of the name
> of any types we're putting front-and-center for SolrJ users.  But I
> share Jan's concern about breaking clients who rely on a particular
> underlying client type.
> 
> My favorite idea so far is probably Jan's point that balancing those
> two gets a lot easier if we introduce some "new" name like
> "ClusterSolrClient" as the long term successor to
> CloudSolrClient/BaseCloudSolrClient.  It'd be nice to keep the name
> 'CloudSolrClient' itself for the sake of continuity, but
> ClusterSolrClient at least preserves the reasons we like
> 'CloudSolrClient' as a name and it makes keeping backcompat pretty
> easy:
> 
> I guess concretely, this would look something like:
> 
> 1. Create a new class, 'ClusterSolrClient', that's a trivial extension
> of BaseCloudSolrClient. (i.e. `class ClusterSolrClient extends
> BaseCloudSolrClient {}`)
> 2. Add a builder for the new 'ClusterSolrClient' that can create
> either the apache or jetty-powered CloudSolrClient based on the
> builder methods invoked.
> 3. Deprecate BaseCloudSolrClient, CloudSolrClient, CSC.Builder, and
> CloudHttp2SolrClient.Builder for 9.0, directing users over to the new
> ClusterSolrClient and its builder.
> 4. Remove the deprecated classes in 10.0
> 
> Does something like this sound do-able?
> 
> Jason
> 
> On Wed, Mar 16, 2022 at 10:50 AM Mike Drob <md...@mdrob.com 
> <mailto:md...@mdrob.com>> wrote:
> >
> > I feel like CloudSolrClient doesn't imply anything about HTTP 1 or 2, 
> > anything about Apache or Jetty (or java.net.http). If we have exposed those 
> > internal details in some ways, then that is unfortunate and should be 
> > addressed.
> >
> > I personally never use CloudHttp2SolrClient because I kind of assumed that 
> > it was an implementation detail and the various builders would give me the 
> > http2 client when I needed it. Maybe that's not the case. I've never 
> > thought about it too much. CloudSolrClient looks like the "simpler" one to 
> > use so that's what people gravitate towards.
> >
> > A quick look in my editor suggests that we have 100 uses of 
> > CloudSolrClient, including some in the ref guide. If we want to deprecate 
> > this, then we should update our documentation to guide people away from it 
> > as well. I suspect that if we try to examine which uses of CloudSolrClient 
> > in our code could just be SolrClient, we wouldn't make much progress on 
> > this though.
> >
> > I know this isn't offering much in the way of solutions, but I'm mostly 
> > trying to say that I agree it is a problem.
> >
> >
> > Mike
> >
> > On Wed, Mar 16, 2022 at 12:05 AM David Smiley <dsmi...@apache.org 
> > <mailto:dsmi...@apache.org>> wrote:
> >>
> >> On Tue, Mar 15, 2022 at 8:47 AM Jan Høydahl <jan....@cominvent.com 
> >> <mailto:jan....@cominvent.com>> wrote:
> >>>
> >>> I re-opened SOLR-15223 to highlight that we are still blocked by this 
> >>> decision.
> >>>
> >>> I don't clearly see the full effects of your suggestion right now. Does 
> >>> your proposal also involve deprecating CloudHttp2SolrClient as a separate 
> >>> class?
> >>
> >>
> >> No; it would stay.  Perhaps ideally it would have a name reflecting it 
> >> uses the Jetty client but no big deal; it can stay as-is.  Its name 
> >> already isn't necessarily true; you can use this class (and thus the Jetty 
> >> client) and tell it not to use Http2 :-). I'm reminded that HdfsDirectory 
> >> doesn't require HDFS :-). (It requires the HDFS client libs but not 
> >> necessarily an HDFS backend, if you're curious).
> >>
> >>>
> >>> I would imagine users with existing SolrJ code would after upgrading get 
> >>> an instance of BaseCloudSolrClient (with a new name) using Jetty client 
> >>> under the hood? What if that application code assumes org.apache.http as 
> >>> client and tries to obtain HttpSolrClient and even org.apache.http 
> >>> objects based on CloudSolrClient? The code would fail since the contract 
> >>> is broken.
> >>
> >>
> >> If the client/user truly assumes org.apache.http well clearly they will be 
> >> disrupted by this change.  You want to call that a "contract" -- shrug; I 
> >> call it an implementation detail that can change :-).  They may be calling 
> >> getLbClient and may be using the LBHttpSolrClient subclass of 
> >> LBSolrClient, perhaps.  Or similarly specifying builder options relating 
> >> to this advanced option.  It's possible and it's undeniable _some_ clients 
> >> will be impacted.  We can only hypothesize _why_ a client is dependent in 
> >> the first place (vs. perhaps an accidental dependency/assumption e.g. in 
> >> dependency management).  Perhaps to tweak/tune advanced options, timeouts. 
> >>  Perhaps to instrument mTLS details; although I know from experience it 
> >> can be done without calling special methods on builders; it can be done 
> >> via setting special system properties referring to one's own classes that 
> >> are called in certain ways.  If you do that (and we have), the way to do 
> >> it for the Apache based client differs from Jetty; we've done it for both 
> >> because Solr uses both internally.  Anyway, this is off the beaten path of 
> >> most users.
> >>
> >>>
> >>>
> >>> With the current pure deprecation and switch to CloudHttp2SolrClient, 
> >>> existing users' code would continue to work..
> >>
> >>
> >> Hey, this is a major release; let's not hold ourselves to a standard that 
> >> is too onerous for us to maintain.  We can make our intentions clear in 
> >> upgrade notes.
> >>
> >> ~ David
> >>
> >>>
> >>> Jan
> >>>
> >>>
> >>> 14. mar. 2022 kl. 15:40 skrev David Smiley <dsmi...@apache.org 
> >>> <mailto:dsmi...@apache.org>>:
> >>>
> >>> I want to bring an important SolrJ decision to the dev list.
> >>>
> >>> There's a JIRA issue https://issues.apache.org/jira/browse/SOLR-15223 
> >>> <https://issues.apache.org/jira/browse/SOLR-15223> "Deprecate 
> >>> HttpSolrClient and friends in 9.0"
> >>>
> >>> Sounds great by the title -- we want to transition over time to the Jetty 
> >>> client instead.  Jan submitted a PR to deprecate CloudSolrClient and some 
> >>> others, and I approved it because these classes intimately assume the 
> >>> Apache HttpClient.  It's merged.
> >>>
> >>> But I have serious doubts now and wish to discuss it with the dev list.  
> >>> Copying my last message on the issue:
> >>>
> >>>> Now that I'm "seeing" the results of this in my IDE, seeing the 
> >>>> cross-through of deprecated usage on innocent looking classes like 
> >>>> CloudSolrClient in particular, I have doubts on the approach. 
> >>>> "CloudSolrClient" is an intuitive/obvious name to a user that wants to 
> >>>> talk to SolrCloud. The particulars of which HTTP protocol or wether the 
> >>>> client is using whatever HTTP library is all an implementation detail. 
> >>>> Ideally such decisions would be done in the builder, either a common 
> >>>> builder or if not then a builder specific to those libraries if needed 
> >>>> (less nice but acceptable IMO).
> >>>>
> >>>> The easiest way to get there is to rename CloudSolrClient to 
> >>>> CloudHttp1SolrClient in one commit (merge it) and then rename 
> >>>> BaseCloudSolrClient to simply CloudSolrClient in the next. Then add a 
> >>>> Builder to this class that is the one in Http2; subclass it or something 
> >>>> (details TBD).
> >>>>
> >>>> WDYT?
> >>>>
> >>>> Of course, today they are separated by their classes. Maybe we should 
> >>>> simply convey the deprecation intent in the upgrade notes as an advanced 
> >>>> warning, but not deprecate CloudSolrClient in particular.
> >>>
> >>>
> >>> Jan replied:
> >>>
> >>>> Since we did not deprecate these in 8.x, we still have a back-compat 
> >>>> promise to keep these classes around in 9.x, and thus also the old http 
> >>>> client. But perhaps we are breaking that promise already in SOLR-16061, 
> >>>> so maybe we can change even more
> >>>>
> >>>> I don't like the CloudHttp2SolrClient naming either, would prefer the 
> >>>> Http client to be abstracted away so that it could be swapped out as an 
> >>>> impl detail, but it was not designed that way. I fear that re-using the 
> >>>> same class name but with slightly different contract is harder to 
> >>>> explain than a clear deprecation message in the IDE pointing you to the 
> >>>> replacement.
> >>>>
> >>>> Perhaps the one client to rule them all in 10.0 should be 
> >>>> ClusterSolrClient? And aim for it to be constructed with either a Jetty 
> >>>> client or JDK8-HttpClient as backbone through different 
> >>>> factories/builder?
> >>>
> >>>
> >>> How is the contract between CloudSolrClient & BaseCloudSolrClient 
> >>> different Jan?  I suspect if there's breakage, it'd be relatively obscure 
> >>> options on the builder.
> >>>
> >>> ~ David Smiley
> >>> Apache Lucene/Solr Search Developer
> >>> http://www.linkedin.com/in/davidwsmiley 
> >>> <http://www.linkedin.com/in/davidwsmiley>
> >>>
> >>>
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscr...@solr.apache.org 
> <mailto:dev-unsubscr...@solr.apache.org>
> For additional commands, e-mail: dev-h...@solr.apache.org 
> <mailto:dev-h...@solr.apache.org>
> 

Reply via email to