[prev in list] [next in list] [prev in thread] [next in thread] 

List:       openjdk-serviceability-dev
Subject:    Re: OpenDataException thrown when constructing CompositeData for ThreadInfo
From:       Mandy Chung <mandy.chung () oracle ! com>
Date:       2018-10-23 5:34:05
Message-ID: 60adbb17-e1e5-5223-099c-68f064d03838 () oracle ! com
[Download RAW message or body]

Hi Sven,

I created https://bugs.openjdk.java.net/browse/JDK-8212795 to track this 
issue.     NB is using the internal API that is unused in JDK and hence no 
test uncovers this regression.

I have a patch that passes a map of key to values to 
CompositeDataSupport rather than passing two synchronized arrays which 
is error prone.    Can you help verify if this patch properly fixes NB issue:
http://cr.openjdk.java.net/~mchung/jdk12/webrevs/8212795/webrev.00/

I will also work on a test in the meantime.

Mandy

On 10/21/18 5:38 PM, Sven Reimers wrote:
> Hi,
> 
> one more problem to go
> 
> After applying the proposed fix for the 
> ThreadINfoCompositeData.compositeTyoe() the following exception is raised:
> 
> java.lang.reflect.InvocationTargetException
> at 
> java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native 
> Method)
> at 
> java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
>  at 
> java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>  at java.base/java.lang.reflect.Method.invoke(Method.java:566)
> at 
> org.netbeans.modules.sampler.SamplesOutputStream.toCompositeData(SamplesOutputStream.java:178)
>  at 
> org.netbeans.modules.sampler.SamplesOutputStream.access$400(SamplesOutputStream.java:44)
>  at 
> org.netbeans.modules.sampler.SamplesOutputStream$Sample.writeToStream(SamplesOutputStream.java:285)
>  at 
> org.netbeans.modules.sampler.SamplesOutputStream$Sample.access$300(SamplesOutputStream.java:253)
>  at 
> org.netbeans.modules.sampler.SamplesOutputStream.close(SamplesOutputStream.java:202)
>  at org.netbeans.modules.sampler.Sampler.stopSampling(Sampler.java:231)
> at org.netbeans.modules.sampler.Sampler.stop(Sampler.java:207)
> at 
> org.netbeans.core.ui.sampler.SelfSamplerAction$1.doInBackground(SelfSamplerAction.java:90)
>  at java.desktop/javax.swing.SwingWorker$1.call(SwingWorker.java:304)
> at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
> at java.desktop/javax.swing.SwingWorker.run(SwingWorker.java:343)
> at 
> java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
>  at 
> java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
>  at java.base/java.lang.Thread.run(Thread.java:835)
> Caused by: java.lang.AssertionError: 
> javax.management.openmbean.OpenDataException: Argument value of wrong 
> type for item lockInfo: value false, type 
> javax.management.openmbean.CompositeType(name=java.lang.management.LockInfo,items=(( \
> itemName=className,itemType=javax.management.openmbean.SimpleType(name=java.lang.Str \
> ing)),(itemName=identityHashCode,itemType=javax.management.openmbean.SimpleType(name=java.lang.Integer))))
>  at 
> java.management/sun.management.ThreadInfoCompositeData.getCompositeData(ThreadInfoCompositeData.java:135)
>  at 
> java.management/sun.management.ThreadInfoCompositeData.toCompositeData(ThreadInfoCompositeData.java:72)
>                 
> ... 18 more
> Caused by: javax.management.openmbean.OpenDataException: Argument 
> value of wrong type for item lockInfo: value false, type 
> javax.management.openmbean.CompositeType(name=java.lang.management.LockInfo,items=(( \
> itemName=className,itemType=javax.management.openmbean.SimpleType(name=java.lang.Str \
> ing)),(itemName=identityHashCode,itemType=javax.management.openmbean.SimpleType(name=java.lang.Integer))))
>  at 
> java.management/javax.management.openmbean.CompositeDataSupport.<init>(CompositeDataSupport.java:235)
>  at 
> java.management/javax.management.openmbean.CompositeDataSupport.<init>(CompositeDataSupport.java:118)
>  at 
> java.management/sun.management.ThreadInfoCompositeData.getCompositeData(ThreadInfoCompositeData.java:130)
>                 
> ... 19 more
> 
> Seems the sequence of values is broken for ThreadInfoCompoositeData also.
> 
> Changing the sequence so that lockInfoData is after isNative fixes the 
> problem:
> 
> final Object[] threadInfoItemValues = {
> threadInfo.getThreadId(),
> threadInfo.getThreadName(),
> threadInfo.getThreadState().name(),
> threadInfo.getBlockedTime(),
> threadInfo.getBlockedCount(),
> threadInfo.getWaitedTime(),
> threadInfo.getWaitedCount(),
> threadInfo.getLockName(),
> threadInfo.getLockOwnerId(),
> threadInfo.getLockOwnerName(),
> stackTraceData,
> threadInfo.isSuspended(),
> threadInfo.isInNative(),
> lockInfoData,
> lockedMonitorsData,
> lockedSyncsData,
> threadInfo.isDaemon(),
> threadInfo.getPriority(),
> };
> 
> With both of this fixes in place I can finally get the self sampling 
> in NetBeans to work on JDK 12.. (and 11)
> 
> Thanks for looking into this
> 
> -Sven
> -- 
> Sven Reimers
> 
> * Senior Expert Software Architect
> * Java Champion
> * JUG Leader JUG Bodensee: http://www.jug-bodensee.de
> * Duke's Choice Award Winner 2009


