> 99% of Solr users never see the java code that implements an API let alone > writing a new API.
We may be talking past each other here a bit Noble. The JAX-RS benefits I've been trying to describe are to benefit us developers, not Solr users. I agree that 99% of our users won't know or care about it, but who cares. The goal is to make _our_ lives as maintainers easier going into the future. Jan described it in a word better than I've been struggling to: it's about "modernization". Best, Jason On Thu, Dec 2, 2021 at 3:34 AM Jan Høydahl <jan....@cominvent.com> wrote: > > Agree, Ishan. > > Let's welcome and cheer initiatives to modernize this old codebase. > Diving in deep and un-tangling DispatchFilter like Gus is attempting is brave. > And testing JAX-RS to modernize APIs and make the codebas easier to grok is > also not for the faint hearted. > > I hope both initiatives end up as a breath of fresh air for Solr developers. > And perhaps users may get their hands on auto-generated OpenAPI docs for > Solr as well! > Theoretically foundations like this may make it feasible in the future to > auto-generate client code from the spec,so that full Admin API client support > in e.g. Go or Rust may be achievable without hand-coding. But that is still > far away :) > > Jan > > 2. des. 2021 kl. 05:52 skrev Ishan Chattopadhyaya <ichattopadhy...@gmail.com>: > > > We are discussing this as if moving to an external framework is going to be > > smooth. It's not. > > Noble, we won't know before someone has given it a try. My hunch suggests it > won't be smooth, but we can decide on that once we see a concrete solution > that 1) works well for all existing APIs (per core or global) without > hacks/workarounds, and 2) has no security implications, and 3) doesn't > clutter our codebase, and 4) doesn't affect our runtime performance. > > On Thu, Dec 2, 2021 at 4:22 AM Noble Paul <noble.p...@gmail.com> wrote: >> >> >> >> On Thu, Dec 2, 2021 at 2:46 AM Jason Gerlowski <gerlowsk...@gmail.com> wrote: >>> >>> > There are no known issues with the current system >>> >>> Maybe you're using hyperbole to emphasise a point, but let's steer >>> this discussion away from straw-men and caricatures. I mentioned >>> specific known issues in a previous reply as a direct response to your >>> question about them. The incomplete support for data types >>> (SOLR-15619 and SOLR-15796). The inflexible PermissionNameProvider >>> integration (SOLR-15823). If you consider those "minor", fair enough, >>> and you're welcome to that opinion. But saying that they don't exist >>> is a mischaracterization that wastes time and muddies water. >> >> >> We are discussing this as if moving to an external framework is going to be >> smooth. It's not. I have seen how hard the Restlet integration was and how >> it stood out like a sore thumb. The amount of code required to integrate >> Solr APIs into restlet components was 10x more than the amount of code >> written for the new framework and it still was incomplete . Integrating >> anything to Solr is not simple and it's going to be an ongoing effort to >> ensure that all of the functionalities of a SolrRequestHandler are exposed >> to the new framework. Every single component that we have today has ongoing >> improvements and bug fixes. Using that as an excuse to do a complete rewrite >> is probably unwise. >> >> >>> >>> > Solr is not a general purpose web server where people write APIs every day >>> >>> Totally agree - 99% of the time someone opens an API file in Solr, >>> they're reading, not writing. So if JAX-RS didn't help that case, it >>> wouldn't be worth the effort of switching. But IMO it helps that >>> "read" case a lot. >> >> >> 99% of Solr users never see the java code that implements an API let alone >> writing a new API. They wouldn't care if an API is implemented using a >> Servlet API, a custom framework or something else. They only care about the >> input and output. New end points are rare. >>> >>> >>> JAX-RS defined APIs expose inputs as strongly-typed parameters >>> (compare to the weakly-typed SolrQueryRequest/SolrParams used today). >>> JAX-RS enumerates every input to the API in one place. JAX-RS APIs >>> can return any serializable type as a response (compare to the >>> near-omnipresent NamedList today). >>> >>> (The annotation framework's PayloadObj class gets us a bit of this >>> benefit, but not all of it and only on POST requests afaik.) >>> >>> This is all nice stuff at API-write time, but where it really helps is >>> in making the code clearer and simpler whenever someone goes to read >>> it later. No wondering what parameters an API actually takes. No >>> puzzling out what a bunch of NamedList operations spread throughout >>> API execution actually produce in the end. etc. >>> >>> > The only reason why anyone would need to use this framework is to write a >>> > custom request handler. >>> >>> ...except for the majority of people who come in contact with the >>> framework by reading an existing Solr API? This ties into your point >>> above about APIs being written infrequently but read all the time. >>> Improving readability is the big gain here, and I think JAX-RS offers >>> real improvements in that regard. >> >> >> We had no framework for the last 15+ years and V1 API (the only actually >> used API) still uses no frameworks. Even the annotation framework is not >> used much even though readability is a lot better in the annotation based >> system. Readability has not been an overriding concern for V1 APIs for sure >> >>> Also, to clarify, I'm not asserting that no one configures custom >>> requestHandlers. I was wondering aloud how common it was, as an open >>> question. >>> >> Your point IS right. IRL, most of our users do not write request handlers . >> They write search components , query parsers and other plugins. Because we >> are a search engine and not a web server. I have never seen a user >> complaining about the V1 API of writing a request handler. They may actually >> complain about how hard it is to deploy one. Our users are much smarter than >> we give them credit for. >> >> >>> >>> > We did not fork Jackson. We are using Jackson itself. >>> >>> Ah, maybe you're right, "fork" is probably an unfair word. I looked >>> for the serialization code, and I'll admit there is less than I >>> thought involved here and I misunderstood how it works. So that's my >>> bad. The JSON serialization/deserialization discussion is prob a >>> digression from the core contention about whether JAX-RS would be >>> helpful. I was curious about your earlier response and couldn't >>> resist following up here but I should've done so elsewhere to avoid >>> the distraction. >>> >>> Best, >>> >>> >>> Jason >>> >>> On Tue, Nov 30, 2021 at 4:12 PM Noble Paul <noble.p...@gmail.com> wrote: >>> > >>> > The annotation framework is just a single class and it is made to work >>> > well with Solr instead of changing Solr to suit the needs of some >>> > external framework. There are no known issues with the current system and >>> > there are unknown issues that you'll face introducing a new framework. >>> > >>> > Solr is not a general purpose web server where people write APIs every >>> > day. It's a finished product where people use the publicly available APIs >>> > . We should focus our efforts on making our APIs work well . >>> > >>> > On Wed, Dec 1, 2021, 2:14 AM Jason Gerlowski <gerlowsk...@gmail.com> >>> > wrote: >>> >> >>> >> > 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? >>> > >>> > >>> > The only reason why anyone would need to use this framework is to write a >>> > custom request handler. You're also saying nobody writes custom request >>> > handlers. So, what problem are you trying to solve if you think nobody >>> > uses them? >>> > >>> > >>> >> >>> >> > 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. >>> > >>> > >>> > We did not fork Jackson. We are using Jackson itself. Jackson supports >>> > custom annotations. There was a huge discussion why we should do it this >>> > way. >>> >> >>> >> >>> >> 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 >>> >> >>> >>> --------------------------------------------------------------------- >>> To unsubscribe, e-mail: dev-unsubscr...@solr.apache.org >>> For additional commands, e-mail: dev-h...@solr.apache.org >>> >> >> >> -- >> ----------------------------------------------------- >> Noble Paul > > --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@solr.apache.org For additional commands, e-mail: dev-h...@solr.apache.org