Written by

Sr Sales Engineer (Public Sector) at InterSystems Corporation
Question Chip Gore · Nov 14, 2016

Unexpected ROLLFAIL error in an object %Save() call

In writing some code on:

Cache for Windows (x86-64) 2015.1 (Build 429U) Fri Feb 13 2015 14:37:23 EST

I noticed an unexpected "ROLLFAIL" error when a Unique Index fail was generated in a %Save() call.

The object SHOULD fail to save, since the Unique criteria is not met, but I didn't expect to see a ROLLFAIL error as the "Last Error".

When running the following class code:

Class BUG.Test Extends %Persistent
{

Property Field1 As %String;

Property Field2 As %String;

Index idx1 On Field1 [ Unique ];

ClassMethod Test()
{
    kill ^BUG.TestD
    kill ^BUG.TestI

    ; Should work fine
    set record1 = ##class(BUG.Test).%New()
    set record1.Field1 = "Bosco"
    set record1.Field2 = "Jones"
    set sc = record1.%Save()
    if $$$ISERR(sc) {
        do $System.OBJ.DisplayError(sc)
    } else {
        write !,"Save OK ID: "_record1.%Id()
    }

    ; Should work fine
    set record2 = ##class(BUG.Test).%New()
    set record2.Field1 = "Waffles"
    set record2.Field2 = "Syrup"
    set sc = record2.%Save()
    if $$$ISERR(sc) {
        do $System.OBJ.DisplayError(sc)
    } else {
        write !,"Save OK ID: "_record2.%Id()
    }

    ; Should fail on duplicate "unique" value for Field1
    set record3 = ##class(BUG.Test).%New()
    set record3.Field1 = "Bosco"
    set record3.Field2 = "Jones"
    set sc = record3.%Save()
    if $$$ISERR(sc) {
        do $System.OBJ.DisplayError(sc)
    } else {
        write !,"Save OK ID: "_record3.%Id()
    }
}

I get this as the output.

>d ##class(BUG.Test).Test()
 
Save OK ID: 1
Save OK ID: 2
ERROR #5808: Key not unique: BUG.Test:idx1:^BUG.TestI("idx1"," BOSCO")
ERROR #5002: Cache error: <ROLLFAIL>%TRollBack+10^%occTransaction

Because when I execute:

>d $System.OBJ.DisplayError(%objlasterror)
 
ERROR #5002: Cache error: <ROLLFAIL>%TRollBack+10^%occTransaction

Is the "ROLLFAIL" the expected error and I've just never noticed before? Or is this something that has changed in recent times? It seems odd that the "Key Not Unique" isn't the "last error".

Comments

David.M · Nov 14, 2016

Is journaling on?

0
Brendan Bannon · Nov 14, 2016

I agree that Journaling off is a likely cause.  I just tested you code on 2015.1 and i did not have this problem.

0
Peter Smit · Nov 17, 2016

I've seen this happen when the hard drive is full

0
Chip Gore  Nov 28, 2016 to Peter Smit

This may well have been the issue, "File full" tripped complete journaling off and subsequent save fail "undo" was failing to rollback. This makes sense. Thanks

0