[
https://issues.apache.org/jira/browse/HDDS-15783?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Attila Doroszlai resolved HDDS-15783.
-------------------------------------
Fix Version/s: 2.3.0
Resolution: Fixed
> ScmListCodec fails to deserialize empty lists from Ratis log due to
> java.lang.Object element type regression
> ------------------------------------------------------------------------------------------------------------
>
> Key: HDDS-15783
> URL: https://issues.apache.org/jira/browse/HDDS-15783
> Project: Apache Ozone
> Issue Type: Bug
> Components: SCM, SCM HA
> Reporter: Priyesh K
> Assignee: Priyesh K
> Priority: Major
> Labels: pull-request-available
> Fix For: 2.3.0
>
>
> During an SCM HA cluster upgrade, SCM fails while replaying the Ratis log
> with the following error:
> {code:java}
> 2026-07-05 10:00:12,699 ERROR
> [36209121-a632-4067-a36d-a6e0194cd83e@group-65230FEE3C3A-StateMachineUpdater]-org.apache.ratis.statemachine.StateMachine:
> Terminating with exit status 1: Failed to resolve
> java.lang.Objectorg.apache.ratis.thirdparty.com.google.protobuf.InvalidProtocolBufferException:
> Failed to resolve java.lang.Object at
> org.apache.hadoop.hdds.scm.ha.io.ScmCodecFactory$ClassResolver.get(ScmCodecFactory.java:177)
> at
> org.apache.hadoop.hdds.scm.ha.io.ScmCodecFactory$ClassResolver.get(ScmCodecFactory.java:147)
> at
> org.apache.hadoop.hdds.scm.ha.io.ScmListCodec.deserialize(ScmListCodec.java:72)
> at
> org.apache.hadoop.hdds.scm.ha.SCMRatisRequest.decode(SCMRatisRequest.java:154)
> at
> org.apache.hadoop.hdds.scm.ha.SCMStateMachine.applyTransaction(SCMStateMachine.java:146)
> at
> org.apache.ratis.server.impl.RaftServerImpl.applyLogToStateMachine(RaftServerImpl.java:1888)
> at
> org.apache.ratis.server.impl.StateMachineUpdater.applyLog(StateMachineUpdater.java:255)
> at
> org.apache.ratis.server.impl.StateMachineUpdater.run(StateMachineUpdater.java:194)
> at java.base/java.lang.Thread.run(Thread.java:833)2026-07-05 10:00:12,702
> INFO
> [shutdown-hook-0]-org.apache.hadoop.hdds.scm.server.StorageContainerManagerStarter:
> SHUTDOWN_MSG: {code}
> *Root cause*
> An empty List/ArrayList was written into the SCM Ratis log, and the new
> ScmListCodec cannot deserialize it.On serialize, empty lists are stored with
> element type java.lang.Object. On deserialize, the codec always tries to
> resolve that type and get an element codec — even when there are zero
> elements.This is a regression from the reflection-based codec refactor
> (HDDS-14740/HDDS-14846). The old ListCodec had the same Object.class sentinel
> on serialize, but on deserialize it only loaded the element codec inside the
> value loop
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]