Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

WASession >> #unregister does signal an error #851

Closed
dalehenrich opened this issue Jul 18, 2015 · 3 comments
Closed

WASession >> #unregister does signal an error #851

dalehenrich opened this issue Jul 18, 2015 · 3 comments
Assignees
Milestone

Comments

@dalehenrich
Copy link
Member

Ran into this when I clicked on New Session button in counter while testing not tranlogged in Seaside3.2 ....

Here's the stack (frame 13 is the bad boy) and the arg to #remove: is a WASession instance:

1. WAInteractiveGemServerErrorHandler>>handleException: @2 line 2
2. [] in WAError(WAExceptionHandler)>>handleExceptionsDuring: @3 line 5
3. WAError(ExecBlock)>>on:do: @3 line 44
4. [] in WAInteractiveGemServerErrorHandler(WAExceptionHandler)>>handleExceptionsDuring: @3 line 8
5. [] in ExecBlock1(ExecBlock)>>on:do: @5 line 51
6. WAError(AbstractException)>>_executeHandler: @4 line 8
7. WAError(AbstractException)>>_signalWith: @1 line 1
8. WAError(AbstractException)>>signal: @3 line 7
9. WAError class(AbstractException class)>>signal: @3 line 4
10. WABulkReapingCache class(GRObject class)>>error: @3 line 2
11. WABulkReapingCache(GRObject)>>error: @3 line 2
12. WABulkReapingCache(Object)>>subclassResponsibility @2 line 3
13. WABulkReapingCache>>remove: @2 line 2
14. WAApplication(WARegistry)>>unregister: @3 line 2
15. WANotTranloggedSession(WARequestHandler)>>unregister @4 line 4
16. WANotTranloggedSession>>unregister @4 line 5
17. WANewSessionToolPlugin>>execute @3 line 2
18. [] in WANewSessionToolPlugin(WAPlugin)>>renderContentOn: @3 line 8
19. WANewSessionToolPlugin(ExecBlock)>>valueWithPossibleArguments: @7 line 4
20. WAActionCallback>>evaluateWithArgument: @3 line 2
21. WAActionCallback(WACallback)>>evaluateWithFieldValues: @4 line 2
22. [] in WACallbackRegistry>>handle: @5 line 10
23. Array(Collection)>>do: @6 line 10
24. WACallbackRegistry>>handle: @10 line 9
25. WACallbackProcessingActionContinuation>>basicPerformAction @6 line 3
26. [] in WACallbackProcessingActionContinuation(WAActionPhaseContinuation)>>performAction @3 line 2
27. WACallbackProcessingActionContinuation(ExecBlock)>>onException:do: @2 line 66
28. WACallbackProcessingActionContinuation(ExecBlock)>>on:do: @5 line 49
29. WAInteractiveGemServerErrorHandler(WAExceptionHandler)>>handleExceptionsDuring: @3 line 3
30. [] in ExecBlock0(WARenderLoopContinuation)>>withNotificationHandlerDo: @3 line 20
31. ExecBlock0(ExecBlock)>>on:do: @3 line 44
32. WACallbackProcessingActionContinuation(WARenderLoopContinuation)>>withNotificationHandlerDo: @9 line 21
33. WACallbackProcessingActionContinuation(WAActionPhaseContinuation)>>performAction @3 line 2
34. [] in WACallbackProcessingActionContinuation>>performAction @3 line 3
35. WACallbackProcessingActionContinuation(ExecBlock)>>ensure: @2 line 12
36. WACallbackProcessingActionContinuation>>performAction @3 line 3
37. WACallbackProcessingActionContinuation(WAActionPhaseContinuation)>>handleFiltered: @2 line 2
38. [] in WACallbackProcessingActionContinuation(WARequestHandler)>>handle: @4 line 4
39. WACallbackProcessingActionContinuation(ExecBlock)>>on:do: @3 line 44
40. WACurrentRequestContext class(WADynamicVariable class)>>use:during: @3 line 4
41. [] in WAGemStoneRequestContext(WARequestContext)>>push:during: @3 line 5
42. WAGemStoneRequestContext(ExecBlock)>>ensure: @2 line 12
43. WAGemStoneRequestContext(WARequestContext)>>push:during: @4 line 6
44. WACallbackProcessingActionContinuation(WARequestHandler)>>handle: @3 line 4
45. [] in WACallbackProcessingActionContinuation(WASessionContinuation)>>handle: @3 line 5
46. WACallbackProcessingActionContinuation(ExecBlock)>>on:do: @3 line 44
47. WACallbackProcessingActionContinuation(WASessionContinuation)>>withUnregisteredHandlerDo: @3 line 3
48. WACallbackProcessingActionContinuation(WASessionContinuation)>>handle: @5 line 5
49. WANotTranloggedSession(WASession)>>handleFiltered: @22 line 21
50. WATimingToolFilter(WARequestFilter)>>handleFiltered: @3 line 4
51. [] in WATimingToolFilter>>handleFiltered: @3 line 3
52. WATimingToolFilter(ExecBlock)>>ensure: @2 line 12
53. WATimingToolFilter>>handleFiltered: @5 line 4
54. WADeprecatedToolFilter(WARequestFilter)>>handleFiltered: @3 line 4
55. [] in WADeprecatedToolFilter>>handleFiltered: @3 line 2
56. WADeprecatedToolFilter(ExecBlock)>>on:do: @3 line 44
57. WADeprecatedToolFilter>>handleFiltered: @6 line 3
58. WAGsMutualExclusionFilter(WARequestFilter)>>handleFiltered: @3 line 4
59. WAGsMutualExclusionFilter>>handleFiltered: @11 line 11
60. [] in WANotTranloggedSession(WARequestHandler)>>handle: @4 line 4
61. WANotTranloggedSession(ExecBlock)>>on:do: @3 line 44
62. WACurrentRequestContext class(WADynamicVariable class)>>use:during: @3 line 4
63. [] in WAGemStoneRequestContext(WARequestContext)>>push:during: @3 line 5
64. WAGemStoneRequestContext(ExecBlock)>>ensure: @2 line 12
65. WAGemStoneRequestContext(WARequestContext)>>push:during: @4 line 6
66. WANotTranloggedSession(WARequestHandler)>>handle: @3 line 4
67. WAApplication(WARegistry)>>dispatch:to:key: @4 line 6
68. WAApplication(WARegistry)>>handleKeyed:with:context: @2 line 5
69. WAApplication(WARegistry)>>handleFiltered: @16 line 13
70. WAApplication>>handleFiltered: @10 line 8
71. WAExceptionFilter(WARequestFilter)>>handleFiltered: @3 line 4
72. [] in WAExceptionFilter>>handleFiltered: @3 line 7
73. WAExceptionFilter(ExecBlock)>>on:do: @3 line 44
74. WACurrentExceptionHandler class(WADynamicVariable class)>>use:during: @3 line 4
75. [] in WAExceptionFilter>>handleFiltered: @3 line 6
76. WAExceptionFilter(ExecBlock)>>onException:do: @2 line 66
77. WAExceptionFilter(ExecBlock)>>on:do: @5 line 49
78. WAInteractiveGemServerErrorHandler(WAExceptionHandler)>>handleExceptionsDuring: @3 line 3
79. WAExceptionFilter>>handleFiltered: @6 line 4
80. [] in WAApplication(WARequestHandler)>>handle: @4 line 4
81. WAApplication(ExecBlock)>>on:do: @3 line 44
82. WACurrentRequestContext class(WADynamicVariable class)>>use:during: @3 line 4
83. [] in WAGemStoneRequestContext(WARequestContext)>>push:during: @3 line 5
84. WAGemStoneRequestContext(ExecBlock)>>ensure: @2 line 12
85. WAGemStoneRequestContext(WARequestContext)>>push:during: @4 line 6
86. WAApplication(WARequestHandler)>>handle: @3 line 4
87. WADispatcher>>handleFiltered:named: @4 line 5
88. WADispatcher>>handleFiltered: @9 line 6
89. [] in WADispatcher(WARequestHandler)>>handle: @4 line 4
90. WADispatcher(ExecBlock)>>on:do: @3 line 44
91. WACurrentRequestContext class(WADynamicVariable class)>>use:during: @3 line 4
92. [] in WAGemStoneRequestContext(WARequestContext)>>push:during: @3 line 5
93. WAGemStoneRequestContext(ExecBlock)>>ensure: @2 line 12
94. WAGemStoneRequestContext(WARequestContext)>>push:during: @4 line 6
95. WADispatcher(WARequestHandler)>>handle: @3 line 4
96. WADispatcher>>handleFiltered:named: @4 line 5
97. WADispatcher>>handleFiltered: @9 line 6
98. [] in WADispatcher(WARequestHandler)>>handle: @4 line 4
99. WADispatcher(ExecBlock)>>on:do: @3 line 44
100. WACurrentRequestContext class(WADynamicVariable class)>>use:during: @3 line 4
101. [] in WAGemStoneRequestContext(WARequestContext)>>push:during: @3 line 5
102. WAGemStoneRequestContext(ExecBlock)>>ensure: @2 line 12
103. WAGemStoneRequestContext(WARequestContext)>>push:during: @4 line 6
104. WADispatcher(WARequestHandler)>>handle: @3 line 4
105. [] in WAZincNewGemServerAdaptor(WAServerAdaptor)>>handleRequest: @4 line 4
106. WAZincNewGemServerAdaptor(ExecBlock)>>on:do: @3 line 44
107. WAZincNewGemServerAdaptor(WAServerAdaptor)>>handleRequest: @3 line 5
108. WAZincNewGemServerAdaptor(WAServerAdaptor)>>handle: @2 line 4
109. [] in WAZincNewGemServerAdaptor(WAServerAdaptor)>>process: @3 line 6
110. WAZincNewGemServerAdaptor(ExecBlock)>>ensure: @2 line 12
111. WAZincNewGemServerAdaptor(WAServerAdaptor)>>process: @5 line 7
112. [] in WAZincNewGemServerAdaptor(WAGsZincAdaptor)>>process: @3 line 6
113. [] in GRGemStonePlatform>>seasideProcessRequestWithRetry:resultBlock: @3 line 12
114. GRGemStonePlatform(ExecBlock)>>on:do: @3 line 44
115. [] in GRGemStonePlatform>>seasideProcessRequestWithRetry:resultBlock: @12 line 13
116. GRGemStonePlatform(ExecBlock)>>ensure: @2 line 12
117. TransientRecursionLock>>critical: @12 line 12
118. GRGemStonePlatform>>seasideProcessRequestWithRetry:resultBlock: @4 line 6
119. [] in GRGemStonePlatform>>seasideProcessRequest:adaptor:resultBlock: @3 line 6
120. Array(Collection)>>do: @6 line 10
121. [] in GRGemStonePlatform>>seasideProcessRequest:adaptor:resultBlock: @4 line 5
122. GRGemStonePlatform(ExecBlock)>>on:do: @3 line 44
123. GRGemStonePlatform>>seasideProcessRequest:adaptor:resultBlock: @3 line 12
124. WAZincNewGemServerAdaptor(WAGsZincAdaptor)>>process: @4 line 4
125. ZnSeasideServerAdaptorDelegate>>handleRequest: @3 line 4
126. ZnSeasideServerAdaptorDelegate>>handleRequest:gemServer: @2 line 4
127. [] in ZnGemServerManagingMultiThreadedServer>>authenticateAndDelegateRequest: @9 line 12
128. ZnGemServerManagingMultiThreadedServer(ZnSingleThreadedServer)>>authenticateRequest:do: @5 line 6
129. ZnGemServerManagingMultiThreadedServer>>authenticateAndDelegateRequest: @3 line 8
130. [] in ZnGemServerManagingMultiThreadedServer>>handleRequestProtected: @3 line 6
131. ZnGemServerManagingMultiThreadedServer(ExecBlock)>>on:do: @3 line 44
132. [] in ZnSeasideNewGemServer(GemServer)>>gemServer:exceptionSet:beforeUnwind:ensure: @3 line 4
133. ZnSeasideNewGemServer(ExecBlock)>>ensure: @2 line 12
134. ZnSeasideNewGemServer(GemServer)>>gemServer:exceptionSet:beforeUnwind:ensure: @3 line 22
135. ZnSeasideNewGemServer(GemServer)>>gemServer:exceptionSet:beforeUnwind: @2 line 3
136. ZnGemServerManagingMultiThreadedServer>>serve:onError: @3 line 5
137. ZnGemServerManagingMultiThreadedServer>>handleRequestProtected: @3 line 6
138. ZnGemServerManagingMultiThreadedServer(ZnSingleThreadedServer)>>handleRequest: @6 line 9
139. [] in ZnGemServerManagingMultiThreadedServer>>executeOneRequestResponseOn: @6 line 20
140. ZnGemServerManagingMultiThreadedServer(ExecBlock)>>on:do: @3 line 44
141. [] in ZnSeasideNewGemServer(GemServer)>>gemServer:exceptionSet:beforeUnwind:ensure: @3 line 4
142. ZnSeasideNewGemServer(ExecBlock)>>ensure: @2 line 12
143. ZnSeasideNewGemServer(GemServer)>>gemServer:exceptionSet:beforeUnwind:ensure: @3 line 22
144. ZnSeasideNewGemServer(GemServer)>>gemServer:beforeUnwind:ensure: @3 line 3
145. ZnSeasideNewGemServer(GemServer)>>gemServer:ensure: @2 line 3
146. ZnGemServerManagingMultiThreadedServer>>serve:ensure: @3 line 4
147. ZnGemServerManagingMultiThreadedServer>>executeOneRequestResponseOn: @3 line 10
148. [] in ZnGemServerManagingMultiThreadedServer>>serveConnectionsOn: @3 line 16
149. [] in ZnCurrentServer class(DynamicVariable class)>>value:during: @4 line 9
150. ZnCurrentServer class(ExecBlock)>>ensure: @2 line 12
151. ZnCurrentServer class(DynamicVariable class)>>value:during: @7 line 10
152. [] in ZnGemServerManagingMultiThreadedServer>>serveConnectionsOn: @5 line 15
153. ZnGemServerManagingMultiThreadedServer(ExecBlock)>>valueWithArguments: @1 line 1
154. GsProcess>>_start @8 line 16
155. GsNMethod class>>_gsReturnToC @1 line 1

