[ 
https://issues.apache.org/jira/browse/SOLR-14596?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17179184#comment-17179184
 ] 

Jason Gerlowski commented on SOLR-14596:
----------------------------------------

bq.  You didn't say "all" but I think your reasoning ultimately leads to "all"

I disagree that's where the reasoning leads.  The Object javadocs require 
hashCode impls only where {{equals}} is also overridden.  ("equal objects have 
equal hashcodes" is trivially met when the definition of {{equals}} is 
reference-equality based).  A blanket claim about needing hashCode for all 
classes everywhere would def be objectionable, but that's not what Object.java 
calls for.

bq. It's easy for code evolution (new fields) to leave equals/hashCode out of 
date, leading to very subtle bugs!

I understand the out-of-date scenario you're describing here, but I'm not sure 
what type of subtle bugs you're referring to.  Not including a field in an 
{{equals}} check could cause some weird bugs in a client's logic, but you're 
not objecting to implementing {{equals}}, afaict, just {{hashCode}}.  If we 
zoom in to {{hashCode}} specifically - if hC doesn't include a new field in its 
impl - well, nothing severe happens.  Equal objects will still have equal 
hashcodes.  Unequal objects may or may not have equal hashcodes.  Both of those 
are "correct".

So even if these impl's fall out of date, there's no risk afaict.  Maybe the 
specifics or these bugs are a point to zoom in on, since it's important to the 
argument you've made so far around the debt/risk to having these around, and 
also where we're seemingly furthest from a shared understanding.  Can you 
clarify the class of "subtle bugs" you're referring to? 

In terms of the UOE approach, I think it's very user-unfriendly.  We're talking 
about taking an operation that works ootb on the vast majority of Java classes 
and intentionally breaking it for users of our classes.  Further, we're doing 
this as a break to back-compat (if in 8x) and without any real sense of how 
common/uncommon it is.  I feel like that might make this proposed change a 
net-negative for users, even taking into account the improved assert-ability 
that {{equals}} gives.

> Add equals()/hashCode() impls to SolrJ Request objects
> ------------------------------------------------------
>
>                 Key: SOLR-14596
>                 URL: https://issues.apache.org/jira/browse/SOLR-14596
>             Project: Solr
>          Issue Type: Improvement
>          Components: SolrJ
>    Affects Versions: master (9.0), 8.5.2
>            Reporter: Jason Gerlowski
>            Priority: Minor
>          Time Spent: 1h
>  Remaining Estimate: 0h
>
> Currently, many SolrRequest classes (e.g. UpdateRequest) don't implement 
> {{equals()}} or {{hashCode()}}
> This isn't a problem for Solr's normal operation, but it can be a barrier in 
> unit testing SolrJ client code.  {{equals()}} implementations would make it 
> much easier to assert that client code is building the request that 
> developers _think_ it's building.  Of course, this testing benefit would 
> apply to Solr's own tests which use SolrJ.
> This ticket covers making sure that the more popular SolrRequest objects have 
> equals/hashcode implementations useful for testers.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

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

Reply via email to