> We need to make an API work on a per core basis and cores can come up and go 
> down randomly

Ah, yeah.  I'll admit I was overlooking some of the wrinkles around
custom request handlers etc.  That is a problem for switching to some
off-the-shelf framework for sure.  It may still be possible, but it's
definitely a big hurdle.  I wonder how commonly users still take
advantage of the custom requestHandler stuff these days?  I haven't
run across many customers who used them extensively, but maybe that's
self-selecting in some way?

> If SolrJ has a Jackson dependency, it can have a conflict (different 
> versions) with the Jackson used by the client app

SolrJ has a handful of dependencies - is there a reason we take this
approach with Jackson, but not with any of SolrJ's other deps?
(apache-httpcomponents, apache-commons, zookeeper-client, etc.)

Granted, I get that we want SolrJ to be as painless as possible for
its users, and jar-conflicts are a part of that and really suck.  But
there are good tools out there for handling jar conflicts, and
reimplementing chunks of library functionality just to avoid a
gradle-dep strikes me as unsustainable from a maintenance/community
perspective.  Not to mention that forking/mimicking Jackson code
deprives our users of any efficiency/security improvements that
Jackson might get tomorrow or next week or next year.

Unless there's some reason specific to Jackson I guess I just don't
get it.  But if I'm the minority opinion on that, fair enough I guess.