[Attachment #3 (text/html)]

<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    Hi Sven,<br>
    <br>
    I created <a class="moz-txt-link-freetext" \
href="https://bugs.openjdk.java.net/browse/JDK-8212795">https://bugs.openjdk.java.net/browse/JDK-8212795</a> \
to track  this issue.     NB is using the internal API that is unused in JDK and
    hence no test uncovers this regression.   <br>
    <br>
    I have a patch that passes a map of key to values to
    CompositeDataSupport rather than passing two synchronized arrays
    which is error prone.    Can you help verify if this patch properly
    fixes NB issue:<br>
        
    <a class="moz-txt-link-freetext" \
href="http://cr.openjdk.java.net/~mchung/jdk12/webrevs/8212795/webrev.00/">http://cr.openjdk.java.net/~mchung/jdk12/webrevs/8212795/webrev.00/</a><br>
  <br>
    I will also work on a test in the meantime.<br>
    <br>
    Mandy<br>
    <br>
    <div class="moz-cite-prefix">On 10/21/18 5:38 PM, Sven Reimers
      wrote:<br>
    </div>
    <blockquote type="cite"
cite="mid:CAP+Jvx4z6X0FEW43Foz6dcjmoQfNROTNZL8Si0A3yPqo5G1gEQ@mail.gmail.com">
      <meta http-equiv="content-type" content="text/html; charset=utf-8">
      <div dir="ltr">
        <div dir="ltr">
          <div dir="ltr">
            <div>Hi,</div>
            <div><br>
            </div>
            <div>one more problem to go</div>
            <div><br>
            </div>
            <div>
              <div>After applying the proposed fix for the
                ThreadINfoCompositeData.compositeTyoe() the following
                exception is raised:</div>
              <div><br>
              </div>
              <div>java.lang.reflect.InvocationTargetException<br>
              </div>
              <div><span class="gmail-Apple-tab-span" \
style="white-space:pre">	</span>at \
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native  Method)</div>
              <div><span class="gmail-Apple-tab-span" \
style="white-space:pre">	</span>at \
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)</div>
                
              <div><span class="gmail-Apple-tab-span" \
style="white-space:pre">	</span>at \
java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)</div>
                
              <div><span class="gmail-Apple-tab-span" \
style="white-space:pre">	</span>at \
                java.base/java.lang.reflect.Method.invoke(Method.java:566)</div>
              <div><span class="gmail-Apple-tab-span" \
style="white-space:pre">	</span>at \
org.netbeans.modules.sampler.SamplesOutputStream.toCompositeData(SamplesOutputStream.java:178)</div>
                
              <div><span class="gmail-Apple-tab-span" \
style="white-space:pre">	</span>at \
org.netbeans.modules.sampler.SamplesOutputStream.access$400(SamplesOutputStream.java:44)</div>
                
              <div><span class="gmail-Apple-tab-span" \
style="white-space:pre">	</span>at \
org.netbeans.modules.sampler.SamplesOutputStream$Sample.writeToStream(SamplesOutputStream.java:285)</div>
                
              <div><span class="gmail-Apple-tab-span" \
style="white-space:pre">	</span>at \
org.netbeans.modules.sampler.SamplesOutputStream$Sample.access$300(SamplesOutputStream.java:253)</div>
                
              <div><span class="gmail-Apple-tab-span" \
style="white-space:pre">	</span>at \
org.netbeans.modules.sampler.SamplesOutputStream.close(SamplesOutputStream.java:202)</div>
                
              <div><span class="gmail-Apple-tab-span" \
style="white-space:pre">	</span>at \
                org.netbeans.modules.sampler.Sampler.stopSampling(Sampler.java:231)</div>
                
              <div><span class="gmail-Apple-tab-span" \
style="white-space:pre">	</span>at \
                org.netbeans.modules.sampler.Sampler.stop(Sampler.java:207)</div>
              <div><span class="gmail-Apple-tab-span" \
style="white-space:pre">	</span>at \
org.netbeans.core.ui.sampler.SelfSamplerAction$1.doInBackground(SelfSamplerAction.java:90)</div>
                
              <div><span class="gmail-Apple-tab-span" \
style="white-space:pre">	</span>at \
                java.desktop/javax.swing.SwingWorker$1.call(SwingWorker.java:304)</div>
                
              <div><span class="gmail-Apple-tab-span" \
style="white-space:pre">	</span>at \
                java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)</div>
                
              <div><span class="gmail-Apple-tab-span" \
style="white-space:pre">	</span>at \
                java.desktop/javax.swing.SwingWorker.run(SwingWorker.java:343)</div>
              <div><span class="gmail-Apple-tab-span" \
