Bug 47796

GemStone/S 64 Bit

3.4.2, 3.4.1, 3.4

All Platforms

3.4.3

Does not understand #_selectiveAbort in #_resolveRcConflictsWith: during commit

There is a problem with RC commit retry processing that can cause a doesNotUnderstand error on the method #_selectiveAbort in #_resolveRcConflictsWith:.  The call stack will be similar to this:

   (Object) >> _doesNotUnderstand:args:envId:reason: @8 line 13
  [] in RcKeyValueDictionary >> _resolveRcConflictsWith: @37 line 32
  IdentityKeyValueDictionary (KeyValueDictionary) >> keysAndValuesDo: @19 line 15
  RcIndexDictionary (RcKeyValueDictionary) >> _resolveRcConflictsWith: @21 line 31
  System class >> _resolveRcConflicts @17 line 19
  System class >> _resolveRcConflictsForCommit: @4 line
  [] in System class >> _localCommit: @28 line 42
  ExecBlock0 (ExecBlock) >> onException:do: @2 line 66
  System class >> _localCommit: @16 line 44
  GsCommitList >> nbCommit: @12 line 17
  GsCommitList >> commit: @4 line 7
  System class >> _commit: @8 line 16
  System class >> commitTransaction @5 line 7

Workaround

File-in the following code as SystemUser and commit:

! fix 47796
! file-in as SystemUser and commit
!
method: PrivateObject
_primitiveSelectiveAbort
"Performs an abort operation on the receiver. That is, if the object is
 committed, it removes any changes made by the current transaction and allows
 access to the committed state of the object.

 The error #rtErrSelectiveAbort is thrown if the receiver has depMap entries."

<primitive: 274>

self _primitiveFailed: #_primitiveSelectiveAbort .
self _uncontinuableError
%

method: PrivateObject
_selectiveAbort

"Performs an abort operation on the receiver. That is, if the object is
 committed, it removes any changes made by the current transaction and allows
 access to the committed state of the object."

^ self _primitiveSelectiveAbort.
%

Last updated: 10/30/18