Bug #1308
dirty share - related abend
0%
History
#1 Updated by Stanislav Lomany over 13 years ago
@44974 - problem:
Testcase: def var bid as integer. find last book no-lock. bid = book.book-id + 1. do transaction on endkey undo, leave on error undo, leave: create book. book.book-id = bid. book.book-title = "TEZZT". book.isbn = "isbn-" + string(bid). pause message "point 1". end. pause message "point 2". Reproduction: Run first instance to "point 1". Run second instance - abend. Stacktrace: Caused by: java.lang.NullPointerException: Table must be non-null at com.goldencode.p2j.persist.RecordIdentifier.<init>(RecordIdentifier.java:50) at com.goldencode.p2j.persist.dirty.DefaultDirtyShareManager.lockSingle(DefaultDirtyShareManager.java:1491) at com.goldencode.p2j.persist.dirty.DefaultDirtyShareManager.getDirtyInfo(DefaultDirtyShareManager.java:1142) at com.goldencode.p2j.persist.dirty.DefaultDirtyShareContext.getDirtyInfo(DefaultDirtyShareContext.java:920) at com.goldencode.p2j.persist.RandomAccessQuery.executeImpl(RandomAccessQuery.java:2888) at com.goldencode.p2j.persist.RandomAccessQuery.execute(RandomAccessQuery.java:2165) at com.goldencode.p2j.persist.RandomAccessQuery.last(RandomAccessQuery.java:999) at com.goldencode.p2j.persist.RandomAccessQuery.last(RandomAccessQuery.java:905) at com.goldencode.testcases.Test$1.body(Test.java:31) at com.goldencode.p2j.util.BlockManager.processBody(BlockManager.java:6983) at com.goldencode.p2j.util.BlockManager.topLevelBlock(BlockManager.java:6890) at com.goldencode.p2j.util.BlockManager.externalProcedure(BlockManager.java:194) at com.goldencode.p2j.util.BlockManager.externalProcedure(BlockManager.java:180) at com.goldencode.testcases.Test.execute(Test.java:19) ...
#2 Updated by Stanislav Lomany about 12 years ago
Imported from JPRM on 2012-04-12 11:53:57.493:
TASKID = 6017 PROJECTID = 101 STATUS = 9 (Closed) DESCRIPTION = dirty share - related abend OWNER = SVL ASSIGNEE = SVL BILLABLE = false PRIORITY = 5 (Normal) PHASE = 31 (Development) COMPONENT = 0 ESTEFFORT = 0.000000 ESTSTART = 2010-10-25 ESTSTOP = ACTSTOP = CASENUM = VENDORID = COMMENT = '' LASTWIP = 2010-10-25
#3 Updated by Stanislav Lomany over 11 years ago
The update (svl_upd20101214a) wasn't applied because it causes errors in Majic (I cannot provide concrete examples).
At this point the original testcase doesn't reproduce the issue, probably because of conversion changes. However you can still reproduce the issue if the FindQuery in this testcase is using a sort string that doesn't match a database index (e.g. "book.bookTitle asc"). Note that a FindQuery that uses such sort string is primarily the hand-written code case.
#4 Updated by Greg Shah over 11 years ago
- Status changed from Closed to WIP
- File svl_upd20101214a.zip added
#5 Updated by Greg Shah over 11 years ago
- Project changed from Majic Conversion to FWD
#6 Updated by Greg Shah over 11 years ago
- Project changed from FWD to Database
#7 Updated by Eric Faulhaber over 11 years ago
This fix (svl_upd20101214a.zip) looks correct to me. The idea was to fail quickly with an IllegalArgumentException during construction of a RandomAccessQuery when the sort string does not match an index, rather than to fail much later during dirty share processing. This would detect a programming error (including conversion error) as early as possible at runtime.
I think we need to re-merge/reapply this fix and rerun regression testing to find out exactly what went wrong in Majic, then go from there.
#8 Updated by Eric Faulhaber over 11 years ago
- Tracker changed from Feature to Bug