|
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
|
|
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
|