[ https://issues.apache.org/jira/browse/AVRO-3527?focusedWorklogId=779191&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-779191 ]
ASF GitHub Bot logged work on AVRO-3527: ---------------------------------------- Author: ASF GitHub Bot Created on: 07/Jun/22 17:01 Start Date: 07/Jun/22 17:01 Worklog Time Spent: 10m Work Description: github-code-scanning[bot] commented on code in PR #1708: URL: https://github.com/apache/avro/pull/1708#discussion_r891495081 ########## lang/java/compiler/src/main/java/org/apache/avro/compiler/specific/SpecificCompiler.java: ########## @@ -1131,6 +1131,46 @@ return word; } + public boolean canGenerateEqualsAndHashCode(Schema schema) { + return getUsedCustomLogicalTypeFactories(schema).isEmpty(); + } + + public boolean isPrimitiveType(Schema schema) { + return !isUnboxedJavaTypeNullable(schema) && getConvertedLogicalType(schema) == null; + } + + public String hashCodeFor(Schema schema, String name) { + switch (javaUnbox(schema)) { Review Comment: ## Deprecated method or constructor invocation Invoking [SpecificCompiler.javaUnbox](1) should be avoided because it has been deprecated. [Show more details](https://github.com/apache/avro/security/code-scanning/2708) Issue Time Tracking ------------------- Worklog Id: (was: 779191) Time Spent: 1h (was: 50m) > Generated equals() and hashCode() for SpecificRecords > ----------------------------------------------------- > > Key: AVRO-3527 > URL: https://issues.apache.org/jira/browse/AVRO-3527 > Project: Apache Avro > Issue Type: Improvement > Components: java > Reporter: Steven Aerts > Priority: Major > Labels: pull-request-available > Fix For: 1.12.0 > > Attachments: equals_hashcode_after.txt, equals_hashcode_before.txt, > flame_graph.jpeg > > Time Spent: 1h > Remaining Estimate: 0h > > When profiling our production system, we found that it was spending almost > 40% of its overall time in the {{SpecificRecordBase.hashCode()}} and > {{SpecificRecordBase.equals()}} implementations. > In some sections of its logic we see that almost all time is spend in those > function, as can be seen in attached flame graph (blue "pyramids") > !flame_graph.jpeg|width=385,height=99! > By generating the {{.equals()}} and {{.hashCode()}} all this overhead > disappeared and this application became 35% faster overall. > Also on other AVRO heavy applications we saw noticeable performance gains > where we hadn't expect them due to this improvement. > A generated implementation of {{.hashCode()}} becomes 5 to 10 times faster > than its generic counterpart. For {{.equals()}} it is 10 to 20 times faster. > Which is also visible in the attached JMH benchmarks. -- This message was sent by Atlassian Jira (v8.20.7#820007)