Seaside 2.8 under load (There is no free space in this set!)

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

Seaside 2.8 under load (There is no free space in this set!)

Ramon Leon-5
I just ported my app to Seaside 2.8 and under production load I'm suddenly
getting a whole bunch of "There is no free space in this set!" errors.

I say a previous thread mention this
http://www.iam.unibe.ch/pipermail/smallwiki/2007-March/002656.html but it
was related to backtracking state, which I'm not currently using.

Lukas any idea what's going on here?

Here's the full error details...

VM: unix - a SmalltalkImage
Image: Squeak3.9 [latest update: #7067]

SecurityManager state:
Restricted: false
FileAccess: true
SocketAccess: true
Working Dir /etc/squeak7
Trusted Dir /etc/squeak7/secure
Untrusted Dir /etc/squeak7/My Squeak

Error(Exception)>>signal
        Receiver: Error: There is no free space in this set!
        Arguments and temporary variables:

        Receiver's instance variables:
                messageText: 'There is no free space in this set!'
                tag: nil
                signalContext: Error(Exception)>>signal
                handlerContext: BlockContext>>on:do:
                outerContext: nil

Error(Exception)>>signal:
        Receiver: Error: There is no free space in this set!
        Arguments and temporary variables:
                signalerText: 'There is no free space in this set!'
        Receiver's instance variables:
                messageText: 'There is no free space in this set!'
                tag: nil
                signalContext: Error(Exception)>>signal
                handlerContext: BlockContext>>on:do:
                outerContext: nil

Dictionary(Object)>>error:
        Receiver: a Dictionary(
<ArnRequest>
<Availability DisplayCurrency="USD" SearchTimeout="30"> <HotelA...etc...
        Arguments and temporary variables:
                aString: 'There is no free space in this set!'
        Receiver's instance variables:
                tally: 10
                array: {
<ArnRequest>
<Availability DisplayCurrency="USD" SearchTimeout="30"> <...etc...

Dictionary(Set)>>findElementOrNil:
        Receiver: a Dictionary(
<ArnRequest>
<Availability DisplayCurrency="USD" SearchTimeout="30"> <HotelA...etc...
        Arguments and temporary variables:
                anObject:
<ArnRequest>
<Availability DisplayCurrency="USD" SearchTimeout="30">...etc...
                index: 0
        Receiver's instance variables:
                tally: 10
                array: {
<ArnRequest>
<Availability DisplayCurrency="USD" SearchTimeout="30"> <...etc...


--- The full stack ---
Error(Exception)>>signal
Error(Exception)>>signal:
Dictionary(Object)>>error:
Dictionary(Set)>>findElementOrNil:
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Dictionary>>at:ifAbsent:
[] in WBBookingEngine>>findRatesFor: {[self cachedRates   at:
availabilityRequest   ifAbsent: [self cachedRates at...]}
BlockContext>>on:do:
WBBookingEngine>>findRatesFor:
WBBookingEngine>>isLowRateGuarantee:
WBPropertyView>>renderAjaxedRateDetailsFor:on:
[] in WBPropertyView>>renderRateCellOn: {[:r :price | self
renderAjaxedRateDetailsFor: price on: r]}
[] in WAGenericTag(WATagBrush)>>waitMax:forWork:thenRender: {[:r | (result
at: #result)   ifNil: [r     text: (self attributeAt: #default...]}
BlockContext>>renderOn:
WARenderCanvas(WACanvas)>>render:
SUPeriodical(SUObject)>>render:on:
SUPeriodical(SUUpdater)>>processOn:
SUPeriodical(SUAjax)>>process
[] in SUPeriodical(SUAjax)>>setCanvas: {[self process]}
SUCallback(WAActionCallback)>>evaluateWithArgument:
SUCallback(WACallback)>>evaluateWithField:
WACallbackStream>>processCallbacksWithOwner:
WBPropertyView(WAPresenter)>>processCallbackStream:
WBPropertyView(SSComponent)>>processCallbackStream:
[] in WBBookingEngine(WAPresenter)>>processChildCallbacks: {[:ea | ea
processCallbackStream: aStream]}
WBPropertyView(WAComponent)>>decorationChainDo:
[] in WBBookingEngine(WAComponent)>>nextPresentersDo: {[:ea | ea
decorationChainDo: aBlock]}
[] in WBBookingEngine(WAComponent)>>childrenDo: {[:ea | ea   ifNotNil:
[aBlock value: ea]]}
OrderedCollection>>do:
WBBookingEngine(WAComponent)>>childrenDo:
WBBookingEngine(WAComponent)>>nextPresentersDo:
WBBookingEngine(WAPresenter)>>processChildCallbacks:
WBBookingEngine(WAPresenter)>>processCallbackStream:
WBBookingEngine(SSComponent)>>processCallbackStream:
[] in WARenderContinuation>>processCallbacks: {[:each | each
processCallbackStream: callbackStream]}
WBBookingEngine(WAComponent)>>decorationChainDo:
WARenderContinuation>>processCallbacks:
[] in WARenderContinuation>>handleRequest: {[self processCallbacks:
aRequest]}
BlockContext>>on:do:
WARenderContinuation>>withNotificationHandler:
WARenderContinuation>>handleRequest:
WARenderContinuation(WASessionContinuation)>>value:
WBBookingSession(WASession)>>performRequest:
[] in WBBookingSession(WASession)>>responseForRequest: {[self
performRequest: aRequest]}
BlockContext>>on:do:
[] in WBBookingSession(WASession)>>withErrorHandler: {[aBlock   on: Error
do: [:e |     self errorHandler handleError: e.    WAP...]}
BlockContext>>on:do:
...etc...

_______________________________________________
seaside mailing list
[hidden email]
http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
Reply | Threaded
Open this post in threaded view
|

Re: Seaside 2.8 under load (There is no free space in this set!)

Lukas Renggli
> I just ported my app to Seaside 2.8 and under production load I'm suddenly
> getting a whole bunch of "There is no free space in this set!" errors.

This is supposed to be fixed in 2.8 (finally, it was broken for years).

Does the WABacktrackingTest pass?

> I say a previous thread mention this
> http://www.iam.unibe.ch/pipermail/smallwiki/2007-March/002656.html but it
> was related to backtracking state, which I'm not currently using.

Do you accidently have a method called #states or #updateStates:
overridden in one of your components?

Seaside seems to try to backtrack a dictionary containing some XML:

    <ArnRequest>
    <Availability DisplayCurrency="USD" SearchTimeout="30"> <HotelA...

Lukas

--
Lukas Renggli
http://www.lukas-renggli.ch
_______________________________________________
seaside mailing list
[hidden email]
http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
Reply | Threaded
Open this post in threaded view
|

RE: Seaside 2.8 under load (There is no free space in thisset!)

Ramon Leon-5
> > I just ported my app to Seaside 2.8 and under production load I'm
> > suddenly getting a whole bunch of "There is no free space
> in this set!" errors.
>
> This is supposed to be fixed in 2.8 (finally, it was broken
> for years).
>
> Does the WABacktrackingTest pass?

Tests pass fine.

> > I say a previous thread mention this
> >
> http://www.iam.unibe.ch/pipermail/smallwiki/2007-March/002656.
> html but
> > it was related to backtracking state, which I'm not currently using.
>
> Do you accidently have a method called #states or #updateStates:
> overridden in one of your components?

Nope.

> Seaside seems to try to backtrack a dictionary containing some XML:
>
>     <ArnRequest>
>     <Availability DisplayCurrency="USD" SearchTimeout="30"> <HotelA...
>
> Lukas

I seem to have fixed it, I found an old thread where someone mentioned
#hash, so I looked and I was using a custom biz object as a key into a
dictionary.  I think I was a bit careless with overriding #= and #hash and
had maybe done something wrong.  I changed the key to a string instead of a
custom object and the error seems to have gone away.  Haven't had an error
in the last hour and a half since pushing this out.

I did actually have this error in 2.7 as well but it was so rare I'd never
bothered with it.  Not sure why 2.8 made it happen at a much higher
frequency, but I don't think it was a Seaside problem now.

Ramon Leon

_______________________________________________
seaside mailing list
[hidden email]
http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
Reply | Threaded
Open this post in threaded view
|

Re: Seaside 2.8 under load (There is no free space in thisset!)

Lukas Renggli
> I seem to have fixed it, I found an old thread where someone mentioned
> #hash, so I looked and I was using a custom biz object as a key into a
> dictionary.  I think I was a bit careless with overriding #= and #hash and
> had maybe done something wrong.  I changed the key to a string instead of a
> custom object and the error seems to have gone away.  Haven't had an error
> in the last hour and a half since pushing this out.

Glad you found the bug.

"There is no free space in this set!" usually happens when an object
within a set or as key of a dictionary changes its hash. Rehashing the
set/dictionary helps, but usually the hash should not depend on
mutable values.

"There is no free space in this set!" occasionally happened in earlier
versions of Seaside, because the backtracking screwed up some internal
data structure of the set/dictionary/bag.

Cheers,
Lukas

--
Lukas Renggli
http://www.lukas-renggli.ch
_______________________________________________
seaside mailing list
[hidden email]
http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside