Salesforce

SYSTEM ERROR: (40) (14675): Repeatedly NEWing a class with a NO-UNDO TEMP-TABLE in a TRANSACTION

« Go Back

Information

 
TitleSYSTEM ERROR: (40) (14675): Repeatedly NEWing a class with a NO-UNDO TEMP-TABLE in a TRANSACTION
URL Name000028338
Article Number000150782
EnvironmentProduct: OpenEdge
Version: 10.2B, 11.0
OS: All supported platforms
Question/Problem Description
Repeatedly NEWing a class that defines a NO-UNDO TEMP-TABLE inside a TRANSACTION will eventually crash the session, produce protrace and procore files and generate error (40) (14675)
Steps to ReproduceFiles and Steps needed to reproduce this problem are attached to this article (Files_And_Steps_To_Reproduce.zip).
Clarifying Information
The issue occurs only when the code is executed against the r-code of the class.

The issue does not occur when the code is executed against the uncompiled source code of the class.
Error MessageSYSTEM ERROR: Attempt to define too many indexes for area <area number> database <db name>. (40) (14675)
SYSTEM ERROR: Attempt to define too many indexes for area 6 database DBI350Ca02788. (40) (14675)
Defect NumberDefect PSC00241791 / OE00217903
Enhancement Number
Cause
The no UNDO TEMP-TABLE definitions of each class instance NEWed inside the TRANASCTION are not being properly released as they should be.

When there is an active task, the object is linked to a pending reuse chain.
When the outermost transaction ends, objects on the chain are processed and moved to the reusable chain, in the event the temp-table is needed during undo processing necessary for UNDO temp-tables.
For NO-UNDO temp-tables, this results in a number of instances of the same object in memory, which eventually hits the limit on the maximum number of indexes.

The issue does not occur when the code is executed against the uncompiled source code of the class beacuse the AVM does not try to reuse an object unless it has been compiled.
Resolution
Upgrade to OpenEdge 10.2B06 Service Pack or later, OpenEdge 11.1.0 or later.

Any UNDO temp-tables in the class hierarchy are first checked before placing an object on the pending reuse chain then NO-UNDO temp-tables are cleaned out.
  • When there are only NO-UNDO temp-tables, the object is linked to the reusable chain.
  • When the transaction ends, UNDO temp-tables are then linked to the reusable chain.
Workaround
Use the -reusableObjects 0 session startup parameter in the ABL session startup command line.
Notes
Keyword Phrase
Last Modified Date11/20/2020 7:13 AM

Powered by