Java Solaris Communities Sun Store Join SDN My Profile Why Join?
 
Bug Database
Bug Detail
Quick Lists
Top 25 Bugs
Top 25 RFE's
Recently Closed Bugs
Printable Page Printable Page


Bug Database
Bug ID: 6239043
Votes 0
Synopsis TransformerManagementThreadAddTests.java failed
Category java:serviceability
Reported Against
Release Fixed 7(b26)
State 10-Fix Delivered, bug
Priority: 4-Low
Related Bugs 6568395
Submit Date 10-MAR-2005
Description
Regression test/java/lang/instrument/TransformerManagementThreadAddTests failed on the  customer .28 nightly:

http://vmsqe.sfbay/nightly/mantis/DTWS/results/ customer -28-05/ServerVM/Solsparc/comp/Serv_Baseline/INSTRUMENT_REGRESSION-NIGHTLY-Serv_Baseline-ServerVM-comp-Solsparc-2005- customer -28-20-28-06/ResultDir/jtr/TransformerManagementThreadAddTests.javajtr

Here is the results file:

#Test Results (version 2)
#Mon Feb 28 20:53:56 PST 2005
#checksum:1a7bc065abb3cae8
#-----testdescription-----
$file=/net/vmsqe.sfbay/export/backup/UNIFIED-DTF/DTWS/suites/INSTRUMENT_REGRESSION/testbase/test/java/lang/instrument/TransformerManagementThreadAddTests.java
$root=/net/vmsqe.sfbay/export/backup/UNIFIED-DTF/DTWS/suites/INSTRUMENT_REGRESSION/testbase/test
author=Gabriel Adauto, Wily Technology
keywords=bug4882798 othervm shell
run=USER_SPECIFIED build TransformerManagementThreadAddTests\nUSER_SPECIFIED shell MakeJAR.sh redefineAgent\nUSER_SPECIFIED main/othervm -javaagent:redefineAgent.jar TransformerManagementThreadAddTests TransformerManagementThreadAddTests\n
source=TransformerManagementThreadAddTests.java
title=multi-thread test to exercise sync and contention for adds to transformer registry

#-----environment-----

