Skip to main content

This content has been archived and is no longer being updated. Links may not function; however, this content may be relevant to outdated versions of the product.

Support Article

WO Corruption - Database-BadClassDef Message

SA-5661

Summary



User reports that when they cannot open, assign, or reopen a work object as it is corrupted.

Error Messages



In PegaRULES log: Problem opening instance [ID] from the database--it has a bad instance class [class-name]
@Z:sRN:*O*O
@Z:sTN: M_E_VAVA: code: <none> SQLState: Database-BadClassDef Message: [class-name]
@Z:sRN:*O*O
@Z:sTN: M_E_VAVA

Steps to Reproduce



1) Open, assign, or reassign a work object.

Root Cause



The root cause of this problem is in a third-party product integrated with PRPC.

 
The reported problem is caused by IBM JVM JIT compiler:
http://www-01.ibm.com/support/docview.wss?uid=swg1IZ97310
When we convert clipboard data to a stream storage format for use in a BLOB column AND the JIT optimizer incorrectly processed our data that is what causes "Blob Corruption".
More specifically. The following function is used as one part of turning the clipboard object into stream storage format:
com.pega.pegarules.data.internal.clipboard.ByteArrayUtil.putStringUTF16
This is where we have seen the JIT optimizer return the wrong byte array, the byte array returned from this function is NOT the UTF16 byte array it should be. This then gets added to the database pzPVStream column and is wrong.
This does NOT impact every single input byte array to this function, only certain data will cause the JIT optimizer to output the wrong the data.
Exception is not shown when we write the data to the database. You will see exceptions like the following when we try to open and use the data:
Error in Obj-Open-By-Handle com.pega.pegarules.pub.database.BadClassDefinitionException: Problem opening instance <INSTANCE KEY> from the database--it has a bad instance class <FUNKY CLASS NAME>


Resolution



This issue is resolved through the following local changes:
 
1)      This issue was noticed earlier in other environments and below local fix addresses the issue:
You need to add the following to the JVM runtime parameters:
-Xjit:disableIdiomRecognition
 
This is the local fix mentioned on the IBM website. It disables a small feature in the IBM JIT optimizer that prevents it from fully optimizing the class but also prevents the corruption from occurring. The amount of performance degradation is very minimal.
 
2)      Regarding corrupted work objects existing in database, there is no way to repair corrupted data fully. Best recommendation is to re-create the work objects manually. 

Published January 31, 2016 - Updated October 8, 2020

Was this useful?

0% found this useful

Have a question? Get answers now.

Visit the Collaboration Center to ask questions, engage in discussions, share ideas, and help others.

Did you find this content helpful?

Want to help us improve this content?

We'd prefer it if you saw us at our best.

Pega Community has detected you are using a browser which may prevent you from experiencing the site as intended. To improve your experience, please update your browser.

Close Deprecation Notice
Contact us