Project

General

Profile

Bug #1308

dirty share - related abend

Added by Stanislav Lomany over 13 years ago. Updated over 11 years ago.

Status:
WIP
Priority:
Normal
Target version:
-
Start date:
10/25/2010
Due date:
% Done:

0%

billable:
No
vendor_id:
GCD
case_num:

svl_upd20101214a.zip (28.5 KB) Greg Shah, 10/29/2012 06:25 AM

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

#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

Also available in: Atom PDF