[Seaside] production systems experiences

Julian Fitzell julian at beta4.com
Tue May 4 19:02:26 CEST 2004


radoslav hodnicak wrote:
> I have one seaside/squeak system running in production, it ran
> trouble-free for weeks, but today I've seen some very strange behaviour
> that I can't explain from looking at my code - it looks like some action
> blocks got somehow triggered twice. I know that mixing blocks,
> continuations, exceptions etc is messy - has anyone seen similar problems?
> Any tips how to (try) to diagnose this?

Hmm... it's hard to see how that could happen although I do have 
memories of seeing it occasionaly in the past.  This is still 2.3?  I 
wonder whether you had some processes terminated which left the blocks 
marked as if there was still code executing them or something?  The 
session should be protected by WAProcessMonitor to make sure that two 
requests are never running in the same session at the same time.  There 
are a few problems with concurrency under high load in 2.3.  I fixed 
these at work and merged the fixes into 2.5 but should probably look at 
pushing them into 2.3 as well...  so if you were getting quite heavy 
load (we were testing with 20 concurrent users hitting it pretty hard) 
that could also be your problem possibly.

> Related topic - code updates on live system. I've seen some problems with
> that too (I think the stored blocks in squeak don't use the new/changed
> method)

Yeah, you would have that problem alright.  The blocks are storing the 
context where they were created including variable bindings, position in 
the executing code, etc.  The code of the block is also defined in the 
method.  Once you recompile the method, the block may have different 
code, the variables it's referring to are quite likely different, etc. 
You'd encounter the same problem if a process was currently executing 
inside a method when you recompiled it: that process would obviously 
keep running through the old method; it can't switch to the new version 
of the method midway through.

You can see this if you change the #go method of a task while party way 
through the task.  The old task code will continue to be used until you 
enter it from the beginning again.

I personally consider loading code into the live system in use a little 
risky at this point.  A user could make a request while the new code is 
half-loaded, for example (we don't have atomic fileins).  You're also 
completly exposed to something going wrong during filein and making the 
system unusable.  At work, we build a new image, and then use our load 
balancing system to bring the new image up for new users while allowing 
existing sessions to run to completion in the old image.

Julian



More information about the Seaside mailing list