On Tue, Nov 30, 2021 at 5:05 AM Noble Paul <noble.p...@gmail.com> wrote:
>
> The @JsonProperty annotations are added because it's a dependency in SolrJ as 
> well
> If SolrJ has a Jackson dependency, it can have a conflict (different 
> versions) with the Jackson used by the client app.
>
> On Tue, Nov 30, 2021, 5:21 PM Noble Paul <noble.p...@gmail.com> wrote:
>>
>> Also keep in mind that the same endpoint can be accessed with a core name 
>> and a collection name prefixes.
>>
>> On Tue, Nov 30, 2021 at 3:55 PM Noble Paul <noble.p...@gmail.com> wrote:
>>>
>>> True Gus, Almost every framework works outside of SolrDispatchFilter+ 
>>> HttpSolrCall. A lot of our initializations occur there.
>>>
>>> We need to make an API work on a per core basis and cores can come up and 
>>> go down randomly. So we need to register these endpoints on a core.
>>>
>>> I'm not sure if any framework can achieve the same.
>>>
>>> On Tue, Nov 30, 2021 at 5:39 AM Gus Heck <gus.h...@gmail.com> wrote:
>>>>
>>>> IIRC last time I looked restlet had the unsavory property of existing 
>>>> outside of the SolrDispatchFilter, unlike everything else which made for 
>>>> special cases because several things that probably ought to be their own 
>>>> siervlet filters are glommed into SolrDispatchFilter, like security, 
>>>> tracing and MDC setup/teardown per request. Restlet wouldn't be so bad if 
>>>> one could just wrap such filters around it too...
>>>>
>>>> On Mon, Nov 29, 2021 at 9:42 AM Jason Gerlowski <gerlowsk...@gmail.com> 
>>>> wrote:
>>>>>
>>>>> > These are minor improvements compared to a full rewrite of the entire 
>>>>> > framework
>>>>>
>>>>> If you think data type support is minor, fair enough.  But to clarify
>>>>> I'm not suggesting a rewrite - I'm suggesting using something that
>>>>> already exists off the shelf.  Jersey (e.g.) itself provides the
>>>>> framework - there would be no "rewrite".
>>>>>
>>>>> re: past restlet use
>>>>>
>>>>> > It was not playing well with our security framework. The framework was 
>>>>> > not working well with Solr APIs
>>>>>
>>>>> Ah, very interesting!  Security isn't something Eric or I tackled in
>>>>> our little spike branch, but it's definitely a concern.  Do you
>>>>> remember the specific concerns?  Or recall where any of the discussion
>>>>> around this happened?
>>>>>
>>>>> Without the context of that past discussion, it seems like the
>>>>> "PermissionNameProvider" interface could be implemented just as well
>>>>> by a class with (e.g.) Jersey annotations as one with our own custom
>>>>> annotations.  Certainly there'd need to be some
>>>>> RuleBasedAuthorizationPlugin changes or other integration code, but
>>>>> nothing that feels insurmountable.
>>>>>
>>>>> Maybe I can try spiking it out soon and find the issues myself, but
>>>>> it'd be much easier if someone happens to remember and can save me the
>>>>> trouble :-p
>>>>>
>>>>> Best,
>>>>>
>>>>> Jason
>>>>>
>>>>> On Fri, Nov 26, 2021 at 12:05 AM Noble Paul <noble.p...@gmail.com> wrote:
>>>>> >
>>>>> > The Annotations framework was written after playing with other 
>>>>> > frameworks. There were many shortcomings which were hard to overcome.
>>>>> >
>>>>> > The best example is a per collection API . How do you register an 
>>>>> > endpoint for a collection/core ?
>>>>> >
>>>>> > On Fri, Nov 26, 2021 at 3:42 PM Noble Paul <noble.p...@gmail.com> wrote:
>>>>> >>
>>>>> >>
>>>>> >>
>>>>> >> On Fri, Nov 26, 2021 at 1:03 AM Jason Gerlowski 
>>>>> >> <gerlowsk...@gmail.com> wrote:
>>>>> >>>
>>>>> >>> > Is there some problem with our annotations that we hope to solve 
>>>>> >>> > using third party dependencies?
>>>>> >>>
>>>>> >>> I guess so yeah.  Third-party deps are just fuller, more robust
>>>>> >>> solutions, whereas our annotations still need support added now and
>>>>> >>> then for even primitive data types like "long" (see SOLR-15619).
>>>>> >>
>>>>> >> These are minor improvements compared to a full rewrite of the entire 
>>>>> >> framework
>>>>> >>
>>>>> >>
>>>>> >>>
>>>>> >>> Every JIRA spent doing basic stuff like that is time away from
>>>>> >>> improving Solr in some other way.
>>>>> >>>
>>>>> >>> So there are feature-gap/capabilities arguments for moving to a
>>>>> >>> third-party dep, sure.  But, even if our annotations did everything
>>>>> >>> Jersey+Jackson do today, I think switching would still be worth it.
>>>>> >>> Every LOC in our code base brings along with it some maintenance cost:
>>>>> >>> it might have bugs, needs tested, takes time for new contributors to
>>>>> >>> "grok", etc.  Using off-the-shelf here would nuke a whole bunch of
>>>>> >>> that.  If off-the-shelf is available for some given functionality, we
>>>>> >>> should need a compelling reason to NOT use it.
>>>>> >>>
>>>>> >>> Lastly, I think there's an "approachability" argument for using
>>>>> >>> off-the-shelf.  Thousands of developers out there are familiar with
>>>>> >>> (e.g.) Jersey, compared to maybe 15 or 20 (in the world) familiar with
>>>>> >>> Solr's custom annotations.  Using a well-known technology like Jersey
>>>>> >>> would make Solr all the easier to approach and contribute to for that
>>>>> >>> pool of developers.
>>>>> >>>
>>>>> >>> > By the way, we have used Restlet in the past and that has been a 
>>>>> >>> > regrettable decision.
>>>>> >>
>>>>> >>
>>>>> >>>
>>>>> >>> Ah, yeah, that's just the context I'm missing.  Anyone have a pointer
>>>>> >>> to related discussions, or remember what made this "regrettable"?  All
>>>>> >>> the theoretical benefits in the world don't matter much if we've
>>>>> >>> already tried something like this in the past and decided against it.
>>>>> >>
>>>>> >>
>>>>> >> It was not playing well with our security framework. The framework was 
>>>>> >> not working well with Solr APIs
>>>>> >>
>>>>> >>>
>>>>> >>> (Unrelated - Happy Thanksgiving all!)
>>>>> >>>
>>>>> >>> Best,
>>>>> >>>
>>>>> >>> Jason
>>>>> >>>
>>>>> >>> On Thu, Nov 25, 2021 at 7:32 AM Noble Paul <noble.p...@gmail.com> 
>>>>> >>> wrote:
>>>>> >>> >
>>>>> >>> > Have you gone through an API written using the @EndPoint annotation?
>>>>> >>> >
>>>>> >>> > I strongly recommend that you do
>>>>> >>> >
>>>>> >>> > On Thu, Nov 25, 2021, 11:30 PM Eric Pugh 
>>>>> >>> > <ep...@opensourceconnections.com> wrote:
>>>>> >>> >>
>>>>> >>> >> I have found our V2 API code to be very impenetrable to 
>>>>> >>> >> understand.   Part of it is how the code is intertwined with 
>>>>> >>> >> support for V1, however it’s also because there aren’t really 
>>>>> >>> >> resources to go look at to understand how it should work!  
>>>>> >>> >> Maintaining the API should be very simple work, as they just exist 
>>>>> >>> >> as a translation.   The home grown stuff may make sense if you are 
>>>>> >>> >> a super knowledgable Solr developer, but if you are just a new 
>>>>> >>> >> person, it’s a lot harder to contribute.
>>>>> >>> >>
>>>>> >>> >> I was interested in the Jersey stuff because I’ve seen lots of 
>>>>> >>> >> projects use it very successfully, and if I want to implement 
>>>>> >>> >> something, well, there are lots of blogs and resources out there!
>>>>> >>> >>
>>>>> >>> >> Can anyone recap briefly why we dropped RESTlet?   And what 
>>>>> >>> >> lessons learned there might apply to adopting Jersey for API 
>>>>> >>> >> support?   Looking at 
>>>>> >>> >> https://issues.apache.org/jira/browse/SOLR-14659, it was partly 
>>>>> >>> >> deprecated because we were not using it to support all the API, 
>>>>> >>> >> only the ManagedResource ones, and 
>>>>> >>> >> https://issues.apache.org/jira/browse/SOLR-14766 suggests that 
>>>>> >>> >> RESTlet maybe was no longer being updated?   One reason why we 
>>>>> >>> >> spiked out Jersey was because of the broad support in the Java 
>>>>> >>> >> world!   Looking at how much work we have to do in the V2 API 
>>>>> >>> >> world, we need a much broader pool of developers contributing to 
>>>>> >>> >> get there!
>>>>> >>> >>
>>>>> >>> >> Related, are there specific features/aspects of our annotations 
>>>>> >>> >> that enable things in Solr that couldn’t be done otherwise?
>>>>> >>> >>
>>>>> >>> >> On Nov 25, 2021, at 2:12 AM, Ishan Chattopadhyaya 
>>>>> >>> >> <ichattopadhy...@gmail.com> wrote:
>>>>> >>> >>
>>>>> >>> >> Is there some problem with our annotations that we hope to solve 
>>>>> >>> >> using third party dependencies?
>>>>> >>> >> By the way, we have used Restlet in the past and that has been a 
>>>>> >>> >> regrettable decision.
>>>>> >>> >>
>>>>> >>> >> On Thu, Nov 25, 2021 at 10:10 AM Jason Gerlowski 
>>>>> >>> >> <gerlowsk...@gmail.com> wrote:
>>>>> >>> >>>
>>>>> >>> >>> Solr's custom annotation framework ('@Endpoint', '@Command', 
>>>>> >>> >>> etc.) has
>>>>> >>> >>> cropped up a few times over the past week or two. [1] [2]. Having 
>>>>> >>> >>> them
>>>>> >>> >>> on top of mind, I've been wondering - is there a reason we use 
>>>>> >>> >>> our own
>>>>> >>> >>> annotations here instead of something off the shelf?
>>>>> >>> >>>
>>>>> >>> >>> What we have works well enough, but anything homegrown comes with 
>>>>> >>> >>> more
>>>>> >>> >>> maintenance burden than we'd have if we used something off the 
>>>>> >>> >>> shelf.
>>>>> >>> >>> There are plenty of well-used, active projects out there whose 
>>>>> >>> >>> whole
>>>>> >>> >>> purpose is facilitating the whole "annotation based API" thing
>>>>> >>> >>> (Jersey, Restlet, RESTEasy, etc.) - why not use one of them?
>>>>> >>> >>>
>>>>> >>> >>> Does anyone know of any technical reasons why we can't go this 
>>>>> >>> >>> route?
>>>>> >>> >>> Or have any subjective reasons why we shouldn't?  Or any context 
>>>>> >>> >>> on
>>>>> >>> >>> why we wrote our own Endpoint, Command, JsonProperty annotations
>>>>> >>> >>> originally?
>>>>> >>> >>>
>>>>> >>> >>> FWIW, Eric Pugh and I spiked out a small POC recently, and got
>>>>> >>> >>> Jersey+Jackson working for a few simple APIs without too much 
>>>>> >>> >>> trouble.
>>>>> >>> >>> [3]  Obviously nothing production-ready there, and there's still 
>>>>> >>> >>> a lot
>>>>> >>> >>> of open questions (e.g. how would javabin be supported?), but we 
>>>>> >>> >>> both
>>>>> >>> >>> came away convinced that it seemed feasible, at least.  Best of 
>>>>> >>> >>> all,
>>>>> >>> >>> APIs using our current homegrown annotation framework the 
>>>>> >>> >>> switchover
>>>>> >>> >>> seems blessedly straightforward, and it doesn't look like Jersey
>>>>> >>> >>> (which we chose mostly arbitrarily) bloats our dist all that much.
>>>>> >>> >>>
>>>>> >>> >>> Curious if anyone has thoughts or context on how we ended up with 
>>>>> >>> >>> the
>>>>> >>> >>> annotation setup we use today!
>>>>> >>> >>>
>>>>> >>> >>> Best,
>>>>> >>> >>>
>>>>> >>> >>> Jason
>>>>> >>> >>>
>>>>> >>> >>> [1] https://issues.apache.org/jira/browse/SOLR-15182 (and 
>>>>> >>> >>> children)
>>>>> >>> >>> [2] 
>>>>> >>> >>> http://mail-archives.apache.org/mod_mbox/solr-dev/202111.mbox/%3CCABEwPvENL41Pm6%2BOmjXb6Sx5N2XjUtnbWhgKOZSrnLjWBA8tcA%40mail.gmail.com%3E
>>>>> >>> >>> [3] 
>>>>> >>> >>> https://github.com/gerlowskija/solr/tree/jersey_jaxrs_jackson_solr_apis.
>>>>> >>> >>>
>>>>> >>> >>> ---------------------------------------------------------------------
>>>>> >>> >>> To unsubscribe, e-mail: dev-unsubscr...@solr.apache.org
>>>>> >>> >>> For additional commands, e-mail: dev-h...@solr.apache.org
>>>>> >>> >>>
>>>>> >>> >>
>>>>> >>> >> _______________________
>>>>> >>> >> Eric Pugh | Founder & CEO | OpenSource Connections, LLC | 
>>>>> >>> >> 434.466.1467 | http://www.opensourceconnections.com | My Free/Busy
>>>>> >>> >> Co-Author: Apache Solr Enterprise Search Server, 3rd Ed
>>>>> >>> >> This e-mail and all contents, including attachments, is considered 
>>>>> >>> >> to be Company Confidential unless explicitly stated otherwise, 
>>>>> >>> >> regardless of whether attachments are marked as such.
>>>>> >>> >>
>>>>> >>>
>>>>> >>> ---------------------------------------------------------------------
>>>>> >>> To unsubscribe, e-mail: dev-unsubscr...@solr.apache.org
>>>>> >>> For additional commands, e-mail: dev-h...@solr.apache.org
>>>>> >>>
>>>>> >>
>>>>> >>
>>>>> >> --
>>>>> >> -----------------------------------------------------
>>>>> >> Noble Paul
>>>>> >
>>>>> >
>>>>> >
>>>>> > --
>>>>> > -----------------------------------------------------
>>>>> > Noble Paul
>>>>>
>>>>> ---------------------------------------------------------------------
>>>>> To unsubscribe, e-mail: dev-unsubscr...@solr.apache.org
>>>>> For additional commands, e-mail: dev-h...@solr.apache.org
>>>>>
>>>>
>>>>
>>>> --
>>>> http://www.needhamsoftware.com (work)
>>>> http://www.the111shift.com (play)
>>>
>>>
>>>
>>> --
>>> -----------------------------------------------------
>>> Noble Paul
>>
>>
>>
>> --
>> -----------------------------------------------------
>> Noble Paul

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@solr.apache.org
For additional commands, e-mail: dev-h...@solr.apache.org

Reply via email to