[ https://issues.apache.org/jira/browse/SOLR-1602?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12795920#action_12795920 ]
Uri Boness commented on SOLR-1602: ---------------------------------- I think it is very important to understand all sides here. I fully and totally support Chris's attempts to clean up the code base which rightfully involves moving classes from one package to another. I think in some cases such cleanups need to come at the cost of user comfort as eventually they, as users, also gain from it as the system as a whole becomes more robust, extensible and maintainable. The good thing is that besides the deprecation issue I believe there is a consensus about the required changes. So thumbs up Chris!!! To deprecate or not to deprecate, that is the question. In a widely used library/framework/system with a large (or fast growing) install/user base such as the Solr community, the common practice is *not* to just break BWC without giving the users some grace period in which they can adjust their deployments to the new changes. Sometimes, it's absolutely necessary (such in the cases of bug fixes) but when it's not, in general it can create the opposite effect than you want with the community - instead having the community appreciate your improvements and see Solr as an "improving with time" product, they turn and see Solr as an inconsistent and sometime even unreliable product. So from my experience with delivering goods for the users, especially in the open source world (and I do have quite a bit of experience in that respect with the Spring Framework) you always need to strive to 100% BWC in theory and ~95% BWC in practice (never less than 90% though). If you stick to that, I believe changes will be widely accepted as improvements rather than harassments. But there's a catch here!!!! In order to stick to these numbers, you have to adhere to two important conditions: 1. You need to have a rather solid architecture and code base to start with. If you don't, then naturally in the beginning you can expect many more extreme/major changes which lead to quite a few BWC breaks (it will gradually be reduced as the architecture/codebase improves). Whether Solr answers this condition is open for debate... there are a lot of solid parts in Solr and quite a few parts where a complete rewrite is appropriate. 2. You need to have a steady and short release cycles. This is one thing that Solr lacks... big time. In a 1 year release cycle, deprecating code means that for the next year (in some cases two years), the code base will be messy with deprecated classes all over the place. In that respect, I can definitely understand Chris's objection for deprecation as the cleanup tasks that he's implementing may end up creating more mess (at least for a long while) than you had before the cleanup all together. I believe that moving to shorter release cycles (including bug-fix releases) will greatly help promoting deprecation in general. (NOTE: just a small note about the first condition. One thing to take into account is that *every* piece of software reaches a point in time where it needs to be completely re-written or at least go through a *major* refactoring/re-architecturing phase. This can be caused by many factors, let it be new technologies that are introduced, or simply limitations of the architecture that were not foreseen. It's very important to understand and admit to this fact - even from the user point of view it's acceptable. What is not acceptable, if it happens too many times and too frequent) Bottom line, it's always a conflict between the user point of view and the developer point of view. And there needs to be a balance and understanding of both sides. Each side needs to understand and give in to some extend to create this balance. But to make it happen, the culture, environment and well defined policies need to be in place. Arguing endlessly who's right here will never bring to a good outcome, simply because both sides are right and wrong at the same time, if you treat it as a black or white issue you'll end up loosing something - either the user trust or a better software. How about creating a proper release plan for the upcoming year, say a release every two months? Chris, if you have such a release schedule, will you feel more comfortable with deprecation? > Refactor SOLR package structure to include o.a.solr.response and move > QueryResponseWriters in there > --------------------------------------------------------------------------------------------------- > > Key: SOLR-1602 > URL: https://issues.apache.org/jira/browse/SOLR-1602 > Project: Solr > Issue Type: Improvement > Components: Response Writers > Affects Versions: 1.2, 1.3, 1.4 > Environment: independent of environment (code structure) > Reporter: Chris A. Mattmann > Assignee: Noble Paul > Fix For: 1.5 > > Attachments: SOLR-1602.Mattmann.112509.patch.txt, > SOLR-1602.Mattmann.112509_02.patch.txt, upgrade_solr_config > > > Currently all o.a.solr.request.QueryResponseWriter implementations are > curiously located in the o.a.solr.request package. Not only is this package > getting big (30+ classes), a lot of them are misplaced. There should be a > first-class o.a.solr.response package, and the response related classes > should be given a home there. Patch forthcoming. -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.