[
https://issues.apache.org/jira/browse/HDDS-5417?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Attila Doroszlai resolved HDDS-5417.
------------------------------------
Fix Version/s: 1.2.0
Resolution: Fixed
> Fix json parse stackoverflow for cmd ozone debug container list
> ---------------------------------------------------------------
>
> Key: HDDS-5417
> URL: https://issues.apache.org/jira/browse/HDDS-5417
> Project: Apache Ozone
> Issue Type: Bug
> Reporter: Mark Gui
> Assignee: Mark Gui
> Priority: Minor
> Labels: pull-request-available
> Fix For: 1.2.0
>
>
> When I run the command `ozone debug container list`, I saw the output:
> {code:java}
> [ozoneadmin@0dc124237e09 ozone-1.2.0-SNAPSHOT]$ ./bin/ozone debug container
> list
> 2021-07-07 03:59:48,075 [main] INFO volume.HddsVolume: Creating HddsVolume:
> /data1/hdds of storage type : DISK capacity : 47341600768
> 2021-07-07 03:59:48,076 [main] INFO volume.MutableVolumeSet: Added Volume :
> /data1/hdds to VolumeSet
> 2021-07-07 03:59:48,077 [main] INFO volume.HddsVolume: Creating HddsVolume:
> /data2/hdds of storage type : DISK capacity : 47341600768
> 2021-07-07 03:59:48,078 [main] INFO volume.MutableVolumeSet: Added Volume :
> /data2/hdds to VolumeSet
> 2021-07-07 03:59:48,078 [main] INFO volume.HddsVolume: Creating HddsVolume:
> /data3/hdds of storage type : DISK capacity : 47341600768
> 2021-07-07 03:59:48,079 [main] INFO volume.MutableVolumeSet: Added Volume :
> /data3/hdds to VolumeSet
> 2021-07-07 03:59:48,153 [main] INFO container.ContainerCommands: Starting the
> read all the container metadata
> 2021-07-07 03:59:48,153 [main] INFO container.ContainerCommands: Loading
> container metadata from volume /data1/hdds
> 2021-07-07 03:59:48,154 [main] INFO ozoneimpl.ContainerReader: Running in
> upgrade mode:true
> 2021-07-07 03:59:48,155 [main] INFO ozoneimpl.ContainerReader: Start to
> verify containers on volume /data1/hdds
> 2021-07-07 03:59:48,568 [main] INFO ozoneimpl.ContainerReader: Finish
> verifying containers on volume /data1/hdds
> 2021-07-07 03:59:48,568 [main] INFO container.ContainerCommands: Loading
> container metadata from volume /data2/hdds
> 2021-07-07 03:59:48,568 [main] INFO ozoneimpl.ContainerReader: Running in
> upgrade mode:true
> 2021-07-07 03:59:48,568 [main] INFO ozoneimpl.ContainerReader: Start to
> verify containers on volume /data2/hdds
> 2021-07-07 03:59:48,750 [main] INFO ozoneimpl.ContainerReader: Finish
> verifying containers on volume /data2/hdds
> 2021-07-07 03:59:48,751 [main] INFO container.ContainerCommands: Loading
> container metadata from volume /data3/hdds
> 2021-07-07 03:59:48,751 [main] INFO ozoneimpl.ContainerReader: Running in
> upgrade mode:true
> 2021-07-07 03:59:48,751 [main] INFO ozoneimpl.ContainerReader: Start to
> verify containers on volume /data3/hdds
> 2021-07-07 03:59:48,887 [main] INFO ozoneimpl.ContainerReader: Finish
> verifying containers on volume /data3/hdds
> 2021-07-07 03:59:48,887 [main] INFO container.ContainerCommands: All the
> container metadata is loaded.
> Infinite recursion (StackOverflowError) (through reference chain:
> org.apache.hadoop.ozone.container.common.volume.HddsVolume["volumeSet"]->org.apache.hadoop.ozone.container.common.volume.MutableVolumeSet["volumeMap"]->com.google.common.collect.RegularImmutableMap["/data1/hdds"]->org.apache.hadoop.ozone.container.common.volume.HddsVolume["volumeSet"]->org.apache.hadoop.ozone.container.common.volume.MutableVolumeSet["volumeMap"]->com.google.common.collect.RegularImmutableMap["/data1/hdds"]->org.apache.hadoop.ozone.container.common.volume.HddsVolume["volumeSet"]->org.apache.hadoop.ozone.container.common.volume.MutableVolumeSet["volumeMap"]->com.google.common.collect.RegularImmutableMap["/data1/hdds"]->org.apache.hadoop.ozone.container.common.volume.HddsVolume["volumeSet"]->org.apache.hadoop.ozone.container.common.volume.MutableVolumeSet["volumeMap"]->com.google.common.collect.RegularImmutableMap["/data1/hdds"]->org.apache.hadoop.ozone.container.common.volume.HddsVolume["volumeSet"]->
> ...{code}
> This is due to the json parser will try recursively to parse each field of
> ContainerData, and when it meets `HddsVolume`, it enters a loop
> 'HddsVolume->VolumeSet->VolumeMap->HddsVolume'.
> We could break the loop by letting json parser ignore the HddsVolume in
> ContainerData, we already have location information like chunksPath, so
> detailed volume info in HddsVolume is not necessary for container info for
> debug.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]