[Glass] SafelyPerformBlockRequiringAbort error
Otto Behrens
otto at finworks.biz
Mon Oct 3 23:56:01 PDT 2022
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.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.gemtalksystems.com/mailman/archives/glass/attachments/20221004/b897a348/attachment.htm>
More information about the Glass
mailing list