[
https://issues.apache.org/jira/browse/FLINK-34496?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Chesnay Schepler updated FLINK-34496:
-------------------------------------
Description:
This is a fun one!
ExecNodeMetadataUtil and JsonSerdeUtil have a circular dependency in their
static initialization, which can cause a classloading lockup when 2 threads are
running the class initialization of each class at the same time because during
class initialization they hold a lock.
https://ternarysearch.blogspot.com/2013/07/static-initialization-deadlock.html
JsonSerdeUtils#createFlinkTableJacksonModule calls into the
ExecNodeMetadataUtil, while ExecNodeMetadataUtil#addToLookupMap calls into the
JsonSerdeUtils.
{code}
"ForkJoinPool-3-worker-11" #25 daemon prio=5 os_prio=0 cpu=219.87ms
elapsed=995.99s tid=0x00007ff11c50e000 nid=0xf0fc in Object.wait()
[0x00007ff12a4f3000]
java.lang.Thread.State: RUNNABLE
at
org.a.f.table.planner.plan.nodes.exec.serde.JsonSerdeUtil.createFlinkTableJacksonModule(JsonSerdeUtil.java:133)
at
org.a.f.table.planner.plan.nodes.exec.serde.JsonSerdeUtil.<clinit>(JsonSerdeUtil.java:111)
"ForkJoinPool-3-worker-7" #23 daemon prio=5 os_prio=0 cpu=54.83ms
elapsed=996.00s tid=0x00007ff11c50c000 nid=0xf0fb in Object.wait()
[0x00007ff12a5f4000]
java.lang.Thread.State: RUNNABLE
at
org.a.f.table.planner.plan.utils.ExecNodeMetadataUtil.addToLookupMap(ExecNodeMetadataUtil.java:235)
at
org.a.f.table.planner.plan.utils.ExecNodeMetadataUtil.<clinit>(ExecNodeMetadataUtil.java:156)
{code}
was:
This is a fun one!
ExecNodeMetadataUtil and JsonSerdeUtil have a circular dependency in their
static initialization, which can cause a classloading lockup when 2 threads are
running the class initialization of each class at the same time because during
class initialization they hold a lock.
https://ternarysearch.blogspot.com/2013/07/static-initialization-deadlock.html
JsonSerdeUtils#createFlinkTableJacksonModule calls into the
ExecNodeMetadataUtil, while ExecNodeMetadataUtil#addToLookupMap calls into the
JsonSerdeUtils.
{code}
Feb 22 00:31:58 "ForkJoinPool-3-worker-11" #25 daemon prio=5 os_prio=0
cpu=219.87ms elapsed=995.99s tid=0x00007ff11c50e000 nid=0xf0fc in Object.wait()
[0x00007ff12a4f3000]
Feb 22 00:31:58 java.lang.Thread.State: RUNNABLE
Feb 22 00:31:58 at
org.apache.flink.table.planner.plan.nodes.exec.serde.JsonSerdeUtil.createFlinkTableJacksonModule(JsonSerdeUtil.java:133)
Feb 22 00:31:58 at
org.apache.flink.table.planner.plan.nodes.exec.serde.JsonSerdeUtil.<clinit>(JsonSerdeUtil.java:111)
Feb 22 00:31:58 "ForkJoinPool-3-worker-7" #23 daemon prio=5 os_prio=0
cpu=54.83ms elapsed=996.00s tid=0x00007ff11c50c000 nid=0xf0fb in Object.wait()
[0x00007ff12a5f4000]
Feb 22 00:31:58 java.lang.Thread.State: RUNNABLE
Feb 22 00:31:58 at
org.apache.flink.table.planner.plan.utils.ExecNodeMetadataUtil.addToLookupMap(ExecNodeMetadataUtil.java:235)
Feb 22 00:31:58 at
org.apache.flink.table.planner.plan.utils.ExecNodeMetadataUtil.<clinit>(ExecNodeMetadataUtil.java:156)
{code}
> Classloading deadlock between ExecNodeMetadataUtil and JsonSerdeUtil
> --------------------------------------------------------------------
>
> Key: FLINK-34496
> URL: https://issues.apache.org/jira/browse/FLINK-34496
> Project: Flink
> Issue Type: Bug
> Components: Table SQL / Planner
> Affects Versions: 1.18.1
> Reporter: Chesnay Schepler
> Priority: Major
> Fix For: 1.19.0, 1.18.2, 1.20.0
>
>
> This is a fun one!
> ExecNodeMetadataUtil and JsonSerdeUtil have a circular dependency in their
> static initialization, which can cause a classloading lockup when 2 threads
> are running the class initialization of each class at the same time because
> during class initialization they hold a lock.
> https://ternarysearch.blogspot.com/2013/07/static-initialization-deadlock.html
> JsonSerdeUtils#createFlinkTableJacksonModule calls into the
> ExecNodeMetadataUtil, while ExecNodeMetadataUtil#addToLookupMap calls into
> the JsonSerdeUtils.
> {code}
> "ForkJoinPool-3-worker-11" #25 daemon prio=5 os_prio=0 cpu=219.87ms
> elapsed=995.99s tid=0x00007ff11c50e000 nid=0xf0fc in Object.wait()
> [0x00007ff12a4f3000]
> java.lang.Thread.State: RUNNABLE
> at
> org.a.f.table.planner.plan.nodes.exec.serde.JsonSerdeUtil.createFlinkTableJacksonModule(JsonSerdeUtil.java:133)
> at
> org.a.f.table.planner.plan.nodes.exec.serde.JsonSerdeUtil.<clinit>(JsonSerdeUtil.java:111)
> "ForkJoinPool-3-worker-7" #23 daemon prio=5 os_prio=0 cpu=54.83ms
> elapsed=996.00s tid=0x00007ff11c50c000 nid=0xf0fb in Object.wait()
> [0x00007ff12a5f4000]
> java.lang.Thread.State: RUNNABLE
> at
> org.a.f.table.planner.plan.utils.ExecNodeMetadataUtil.addToLookupMap(ExecNodeMetadataUtil.java:235)
> at
> org.a.f.table.planner.plan.utils.ExecNodeMetadataUtil.<clinit>(ExecNodeMetadataUtil.java:156)
> {code}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)