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 > <mailto:noble.p...@gmail.com>> wrote: > > > On Thu, Dec 2, 2021 at 2:46 AM Jason Gerlowski <gerlowsk...@gmail.com > <mailto: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 > <mailto: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 > > <mailto: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 > >> <mailto: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 > >> > <mailto: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 > >> >> <mailto: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 > >> >>> <mailto: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 <mailto: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 > >> >>>>> <mailto: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 > >> >>>>> > <mailto:noble.p...@gmail.com>> wrote: > >> >>>>> >> > >> >>>>> >> > >> >>>>> >> > >> >>>>> >> On Fri, Nov 26, 2021 at 1:03 AM Jason Gerlowski > >> >>>>> >> <gerlowsk...@gmail.com <mailto: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 > >> >>>>> >>> <mailto: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 > >> >>>>> >>> > <mailto: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 > >> >>>>> >>> >> <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 > >> >>>>> >>> >> <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 > >> >>>>> >>> >> <mailto: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 <mailto: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 > >> >>>>> >>> >>> <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 > >> >>>>> >>> >>> > >> >>>>> >>> >>> <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 > >> >>>>> >>> >>> > >> >>>>> >>> >>> <https://github.com/gerlowskija/solr/tree/jersey_jaxrs_jackson_solr_apis>. > >> >>>>> >>> >>> > >> >>>>> >>> >>> --------------------------------------------------------------------- > >> >>>>> >>> >>> 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> > >> >>>>> >>> >>> > >> >>>>> >>> >> > >> >>>>> >>> >> _______________________ > >> >>>>> >>> >> Eric Pugh | Founder & CEO | OpenSource Connections, LLC | > >> >>>>> >>> >> 434.466.1467 | http://www.opensourceconnections.com > >> >>>>> >>> >> <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 > >> >>>>> >>> <mailto:dev-unsubscr...@solr.apache.org> > >> >>>>> >>> For additional commands, e-mail: dev-h...@solr.apache.org > >> >>>>> >>> <mailto:dev-h...@solr.apache.org> > >> >>>>> >>> > >> >>>>> >> > >> >>>>> >> > >> >>>>> >> -- > >> >>>>> >> ----------------------------------------------------- > >> >>>>> >> Noble Paul > >> >>>>> > > >> >>>>> > > >> >>>>> > > >> >>>>> > -- > >> >>>>> > ----------------------------------------------------- > >> >>>>> > Noble Paul > >> >>>>> > >> >>>>> --------------------------------------------------------------------- > >> >>>>> 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> > >> >>>>> > >> >>>> > >> >>>> > >> >>>> -- > >> >>>> http://www.needhamsoftware.com <http://www.needhamsoftware.com/> > >> >>>> (work) > >> >>>> http://www.the111shift.com <http://www.the111shift.com/> (play) > >> >>> > >> >>> > >> >>> > >> >>> -- > >> >>> ----------------------------------------------------- > >> >>> Noble Paul > >> >> > >> >> > >> >> > >> >> -- > >> >> ----------------------------------------------------- > >> >> Noble Paul > >> > >> --------------------------------------------------------------------- > >> 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> > >> > > --------------------------------------------------------------------- > 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> > > > > -- > ----------------------------------------------------- > Noble Paul