#-----testresult-----
description=file:///net/vmsqe.sfbay/export/backup/UNIFIED-DTF/DTWS/suites/INSTRUMENT_REGRESSION/testbase/test/java/lang/instrument/TransformerManagementThreadAddTests.java
end=Mon Feb 28 20:53:56 PST 2005
environment=regtest
execStatus=Failed. Execution failed: `main' threw exception: ATestCaseScaffold$TestCaseScaffoldException: TT[Trans00][001] incorrectly appeared before TT[Trans00][000] i=1 j=507 size=1014
javatestOS=SunOS 5.9 (sparc)
javatestVersion=3.1.2
script=com.sun.javatest.regtest.RegressionScript 
sections=script_messages build shell build main
start=Mon Feb 28 20:53:16 PST 2005
test=java/lang/instrument/TransformerManagementThreadAddTests.java
work=/var/tmp/fhsu/Work/exec/INSTRUMENT_REGRESSION-NIGHTLY-Serv_Baseline-ServerVM-comp-Solsparc-2005- customer -28-20-28-06/java/lang/instrument

#section:script_messages
----------messages:(4/263)----------
JDK under test: (/var/tmp/fhsu/Work/JDK/NIGHTLY/Serv_Baseline/solaris-sparc)
java version "1.6.0-ea"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.6.0-ea-b25)
Java HotSpot(TM) Server VM (build 20050225111854.dcubed.service_hs_merge-debug, mixed mode)

#section:build
----------messages:(3/161)----------
command: build TransformerManagementThreadAddTests 
reason: User specified action: run build TransformerManagementThreadAddTests 
elapsed time (seconds): 0.0050
result: Passed. No need to compile: TransformerManagementThreadAddTests.java

#section:shell
----------messages:(3/139)----------
command: shell MakeJAR.sh  redefineAgent
reason: User specified action: run shell MakeJAR.sh redefineAgent 
elapsed time (seconds): 14.525
----------System.out:(4/276)----------
TESTSRC=/net/vmsqe.sfbay/export/backup/UNIFIED-DTF/DTWS/suites/INSTRUMENT_REGRESSION/testbase/test/java/lang/instrument
TESTJAVA=/var/tmp/fhsu/Work/JDK/NIGHTLY/Serv_Baseline/solaris-sparc
added manifest
adding: InstrumentationHandoff.class(in = 1086) (out= 570)(deflated 47%)
----------System.err:(0/0)----------
result: Passed. Execution successful

#section:build
----------messages:(3/122)----------
command: build TransformerManagementThreadAddTests 
reason: Named class compiled on demand
elapsed time (seconds): 0.0020
result: Passed. No need to compile: TransformerManagementThreadAddTests.java

#section:main
----------messages:(3/295)----------
command: main  -javaagent:redefineAgent.jarTransformerManagementThreadAddTestsTransformerManagementThreadAddTests
reason: User specified action: run main/othervm -javaagent:redefineAgent.jar TransformerManagementThreadAddTests TransformerManagementThreadAddTests 
elapsed time (seconds): 21.542
----------System.out:(2/228)----------
InstrumentationHandoff JPLIS agent initialized
Reading test class from /var/tmp/fhsu/Work/exec/INSTRUMENT_REGRESSION-NIGHTLY-Serv_Baseline-ServerVM-comp-Solsparc-2005- customer -28-20-28-06/classes/java/lang/instrument/DummyClass.class
----------System.err:(19/1465)----------
ATestCaseScaffold$TestCaseScaffoldException: TT[Trans00][001] incorrectly appeared before TT[Trans00][000] i=1 j=507 size=1014
	at ATestCaseScaffold.fail(ATestCaseScaffold.java:70)
	at ATestCaseScaffold.assertTrue(ATestCaseScaffold.java:83)
	at TransformerManagementThreadAddTests.finalCheck(TransformerManagementThreadAddTests.java:201)
	at TransformerManagementThreadAddTests.testMultiThreadAdds(TransformerManagementThreadAddTests.java:115)
	at TransformerManagementThreadAddTests.doRunTest(TransformerManagementThreadAddTests.java:28)
	at ATestCaseScaffold.runTest(ATestCaseScaffold.java:35)
	at TransformerManagementThreadAddTests.main(TransformerManagementThreadAddTests.java:22)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:585)
	at com.sun.javatest.regtest.MainWrapper$MainThread.run(MainWrapper.java:82)
	at java.lang.Thread.run(Thread.java:595)

JavaTest Message: Test threw exception: ATestCaseScaffold$TestCaseScaffoldException: TT[Trans00][001] incorrectly appeared before TT[Trans00][000] i=1 j=507 size=1014
JavaTest Message: shutting down test

STATUS:Failed.`main' threw exception: ATestCaseScaffold$TestCaseScaffoldException: TT[Trans00][001] incorrectly appeared before TT[Trans00][000] i=1 j=507 size=1014
result: Failed. Execution failed: `main' threw exception: ATestCaseScaffold$TestCaseScaffoldException: TT[Trans00][001] incorrectly appeared before TT[Trans00][000] i=1 j=507 size=1014


test result: Failed. Execution failed: `main' threw exception: ATestCaseScaffold$TestCaseScaffoldException: TT[Trans00][001] incorrectly appeared before TT[Trans00][000] i=1 j=507 size=1014
  xxxxx@xxxxx   2005-03-10 20:19:30 GMT
Posted Date : 2006-09-27 23:56:54.0

Another occurrence of this failure in nightly testing:

