[Glass] SafelyPerformBlockRequiringAbort error

Dale Henrichs dale.henrichs at gemtalksystems.com
Tue Oct 4 18:52:10 PDT 2022


Otto,

This was a head scratcher for a minute, but then I remembered that when you
encounter an undefined Global in GLASS, the reference is replaces by a Set
that references all of the methods(?) that contain a reference to the class
... the Set is magically used when the new class gets defined and the
referencing methods are recompiled ... so you've either got a case where
WARetryHttpRequest was undefined and if it has been defined in your image,
then the magical methods didn't get run correctly ... If WARetryHttpRequest
is present (most likely)  recompiling that method should fix the problem
... and inspecting the Set from the debugger should give you references to
the rest of the methods that reference WARetryHttpRequest ...

I've run out of time and have head to dinner right now ... let me know if
you were able to repair things ... there is a undefined globals test
somewhere that should give you some hints about the magic ... I'm out of
time ... sorry ...

Dale

On Mon, Oct 3, 2022 at 11:56 PM Otto Behrens via Glass <
glass at lists.gemtalksystems.com> wrote:

> Hi,
>
> I'm getting an MNU error SafelyPerformBlockRequiringAbort class does not
> understand  #'do:' when I try to process a seaside request.
>
> 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.
>
> Perhaps someone out there has seen this and can point me in the right
> direction? More details below:
>
> If I look at the code, it is the call to #, that triggers it (more source
> code below):
>       [ result := resultBlock value: aNativeRequest ]
>         on: WARetryHttpRequest , SafelyPerformBlockRequiringAbort
>         do: [ :ex |
>
> SafelyPerformBlockRequiringAbort is a notification, that should be
> something that one can list in the exception handler, I think.
>
> a MessageNotUnderstood occurred (error 2010), a
> SafelyPerformBlockRequiringAbort class does not understand  #'do:'
> 1 GRGemStonePlatform >> logError:title:shouldCommit: @2 line 6  [GsNMethod
> 62714625]
> 2 GRGemStonePlatform >> logError:title: @2 line 3  [GsNMethod 61628417]
> 3 WAGsZincAdaptor >> internalServerErrorMessage: @16 line 14  [GsNMethod
> 165070593]
> 4 [] in GRGemStonePlatform >> seasideProcessRequest:adaptor:resultBlock:
> @31 line 15  [GsNMethod 163916289]
> 5 MessageNotUnderstood (AbstractException) >> _executeHandler: @7 line 11
>  [GsNMethod 3780353]
> 6 MessageNotUnderstood (AbstractException) >> _signalWith: @1 line 2
>  [GsNMethod 3771905]
> 7 MessageNotUnderstood (AbstractException) >> signal @2 line 47
>  [GsNMethod 3784193]
> 8 SafelyPerformBlockRequiringAbort class (Object) >> doesNotUnderstand: @9
> line 10  [GsNMethod 6476545]
> 9 SafelyPerformBlockRequiringAbort class (Object) >>
> _doesNotUnderstand:args:envId:reason: @8 line 14  [GsNMethod 6432001]
> 10 SafelyPerformBlockRequiringAbort class (Object) >> accompaniedBy:do: @2
> line 6  [GsNMethod 5462017]
> 11 Set (Collection) >> addAll: @7 line 7  [GsNMethod 3491073]
> 12 Set (UnorderedCollection) >> , @4 line 5  [GsNMethod 47934209]
> 13 [] in GRGemStonePlatform >> seasideProcessRequestWithRetry:resultBlock:
> @15 line 13  [GsNMethod 163915777]
> 14 ExecBlock0 (ExecBlock) >> ensure: @2 line 12  [GsNMethod 5925633]
> 15 TransientRecursionLock >> critical: @11 line 12  [GsNMethod 41372417]
> 16 GRGemStonePlatform >> seasideProcessRequestWithRetry:resultBlock: @3
> line 6  [GsNMethod 147897857]
> 17 [] in GRGemStonePlatform >> seasideProcessRequest:adaptor:resultBlock:
> @17 line 6  [GsNMethod 199570945]
> 18 Array (Collection) >> do: @5 line 10  [GsNMethod 3489793]
> 19 [] in GRGemStonePlatform >> seasideProcessRequest:adaptor:resultBlock:
> @7 line 5  [GsNMethod 163916545]
> 20 ExecBlock0 (ExecBlock) >> on:do: @3 line 44  [GsNMethod 5913601]
> 21 GRGemStonePlatform >> seasideProcessRequest:adaptor:resultBlock: @2
> line 12  [GsNMethod 147898113]
> 22 WAGsZincAdaptor >> process: @3 line 4  [GsNMethod 165070849]
> 23 ZnSeasideServerAdaptorDelegate >> handleRequest: @3 line 4  [GsNMethod
> 166077697]
>
> seasideProcessRequestWithRetry: aNativeRequest resultBlock: resultBlock
>   "answer nil to retry request"
>
>   | result retryRequest retryException |
>   self transactionMutex
>     critical: [
>       System inTransaction
>         ifTrue: [ self doAbortTransaction ]
>         ifFalse: [ self doBeginTransaction ].
>       retryRequest := false.
>       System _sessionCacheStatAt: 0 put: (System _sessionCacheStatAt: 0) +
> 1. "requests received"
>       [ result := resultBlock value: aNativeRequest ]
>         on: WARetryHttpRequest , SafelyPerformBlockRequiringAbort
>         do: [ :ex |
>           retryRequest := true.
>           retryException := ex ].
> self transactionMutex privateLockingProcess: Processor activeProcess.
>       retryRequest
>         ifTrue: [
>           (retryException isKindOf: SafelyPerformBlockRequiringAbort)
>             ifTrue: [
>               "Abort and start a transaction"
>               self doBeginTransaction.
>               retryException block value: true. "block is expected to do
> it's own commit, but make sure we've left transaction mode"
>               self doAbortTransaction ]
>             ifFalse: [
>               "lock not acquired - unwind the stack to this point and
> leave transaction mode"
>               self doAbortTransaction "self
> saveLogEntry: (WAObjectLogEntry trace: retryException logMessage request:
> aNativeRequest object: retryException description)
> shouldCommit: true" ].
>           ^ nil "retry request" ].
>       self doCommitTransaction
>         ifFalse: [
>           | conflicts |
>           conflicts := System transactionConflicts.
>           self doAbortTransaction.
>           self
>             saveLogEntry:
>               (WAObjectLogEntry
>                 warn: 'Commit failure - retrying'
>                 request: aNativeRequest url
>                 object: conflicts)
>             shouldCommit: true.
>           ^ nil "retry request" ].
>       System _sessionCacheStatAt: 1 put: (System _sessionCacheStatAt: 1) +
> 1 "requests processed (successful)" ].
>   ^ result
>
> Thanks
>
> Otto Behrens
>
> +27 82 809 2375
> [image: FINWorks]
> [image: FINWorks] <http://za.linkedin.com/in/waltherbehrens>
> www.finworks.biz
>
> 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.
> _______________________________________________
> Glass mailing list
> Glass at lists.gemtalksystems.com
> https://lists.gemtalksystems.com/mailman/listinfo/glass
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.gemtalksystems.com/mailman/archives/glass/attachments/20221004/0acb87c5/attachment.htm>


More information about the Glass mailing list