[Glass] Mixing Unicode and String instances in Indexes [WAS] Re: Further commits have been disabled for this session because: 'CorruptObj error'. This session must logout.

Dale Henrichs via Glass glass at lists.gemtalksystems.com
Wed Nov 4 10:09:21 PST 2015


Excellent! I will see if this blows up for me as well ... this looks 
like the type of "original" error that I was expecting to see. it is 
worth noting that once you get a corruptObj error like this you will get 
slightly different error when you attempt to commit ...

I've got some more comments below ...

On 10/28/2015 06:36 PM, Mariano Martinez Peck wrote:
> Dale, it is being fairly easy for me to reproduce. You must perform 
> steps 1 to 3 from my original email. Then, for example I executed this 
> code:
>
> "Run a query so that to be sure we use indexes"
> Object new assert: ((UserGlobals at: #IndexesBugReport) select: { 
> :each | each.testSelector = 'aString' }) size = 1.
>
> And then this one:
>
> "Check health of indexes"
> | collectionsWithBadIndexes |
> IndexManager current removeAllIncompleteIndexes.
> collectionsWithBadIndexes := IndexManager current nscsWithBadIndexes.
> Transcript show: 'There are ' , collectionsWithBadIndexes size 
> asString, ' collections with bad indexes.'; cr.
> Transcript show: 'The following are the OOPs of such collections: '.
> collectionsWithBadIndexes do: [ :each | Transcript show: ' - ' , each 
> asOop asString.  ].
> Transcript cr.
>
> That yielded the below error:
>
> Inspect InternalError(AbstractException)>>_signalFromPrimitive: @5 
> line 15a InternalError occurred (error 2261), The object with object 
> ID 20 is corrupt. Reason: 'relops: encrypt (no Unicode collator) -- 
> Unicode strings encountered'/
> --------------------
> .              -> a InternalError occurred (error 2261), The object 
> with object ID 20 is corrupt. Reason: 'relops: encrypt (no Unicode 
> collator) -- Unicode st...
> ..             -> a InternalError occurred (error 2261), The object 
> with object ID 20 is corrupt. Reason: 'relops: encrypt (no Unicode 
> collator) -- Unicode st...
> (class)@       -> InternalError
> (oop)@         -> 325122049
> currGsHandler@ -> nil
> gsArgs@        -> anArray( 20, 'relops: encrypt (no Unicode collator) 
> -- Unicode strings encountered')
> gsDetails@     -> nil
> gsNumber@      -> 2261
> gsReason@      -> nil
> gsResumable@   -> false
> gsStack@       -> nil
> gsTrappable@   -> true
> messageText@   -> 'a InternalError occurred (error 2261), The object 
> with object ID 20 is corrupt. Reason: ''relops: encrypt (no Unicode 
> collator) -- Unicode ...
> tag@           -> nil
This error is telling me that inside the C code for indexes we are 
encountering a Unicode string in an index that has no collator 
associated with (which is true) -- so this a completely valid error ... 
however, I'm not sure that we should be signaling a corrupt obj error 
here ... we want to make sure that commit prohibiting errors (like 
corrupt obj errors) are signalled when there is the possibility that a 
commit will INTRODUCE corruption ... from the stack below I can tell 
that the operation we are performing is a read operation and not a write 
operation (which could introduce corruption into the system) so the 
corruptobj error is not called for
>
>
> The stack associated to that error was:
>
> aTDDebugger
> --------------------
> 1. InternalError(AbstractException)>>_signalFromPrimitive: @5 line 15
> 2. BtreeBasicLeafNode>>_encryptionFor: @1 line 1
> 3. 
> BtreeBasicLeafNode(BtreeLeafNode)>>_auditLeafKeysValuesAndEncryptedDo: 
> @20 line 12
> 4. BtreeBasicLeafNode(BtreeNode)>>auditNsc:for:offset:on: @19 line 15
> 5. PathTerm>>auditNsc:on:level: @17 line 19
> 6. [] in RcIdentityBag(UnorderedCollection)>>_fastAuditEqualityIndexes 
> @22 line 25
> 7. RcIdentityBag(ExecBlock)>>ensure: @2 line 12
> 8. RcIdentityBag(UnorderedCollection)>>_fastAuditEqualityIndexes @8 
> line 52
> 9. RcIdentityBag(UnorderedCollection)>>_fastAuditIndexes @16 line 28
> 10. RcIdentityBag(UnorderedCollection)>>auditIndexes @2 line 15
> 11. [] in ExecBlock1(IndexManager)>>nscsWithBadIndexes @2 line 7
> 12. IdentitySet(UnorderedCollection)>>_reject: @13 line 8
> 13. IdentitySet(UnorderedCollection)>>reject: @10 line 19
> 14. IndexManager>>nscsWithBadIndexes @3 line 5
> 15. Executed Code
> 16. String(CharacterCollection)>>evaluateIn:symbolList:literalVars: @4 
> line 13
> 17. 
> TDWorkspaceClientElementBuilder(TDClientSourceElementBuilder)>>evaluateString: 
> @5 line 3
> 18. 
> TDWorkspaceClientElementBuilder(TDClientSourceElementBuilder)>>doItMenuAction:selectedText: 
> @2 line 2
> 19. 
> TDWorkspaceClientElementBuilder(TDWindowBuilder)>>handleMenuActions:listElement:actionArg: 
> @12 line 10
> 20. [] in 
> TDWorkspaceClientElementBuilder(TDClientSourceElementBuilder)>>menuActionBlock 
> @6 line 8
> 21. 
> TDWorkspaceClientElementBuilder(ExecBlock)>>value:value:value:value:value: 
> @2 line 11
> 22. GsNMethod class>>_gsReturnToC @1 line 1
>
>
> Then I tried to click on the "debug" button from the debugger 
> pre-windows opened by tODE and that yielded yet another problem:
>
>
> Inspect TransactionError(AbstractException)>>_signalFromPrimitive: @5 
> line 15a TransactionError occurred (error 2249), Further commits have 
> been disabled for this session because: 'CorruptObj error'. This 
> session must logout./
> --------------------
> .              -> a TransactionError occurred (error 2249), Further 
> commits have been disabled for this session because: 'CorruptObj 
> error'. This session must...
> ..             -> a TransactionError occurred (error 2249), Further 
> commits have been disabled for this session because: 'CorruptObj 
> error'. This session must...
> (class)@       -> TransactionError
> (oop)@         -> 322639105
> currGsHandler@ -> nil
> gsArgs@        -> anArray( 'CorruptObj error')
> gsDetails@     -> nil
> gsNumber@      -> 2249
> gsReason@      -> nil
> gsResumable@   -> true
> gsStack@       -> nil
> gsTrappable@   -> true
> messageText@   -> 'a TransactionError occurred (error 2249), Further 
> commits have been disabled for this session because: ''CorruptObj 
> error''. This session m...
> tag@           -> nil
> 1@             -> aGsNMethod
> 2@             -> aGsNMethod
> 3@             -> 0
> 4@             -> -111
> 5@             -> -89
>
>
> And this was the stack:
>
>
> aTDDebugger
> --------------------
> 1. TransactionError(AbstractException)>>_signalFromPrimitive: @5 line 15
> 2. System class>>_primitiveCommit: @1 line 1
> 3. System class>>__commit: @2 line 8
> 4. [] in System class>>_localCommit: @2 line 30
> 5. System class(ExecBlock)>>onException:do: @2 line 66
> 6. System class>>_localCommit: @8 line 31
> 7. 
> SessionMethodTransactionBoundaryPolicy(TransactionBoundaryDefaultPolicy)>>commit: 
> @2 line 3
> 8. System class>>_commit: @7 line 16
> 9. System class>>commitTransaction @5 line 7
> 10. [] in TDTopezServer>>commitTransaction @2 line 5
> 11. TDTopezServer(ExecBlock)>>on:do: @3 line 42
> 12. TDTopezServer>>commitTransaction @6 line 13
> 13. [] in TDDebugger(TDAbstractToolBuilder)>>menuActionBlock @5 line 9
> 14. TDMiniToolSpec>>menuAction:actionSymbol:listElement:selectedIndex: 
> @4 line 4
> 15. [] in TDMiniToolClientListElementBuilder>>menuActionBlock @3 line 7
> 16. TDMiniToolClientListElementBuilder(ExecBlock)>>value:value:value: 
> @2 line 11
> 17. GsNMethod class>>_gsReturnToC @1 line 1
>
>

This error and stack (from the click in the debugger) is being triggered 
when the autoCommit in tODE hits a commit error (the commit prohibiting 
bug) ... It's worthwhile noting that tODE will continue to function (the 
prompt in the console should turn red) but nothing will be save to the 
system from this point forward ...

Dale


More information about the Glass mailing list