[
https://issues.apache.org/jira/browse/STORM-2527?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Satish Duggana resolved STORM-2527.
-----------------------------------
Resolution: Fixed
> Initialize java.sql.DriverManager earlier to avoid deadlock between
> DriverManager static initializer and driver static initializer
> ----------------------------------------------------------------------------------------------------------------------------------
>
> Key: STORM-2527
> URL: https://issues.apache.org/jira/browse/STORM-2527
> Project: Apache Storm
> Issue Type: Improvement
> Components: storm-jdbc
> Reporter: Jungtaek Lim
> Assignee: Jungtaek Lim
> Time Spent: 1h 40m
> Remaining Estimate: 0h
>
> I met deadlock issue while using JDBC, and found out DriverManager static
> initializer and specific driver's static initializer can call each other.
> (DriverManager loads all java.sql.Driver implementations in static
> initializer, whereas PhoenixDriver calls DriverManager explicitly in static
> initializer.)
> Since some other drivers may do the similar thing, instead of relying on
> driver implementation, we just would be better to initialize DriverManager so
> that we can avoid initialization of DriverManager and Driver concurrently.
> {code}
> "Thread-17-641-JDBC-RDB-executor[4 4]" #52 prio=5 os_prio=0
> tid=0x00007f8aedb6f800 nid=0x742 in Object.wait() [0x00007f8a99036000]
> java.lang.Thread.State: RUNNABLE
> at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
> at
> sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
> at
> sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
> at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
> at java.lang.Class.newInstance(Class.java:442)
> at
> java.util.ServiceLoader$LazyIterator.nextService(ServiceLoader.java:380)
> at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:404)
> at java.util.ServiceLoader$1.next(ServiceLoader.java:480)
> at java.sql.DriverManager$2.run(DriverManager.java:603)
> at java.sql.DriverManager$2.run(DriverManager.java:583)
> at java.security.AccessController.doPrivileged(Native Method)
> at java.sql.DriverManager.loadInitialDrivers(DriverManager.java:583)
> at java.sql.DriverManager.<clinit>(DriverManager.java:101)
> at com.mysql.jdbc.Driver.<clinit>(Driver.java:49)
> at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
> at
> sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
> at
> sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
> at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
> at java.lang.Class.newInstance(Class.java:442)
> at
> com.zaxxer.hikari.HikariConfig.setDriverClassName(HikariConfig.java:326)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
> at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> at java.lang.reflect.Method.invoke(Method.java:498)
> at com.zaxxer.hikari.util.PropertyElf.setProperty(PropertyElf.java:163)
> at
> com.zaxxer.hikari.util.PropertyElf.setTargetFromProperties(PropertyElf.java:62)
> at com.zaxxer.hikari.HikariConfig.<init>(HikariConfig.java:128)
> at
> org.apache.storm.jdbc.common.HikariCPConnectionProvider.prepare(HikariCPConnectionProvider.java:46)
> - locked <0x0000000080c72b48> (a
> org.apache.storm.jdbc.common.HikariCPConnectionProvider)
> at
> org.apache.storm.jdbc.bolt.AbstractJdbcBolt.prepare(AbstractJdbcBolt.java:49)
> at
> org.apache.storm.jdbc.bolt.JdbcInsertBolt.prepare(JdbcInsertBolt.java:78)
> at
> org.apache.storm.daemon.executor$fn__6951$fn__6964.invoke(executor.clj:794)
> at org.apache.storm.util$async_loop$fn__555.invoke(util.clj:482)
> at clojure.lang.AFn.run(AFn.java:22)
> at java.lang.Thread.run(Thread.java:745)
> "Thread-7-631-JDBC-PHOENIX-executor[3 3]" #42 prio=5 os_prio=0
> tid=0x00007f8aed6ea000 nid=0x738 in Object.wait() [0x00007f8a99a42000]
> java.lang.Thread.State: RUNNABLE
> at
> org.apache.phoenix.jdbc.PhoenixDriver.<clinit>(PhoenixDriver.java:128)
> at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
> at
> sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
> at
> sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
> at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
> at java.lang.Class.newInstance(Class.java:442)
> at
> com.zaxxer.hikari.HikariConfig.setDriverClassName(HikariConfig.java:326)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
> at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> at java.lang.reflect.Method.invoke(Method.java:498)
> at com.zaxxer.hikari.util.PropertyElf.setProperty(PropertyElf.java:163)
> at
> com.zaxxer.hikari.util.PropertyElf.setTargetFromProperties(PropertyElf.java:62)
> at com.zaxxer.hikari.HikariConfig.<init>(HikariConfig.java:128)
> at
> org.apache.storm.jdbc.common.HikariCPConnectionProvider.prepare(HikariCPConnectionProvider.java:46)
> - locked <0x0000000080b98f60> (a
> org.apache.storm.jdbc.common.HikariCPConnectionProvider)
> at
> org.apache.storm.jdbc.bolt.AbstractJdbcBolt.prepare(AbstractJdbcBolt.java:49)
> at
> org.apache.storm.jdbc.bolt.JdbcInsertBolt.prepare(JdbcInsertBolt.java:78)
> at
> org.apache.storm.daemon.executor$fn__6951$fn__6964.invoke(executor.clj:794)
> at org.apache.storm.util$async_loop$fn__555.invoke(util.clj:482)
> at clojure.lang.AFn.run(AFn.java:22)
> at java.lang.Thread.run(Thread.java:745)
> {code}
--
This message was sent by Atlassian JIRA
(v6.3.15#6346)