New INSTRUMENT_REGRESSION failures (from 2007.12.21)
*   java/lang/instrument/TransformerManagementThreadAddTests.java
        This test failed due to "ATestCaseScaffold$TestCaseScaffoldException:
        TT[Trans12][001] incorrectly appeared before TT[Trans12][000]
        i=1 j=507 size=1014" on Linux IA32 Client VM (machine
        raveena). This failure appears to be an occurrence of the
        following bug:

            6239043 4/4 TransformerManagementThreadAddTests.java failed

        The test path is not properly specified in the bug report so
        this test is not showing up on the fail_list. I will add this
        entry to the bug report and that will fix the test path.
Posted Date : 2008-01-02 19:08:14.0
Work Around
N/A
Evaluation
First things first: what does this failure message mean?

    ATestCaseScaffold$TestCaseScaffoldException: TT[Trans00][001] incorrectly appeared before TT[Trans00][000] i=1 j=507 size=1014

In the above output, "Trans00" is the name of a transformer thread
and "001" or "000" are the index values for two transformers that
are associated with the transformer thread. The loop in the test
that generated this error message is:

        for (int j = 1; j < fCheckedTransformers.size(); j++) {
            ThreadTransformer transformer = (ThreadTransformer)fCheckedTransformers.get(j);
            for (int i = 0; i < j; i++) {
                ThreadTransformer currTrans = (ThreadTransformer)fCheckedTransformers.get(i);
                assertTrue(currTrans + " incorrectly appeared before " +
                           transformer + " i=" + i + " j=" + j + " size=" +
                           fCheckedTransformers.size(),
                           !(
                             currTrans.getThread().equals(transformer.getThread()) &&
                             currTrans.getIndex() > transformer.getIndex()));
            }
        }

The above loop asserts that for all ThreadTransformers created
by the same thread, the index values are in ascending order.

The fCheckedTransformers vector is added to by
checkInTransformer(ThreadTransformer transformer) which is
called from ThreadTransformer.transform() which is a wrapper
around SimpleIdentityTransformer.transform().

What this logic appears to be doing is verifying that all
the transformers associated with a transformer thread are
called in ascending index order. In other words, a transformer
thread makes a bunch of transformers, adds them to the
TransformerManager in a particular order and expects them to
be applied to the target class in the same order. Seems like
a perfectly reasonable thing to test.

So what the message says is that 
    there are 1014 transformers in the list to check
    TT[Trans00][001] was found @ index == 1
    TT[Trans00][000] was found @ index == 507

TT[Trans00][001] should have appeared after TT[Trans00][000].
Posted Date : 2008-02-08 01:14:30.0

The following defines when the transform() function is called:

http://java.sun.com/javase/6/docs/api/java/lang/instrument/ClassFileTransformer.html

    Once a transformer has been registered with addTransformer, the
    transformer will be called for every new class definition and
    every class redefinition. Retransformation capable transformers
    will also be called on every class retransformation. The request
    for a new class definition is made with ClassLoader.defineClass
    or its native equivalents. The request for a class redefinition
    is made with Instrumentation.redefineClasses or its native
    equivalents. The request for a class retransformation is made
    with Instrumentation.retransformClasses or its native equivalents.

The test has an executeTransform() function that is called one or more
times. It creates a java.lang.instrument.ClassDefinition object and
then calls java.lang.instrument.redefineClasses(). The first time the
ClassDefinition object is created and every time redefineClasses() is
called, there are calls to the transform() function.

The test doesn't expect the calls that are generated by the initial
creation of the ClassDefinition object. However, if more than one call
to executeTransform() is made before the end of the test, then only
the transform() calls caused by redefineClasses() are logged and the
test passes.

If the test is modified to only call executeTransform() one time, then
the test will fail every time because there will be twice as many
transform() calls as expected and it will look like they are out of
order. In reality, there are two adjacent subsets of data that are in
the right order with respect to their own subset.

If the test is modified to call executeTransform() two or more times,
then the test till pass every time because the errant data logged by
the first executeTransform() call is cleaned up by the second
executeTransform() call.
Posted Date : 2008-02-13 00:54:16.0
Comments
  
  Include a link with my name & email   


PLEASE NOTE: JDK6 is formerly known as Project Mustang