Not exactly clear what needs to happen here, since compatibility needs to be maintained with alternate cache implementations ... or removeKey: needs to be used ...

@dalehenrich dalehenrich modified the milestone: Seaside 3.2 Jul 18, 2015
@dalehenrich
Copy link
Member Author

@marschall could you share your thoughts about this particular problem .... it appears that the only solution involves using keyAtValue: which can be pretty expensive ... alternately one would have to implement a bi-directional bulk reaping cache ... or ???

I'm going to go with keyAtValue: for the time being, because I need to find out if there are any other changes (like WASession continuations references and a possible change to WASnapshot) that might be needed for Seaside3.2 to use not tranlogged objects ...

@marschall marschall self-assigned this Jul 20, 2015
@marschall
Copy link
Contributor

The session cache in 3.2 is key → value only which makes the implementation much simper (and use a bit less memory). Which means we can't do #remove: which would require a slow #keyAtValue:

But there is a simple fix. A session now knows it's id, I just need to override #unregister in WASession.

@marschall marschall changed the title WABulkReapingCache>>remove: is implemented as self subclassResponsibility WASession >> #unregister does signal an error Jul 21, 2015
@marschall
Copy link
Contributor

Name: Seaside-Core-pmm.866
Author: pmm
Time: 21 July 2015, 10:49:12.107279 am
UUID: b68ab194-4b4b-495e-b2ad-97f3f8037065
Ancestors: Seaside-Core-pmm.865

Name: Seaside-Session-pmm.184
Author: pmm
Time: 21 July 2015, 10:49:44.143448 am
UUID: d2483266-2429-4139-bed4-cff994c298b3
Ancestors: Seaside-Session-pmm.183

Name: Seaside-Tests-Core-pmm.308
Author: pmm
Time: 21 July 2015, 10:50:14.210584 am
UUID: 9d6f674d-493c-4078-bc4f-ec4a5e01ba78
Ancestors: Seaside-Tests-Core-pmm.307

dalehenrich added a commit to dalehenrich/Seaside that referenced this issue Sep 7, 2015
fix a WAGemStoneRunSeasideGems class>>executeGemCommand:  bug and adjust the ZnSeasideGemServer class>>serverClass
# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants