[ 
https://issues.apache.org/jira/browse/HIVE-4574?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13660856#comment-13660856
 ] 

Thejas M Nair commented on HIVE-4574:
-------------------------------------

The stack trace of threads in hiveserver2 when it gets into this state looks 
like this -
{code}
- java.util.WeakHashMap.get(java.lang.Object) @bci=72, line=470 (Compiled 
frame; information may be imprecise)
 - com.sun.beans.WeakCache.get(java.lang.Object) @bci=5, line=55 (Interpreted 
frame)
 - com.sun.beans.finder.MethodFinder.findMethod(java.lang.Class, 
java.lang.String, java.lang.Class[]) @bci=33, line=68 (Interpreted frame)
 - java.beans.Statement.getMethod(java.lang.Class, java.lang.String, 
java.lang.Class[]) @bci=3, line=357 (Interpreted frame)
 - java.beans.Statement.invokeInternal() @bci=419, line=287 (Interpreted frame)
 - java.beans.Statement.access$000(java.beans.Statement) @bci=1, line=58 
(Interpreted frame)
 - java.beans.Statement$2.run() @bci=4, line=185 (Interpreted frame)
 - 
java.security.AccessController.doPrivileged(java.security.PrivilegedExceptionAction,
 java.security.AccessControlContext) @bci=0 (Interpreted frame)
 - java.beans.Statement.invoke() @bci=34, line=182 (Compiled frame)
 - java.beans.Expression.getValue() @bci=12, line=153 (Compiled frame)
 - java.beans.DefaultPersistenceDelegate.doProperty(java.lang.Class, 
java.beans.PropertyDescriptor, java.lang.Object, java.lang.Object, 
java.beans.Encoder) @bci=63, line=192 (Interpreted frame)
 - java.beans.DefaultPersistenceDelegate.initBean(java.lang.Class, 
java.lang.Object, java.lang.Object, java.beans.Encoder) @bci=254, line=253 
(Interpreted frame)
 - java.beans.DefaultPersistenceDelegate.initialize(java.lang.Class, 
java.lang.Object, java.lang.Object, java.beans.Encoder) @bci=23, line=400 
(Interpreted frame)
 - java.beans.PersistenceDelegate.writeObject(java.lang.Object, 
java.beans.Encoder) @bci=42, line=118 (Interpreted frame)
 - java.beans.Encoder.writeObject(java.lang.Object) @bci=26, line=74 
(Interpreted frame)
 - java.beans.XMLEncoder.writeObject(java.lang.Object) @bci=9, line=327 
(Interpreted frame)
 - java.beans.Encoder.writeExpression(java.beans.Expression) @bci=36, line=330 
(Interpreted frame)
 - java.beans.XMLEncoder.writeExpression(java.beans.Expression) @bci=46, 
line=454 (Interpreted frame)
 - java.beans.PersistenceDelegate.writeObject(java.lang.Object, 
java.beans.Encoder) @bci=28, line=115 (Interpreted frame)
 - java.beans.Encoder.writeObject(java.lang.Object) @bci=26, line=74 
(Interpreted frame)
 - java.beans.XMLEncoder.writeObject(java.lang.Object) @bci=9, line=327 
(Interpreted frame)
 - java.beans.Encoder.writeExpression(java.beans.Expression) @bci=36, line=330 
(Interpreted frame)
 - java.beans.XMLEncoder.writeExpression(java.beans.Expression) @bci=46, 
line=454 (Interpreted frame)
 - java.beans.DefaultPersistenceDelegate.doProperty(java.lang.Class, 
java.beans.PropertyDescriptor, java.lang.Object, java.lang.Object, 
java.beans.Encoder) @bci=79, line=194 (Interpreted frame)
 - java.beans.DefaultPersistenceDelegate.initBean(java.lang.Class, 
java.lang.Object, java.lang.Object, java.beans.Encoder) @bci=254, line=253 
(Interpreted frame)
 - java.beans.DefaultPersistenceDelegate.initialize(java.lang.Class, 
java.lang.Object, java.lang.Object, java.beans.Encoder) @bci=23, line=400 
(Interpreted frame)
 - java.beans.PersistenceDelegate.writeObject(java.lang.Object, 
java.beans.Encoder) @bci=42, line=118 (Interpreted frame)
 - java.beans.Encoder.writeObject(java.lang.Object) @bci=26, line=74 
(Interpreted frame)
 - java.beans.XMLEncoder.writeObject(java.lang.Object) @bci=9, line=327 
(Interpreted frame)
.... (many more java.beans* calls in stack)
....
 - java.beans.XMLEncoder.writeObject(java.lang.Object) @bci=9, line=327 
(Interpreted frame)
 - java.beans.Encoder.writeObject1(java.lang.Object) @bci=12, line=258 
(Interpreted frame)
 - java.beans.Encoder.cloneStatement(java.beans.Statement) @bci=46, line=271 
(Interpreted frame)
 - java.beans.Encoder.writeStatement(java.beans.Statement) @bci=2, line=301 
(Interpreted frame)
 - java.beans.XMLEncoder.writeStatement(java.beans.Statement) @bci=12, line=400 
(Interpreted frame)
 - java.beans.XMLEncoder.writeObject(java.lang.Object) @bci=34, line=330 
(Interpreted frame)
 - 
org.apache.hadoop.hive.ql.exec.Utilities.serializeMapRedWork(org.apache.hadoop.hive.ql.plan.MapredWork,
 java.io.OutputStream) @bci=41, line=549 (Interpreted frame)
 - 
org.apache.hadoop.hive.ql.exec.Utilities.setMapRedWork(org.apache.hadoop.conf.Configuration,
 org.apache.hadoop.hive.ql.plan.MapredWork, java.lang.String) @bci=53, line=396 
(Interpreted frame)
 - 
org.apache.hadoop.hive.ql.exec.ExecDriver.execute(org.apache.hadoop.hive.ql.DriverContext)
 @bci=1273, line=410 (Interpreted frame)
{code}
                
> XMLEncoder thread safety issues in openjdk7 causes HiveServer2 to be stuck
> --------------------------------------------------------------------------
>
>                 Key: HIVE-4574
>                 URL: https://issues.apache.org/jira/browse/HIVE-4574
>             Project: Hive
>          Issue Type: Bug
>          Components: HiveServer2
>    Affects Versions: 0.11.0
>            Reporter: Thejas M Nair
>            Assignee: Thejas M Nair
>
> In open jdk7, XMLEncoder.writeObject call leads to calls to 
> java.beans.MethodFinder.findMethod(). MethodFinder class not thread safe 
> because it uses a static WeakHashMap that would get used from multiple 
> threads. See -
> http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/7-b147/com/sun/beans/finder/MethodFinder.java#46
> Concurrent access to HashMap implementation that are not thread safe can 
> sometimes result in infinite-loops and other problems. If jdk7 is in use, it 
> makes sense to synchronize calls to XMLEncoder.writeObject .

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to