style="white-space:pre">	</span>at \
java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)</div>
                
              <div><span class="gmail-Apple-tab-span" \
style="white-space:pre">	</span>at \
java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)</div>
                
              <div><span class="gmail-Apple-tab-span" \
style="white-space:pre">	</span>at  \
java.base/java.lang.Thread.run(Thread.java:835)</div>  <div>Caused by: \
java.lang.AssertionError:  javax.management.openmbean.OpenDataException: Argument
                value of wrong type for item lockInfo: value false, type
javax.management.openmbean.CompositeType(name=java.lang.management.LockInfo,items=((it \
emName=className,itemType=javax.management.openmbean.SimpleType(name=java.lang.String) \
),(itemName=identityHashCode,itemType=javax.management.openmbean.SimpleType(name=java.lang.Integer))))</div>
                
              <div><span class="gmail-Apple-tab-span" \
style="white-space:pre">	</span>at \
java.management/sun.management.ThreadInfoCompositeData.getCompositeData(ThreadInfoCompositeData.java:135)</div>
                
              <div><span class="gmail-Apple-tab-span" \
style="white-space:pre">	</span>at \
java.management/sun.management.ThreadInfoCompositeData.toCompositeData(ThreadInfoCompositeData.java:72)</div>
                
              <div><span class="gmail-Apple-tab-span" \
style="white-space:pre">	</span>...  18 more</div>
              <div>Caused by:
                javax.management.openmbean.OpenDataException: Argument
                value of wrong type for item lockInfo: value false, type
javax.management.openmbean.CompositeType(name=java.lang.management.LockInfo,items=((it \
emName=className,itemType=javax.management.openmbean.SimpleType(name=java.lang.String) \
),(itemName=identityHashCode,itemType=javax.management.openmbean.SimpleType(name=java.lang.Integer))))</div>
                
              <div><span class="gmail-Apple-tab-span" \
style="white-space:pre">	</span>at \
java.management/javax.management.openmbean.CompositeDataSupport.&lt;init&gt;(CompositeDataSupport.java:235)</div>
                
              <div><span class="gmail-Apple-tab-span" \
style="white-space:pre">	</span>at \
java.management/javax.management.openmbean.CompositeDataSupport.&lt;init&gt;(CompositeDataSupport.java:118)</div>
                
              <div><span class="gmail-Apple-tab-span" \
style="white-space:pre">	</span>at \
java.management/sun.management.ThreadInfoCompositeData.getCompositeData(ThreadInfoCompositeData.java:130)</div>
                
              <div><span class="gmail-Apple-tab-span" \
style="white-space:pre">	</span>...  19 more</div>
              <div><br>
              </div>
              <div>Seems the sequence of values is broken for
                ThreadInfoCompoositeData also.<br>
              </div>
            </div>
            <div><br>
            </div>
            <div>Changing the sequence so that lockInfoData is after
              isNative fixes the problem:  </div>
            <div><br>
            </div>
            <div>           final Object[] threadInfoItemValues = {</div>
            <div>                  threadInfo.getThreadId(),</div>
            <div>                  threadInfo.getThreadName(),</div>
            <div>                  threadInfo.getThreadState().name(),</div>
            <div>                  threadInfo.getBlockedTime(),</div>
            <div>                  threadInfo.getBlockedCount(),</div>
            <div>                  threadInfo.getWaitedTime(),</div>
            <div>                  threadInfo.getWaitedCount(),</div>
            <div>                  threadInfo.getLockName(),</div>
            <div>                  threadInfo.getLockOwnerId(),</div>
            <div>                  threadInfo.getLockOwnerName(),</div>
            <div>                  stackTraceData,</div>
            <div>                  threadInfo.isSuspended(),</div>
            <div>                  threadInfo.isInNative(),</div>
            <div>                  lockInfoData,</div>
            <div>                  lockedMonitorsData,</div>
            <div>                  lockedSyncsData,</div>
            <div>                  threadInfo.isDaemon(),</div>
            <div>                  threadInfo.getPriority(),</div>
            <div>            };</div>
            <div><br>
            </div>
            <div>With both of this fixes in place I can finally get the
              self sampling in NetBeans to work on JDK 12.. (and 11)</div>
            <div><br>
            </div>
            <div>Thanks for looking into this</div>
            <div><br>
            </div>
            <div>-Sven</div>
            -- <br>
            <div dir="ltr" class="gmail_signature">
              <div dir="ltr">
                <div>
                  <div dir="ltr">
                    <div dir="ltr">
                      <div>Sven Reimers<br>
                        <br>
                        * Senior Expert Software Architect</div>
                      <div>* Java Champion</div>
                      <div>* JUG Leader JUG Bodensee: <a
                          href="http://www.jug-bodensee.de"
                          target="_blank" \
moz-do-not-send="true">http://www.jug-bodensee.de</a><br>  </div>
                      <div>* Duke's Choice Award Winner 2009<br>
                      </div>
                    </div>
                  </div>
                </div>
              </div>
            </div>
          </div>
        </div>
      </div>
    </blockquote>
    <br>
  </body>
</html>



[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic