[ 
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]

Reply via email to