[Seaside-dev] Re: registering WADocumentHandlers in WAApplication
Dale Henrichs
dhenrich at vmware.com
Wed May 25 17:47:16 UTC 2011
Part of the mystery is solved ... SSFrame has implemented the #style method to return an empty string, so I can fix this one myself and eliminate the cause of the pain.
Should I submit a bug on this? ... the workaround I've got will suffice for now, but I think that this _is_ a bug...
Dale
----- Original Message -----
> I'm doing some load testing of SqueakSource3 in GemStone and I have
> discovered that fairly often (nearly every request), a
> WADocumentHandler for an empty string is stored into the cache of an
> application. The way that the WACache is setup, you get a unique key
> generated each time the empty string is stored, however, the object
> to key map entry (in keysByObject) for the empty string is stomped
> on ... I guess this doesn't affect Seaside in Pharo, but in GemStone
> this causes a commit conflict ...
>
> Here's a chunk of the stack:
>
> 2 WARegistry >> register: @15 line 3 [GsMethod OOP 558534657]
> 3 WARenderContext >> urlForDocument:mimeType:fileName: @10 line 9
> [GsMethod OOP 521811457]
> 4 WAContentElement >> document:mimeType:fileName: @3 line 2
> [GsMethod OOP 145453569]
> 5 WAContentElement >> document:mimeType: @2 line 2 [GsMethod OOP
> 145452801]
> 6 WAContentElement >> document: @3 line 2 [GsMethod OOP 145453825]
> 7 ComplexBlock in WAHtmlRoot >> writeStylesOn: @9 line 6 [GsMethod
> OOP 148753921]
> 8 ComplexBlock in Set >> do: @4 line 11 [GsMethod OOP 9659649]
> 9 ComplexBlock in KeyValueDictionary >> keysDo: @3 line 7 [GsMethod
> OOP 2280705]
> 10 KeyValueDictionary >> keysAndValuesDo: @25 line 21 [GsMethod OOP
> 2283265]
> 11 KeyValueDictionary >> keysDo: @4 line 6 [GsMethod OOP 2280705]
> 12 Set >> do: @5 line 11 [GsMethod OOP 9659649]
> 13 WAHtmlRoot >> writeStylesOn: @12 line 3 [GsMethod OOP 148753921]
> 14 WAHtmlRoot >> writeHeadOn: @6 line 6 [GsMethod OOP 148748545]
> 15 WAHtmlRoot >> openOn: @3 line 4 [GsMethod OOP 148756225]
> 16 WADocument >> open: @3 line 4 [GsMethod OOP 146206721]
> 17 WARenderPhaseContinuation >> processRendering: @25 line 28
> [GsMethod OOP 180412673]
>
> When I'm hitting the system real hard, the commit conflicts can
> severely impact performance ... over an empty string:)
>
> I am tempted to change the #store: algorithm in WACache to first do a
> lookup in the keysByObject map to see if there is an existing key
> and if so, reuse the key...
>
> At this point in time, I haven't looked at the impact on the aging
> algorithms with respect to the WADocumentHandler nor have I looked
> at whether there really does need to be a unique WADocumentHandler
> or not ... Perhaps there's an official way to do this in which case,
> perhaps WARenderContext >> urlForDocument:mimeType:fileName: should
> be changed...
>
> I'll do some experiments tomorrow to see if things break or not.
>
> Either way, though I think that the current behavior is probably a
> bug ...
>
> Dale
More information about the seaside-dev
mailing list