<div dir="ltr"><div>Hi,<br></div><div><br></div><div>I'm getting an MNU error SafelyPerformBlockRequiringAbort class does not understand  #'do:' when I try to process a seaside request.</div><div><br></div><div>I'm building a GemStone 3.6.5 database starting with GemStone64Bit3.6.5-x86_64.Linux/bin/extent0.seaside.dbf and then loading all our Seaside / Magritte / Zinc stuff in there. The versions that we are loading are not the same as what is shipped in that seaside.dbf, some of it may be older.</div><div><br></div><div>Perhaps someone out there has seen this and can point me in the right direction? More details below:</div><div><br></div><div><div>If I look at the code, it is the call to #, that triggers it (more source code below):</div><div>      [ result := resultBlock value: aNativeRequest ]<br>        on: WARetryHttpRequest , SafelyPerformBlockRequiringAbort<br>        do: [ :ex | <br></div><div><br></div><div>SafelyPerformBlockRequiringAbort is a notification, that should be something that one can list in the exception handler, I think.</div><div><br></div><div>a MessageNotUnderstood occurred (error 2010), a SafelyPerformBlockRequiringAbort class does not understand  #'do:'<br>1 GRGemStonePlatform >> logError:title:shouldCommit: @2 line 6  [GsNMethod 62714625]<br>2 GRGemStonePlatform >> logError:title: @2 line 3  [GsNMethod 61628417]<br>3 WAGsZincAdaptor >> internalServerErrorMessage: @16 line 14  [GsNMethod 165070593]<br>4 [] in GRGemStonePlatform >> seasideProcessRequest:adaptor:resultBlock: @31 line 15  [GsNMethod 163916289]<br>5 MessageNotUnderstood (AbstractException) >> _executeHandler: @7 line 11  [GsNMethod 3780353]<br>6 MessageNotUnderstood (AbstractException) >> _signalWith: @1 line 2  [GsNMethod 3771905]<br>7 MessageNotUnderstood (AbstractException) >> signal @2 line 47  [GsNMethod 3784193]<br>8 SafelyPerformBlockRequiringAbort class (Object) >> doesNotUnderstand: @9 line 10  [GsNMethod 6476545]<br>9 SafelyPerformBlockRequiringAbort class (Object) >> _doesNotUnderstand:args:envId:reason: @8 line 14  [GsNMethod 6432001]<br>10 SafelyPerformBlockRequiringAbort class (Object) >> accompaniedBy:do: @2 line 6  [GsNMethod 5462017]<br>11 Set (Collection) >> addAll: @7 line 7  [GsNMethod 3491073]<br>12 Set (UnorderedCollection) >> , @4 line 5  [GsNMethod 47934209]<br>13 [] in GRGemStonePlatform >> seasideProcessRequestWithRetry:resultBlock: @15 line 13  [GsNMethod 163915777]<br>14 ExecBlock0 (ExecBlock) >> ensure: @2 line 12  [GsNMethod 5925633]<br>15 TransientRecursionLock >> critical: @11 line 12  [GsNMethod 41372417]<br>16 GRGemStonePlatform >> seasideProcessRequestWithRetry:resultBlock: @3 line 6  [GsNMethod 147897857]<br>17 [] in GRGemStonePlatform >> seasideProcessRequest:adaptor:resultBlock: @17 line 6  [GsNMethod 199570945]<br>18 Array (Collection) >> do: @5 line 10  [GsNMethod 3489793]<br>19 [] in GRGemStonePlatform >> seasideProcessRequest:adaptor:resultBlock: @7 line 5  [GsNMethod 163916545]<br>20 ExecBlock0 (ExecBlock) >> on:do: @3 line 44  [GsNMethod 5913601]<br>21 GRGemStonePlatform >> seasideProcessRequest:adaptor:resultBlock: @2 line 12  [GsNMethod 147898113]<br>22 WAGsZincAdaptor >> process: @3 line 4  [GsNMethod 165070849]<br>23 ZnSeasideServerAdaptorDelegate >> handleRequest: @3 line 4  [GsNMethod 166077697]<br></div><div><br></div><div>seasideProcessRequestWithRetry: aNativeRequest resultBlock: resultBlock<br>  "answer nil to retry request"<br><br>  | result retryRequest retryException |<br>  self transactionMutex<br>    critical: [<br>      System inTransaction<br>        ifTrue: [ self doAbortTransaction ]<br>        ifFalse: [ self doBeginTransaction ].<br>      retryRequest := false.<br>      System _sessionCacheStatAt: 0 put: (System _sessionCacheStatAt: 0) + 1. "requests received"<br>      [ result := resultBlock value: aNativeRequest ]<br>        on: WARetryHttpRequest , SafelyPerformBlockRequiringAbort<br>        do: [ :ex |<br>          retryRequest := true.<br>          retryException := ex ].<br>self transactionMutex privateLockingProcess: Processor activeProcess.<br>      retryRequest<br>        ifTrue: [<br>          (retryException isKindOf: SafelyPerformBlockRequiringAbort)<br>            ifTrue: [<br>              "Abort and start a transaction"<br>              self doBeginTransaction.<br>              retryException block value: true. "block is expected to do it's own commit, but make sure we've left transaction mode"<br>              self doAbortTransaction ]<br>            ifFalse: [<br>              "lock not acquired - unwind the stack to this point and leave transaction mode"<br>              self doAbortTransaction "self<br>saveLogEntry: (WAObjectLogEntry trace: retryException logMessage request: aNativeRequest object: retryException description)<br>shouldCommit: true" ].<br>          ^ nil "retry request" ].<br>      self doCommitTransaction<br>        ifFalse: [<br>          | conflicts |<br>          conflicts := System transactionConflicts.<br>          self doAbortTransaction.<br>          self<br>            saveLogEntry:<br>              (WAObjectLogEntry<br>                warn: 'Commit failure - retrying'<br>                request: aNativeRequest url<br>                object: conflicts)<br>            shouldCommit: true.<br>          ^ nil "retry request" ].<br>      System _sessionCacheStatAt: 1 put: (System _sessionCacheStatAt: 1) + 1 "requests processed (successful)" ].<br>  ^ result</div></div><div><br></div><div>Thanks</div><br clear="all"><div><div dir="ltr" class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div><div dir="ltr"><table width="600" cellpadding="0" cellspacing="0" border="0" style="color:rgb(0,0,0);font-family:Times;font-size:medium"><tbody><tr><td width="400" valign="bottom"><p style="margin:0px;padding:0px"><span style="font-size:18px;color:rgb(146,148,151);font-family:Calibri,sans-serif;font-weight:700">Otto Behrens</span><br></p><p style="font-size:18px;font-weight:700;color:rgb(146,148,151);font-family:Calibri,sans-serif;margin:0px;padding:0px"><span style="font-size:14px;font-weight:300;margin:0px;padding:0px">+27 82 809 2375</span></p></td><td width="200" valign="middle"><img src="https://www.finworks.biz/signature/finworks-signature-logo.png" width="200" height="38" alt="FINWorks" style="display:block;border:0px;width:200px;height:38px;margin:0px;padding:0px"></td></tr></tbody></table><table width="600" cellpadding="0" cellspacing="0" border="0" style="color:rgb(0,0,0);font-family:Times;font-size:medium"><tbody><tr><td height="5"></td></tr></tbody></table><table width="600" cellpadding="0" cellspacing="0" border="0" style="color:rgb(0,0,0);font-family:Times;font-size:medium;border-bottom:1px solid rgb(200,28,36)"><tbody><tr><td height="15"></td></tr></tbody></table><table width="600" cellpadding="0" cellspacing="0" border="0" style="color:rgb(0,0,0);font-family:Times;font-size:medium"><tbody><tr><td height="20"></td></tr></tbody></table><table width="600" cellpadding="0" cellspacing="0" border="0" style="color:rgb(0,0,0);font-family:Times;font-size:medium"><tbody><tr><td width="15" valign="top" style="display:inline-block"><a href="http://za.linkedin.com/in/waltherbehrens" style="color:rgb(17,85,204)" target="_blank"><img src="https://www.finworks.biz/signature/finworks-linkedin-logo.png" width="15" height="15" alt="FINWorks" style="display:inline-block;border:0px;width:15px;height:15px;margin-top:1.5px;padding:0px"></a></td><td width="250" valign="top" style="display:inline-block"><a href="http://www.finworks.biz/" style="color:rgb(200,28,36);font-family:Calibri,sans-serif;margin-left:10px;margin-top:0px;padding-top:0px;font-size:11pt;display:inline-block" target="_blank">www.finworks.biz</a></td></tr></tbody></table><table width="600" cellpadding="0" cellspacing="0" border="0" style="color:rgb(0,0,0);font-family:Times;font-size:medium"><tbody><tr><td height="10"></td></tr></tbody></table><table width="600" cellpadding="0" cellspacing="0" border="0" style="color:rgb(0,0,0);font-family:Times;font-size:medium"><tbody><tr><td><p style="font-size:10px;color:rgb(146,148,151);font-family:Calibri,sans-serif;text-align:justify">Disclaimer & Confidentiality Note: This email is intended solely for the use of the individual or entity named above as it may contain information that is confidential and privileged. If you are not the intended recipient, be advised that any dissemination, distribution or copying of this email is strictly prohibited. FINWorks cannot be held liable by any person other than the addressee in respect of any opinions, conclusions, advice or other information contained in this email.</p></td></tr></tbody></table></div></div></div></div></div></div>