[ 
https://issues.apache.org/jira/browse/HDDS-5417?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

ASF GitHub Bot updated HDDS-5417:
---------------------------------
    Labels: pull-request-available  (was: )

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

Reply via email to