[Zope] Re: CST 0.9 Problems under load?

Chris McDonough chrism@zope.com
Sun, 17 Feb 2002 20:39:06 -0500


> I did a quick search on the nip list archive, but couldn't find Terry
Kerr's
> patch.  Where can I find it?  I'd like to give the patches a try.  The
only
> problem is, the server probably won't see the same kind of load until this
> time next year.  Do you have any good ways of programmatically loading the
> server and invoking the session machinery?  Is this where 'ab' comes in?

Terry's message to me on the subject is attached.  It doesn't sound like the
same problem, though. :-(

There is a module named "Sessions.stresstests.stresstestMultiThread.py" in
the Zope 2.5 sessioning stuff that tries to put the sessioning machinery
under load.  It might be adapted for CST.

If you could create the same problem with "ab", that would be just as valid
a test.  Anything to recreate the error condition(s).

> > I'm afraid for now that I'm going to have to suggest that you either
wait
> > for CST 1.0 (which has not ETA as of now) or try the Zope 2.5 Sessioning
> > machinery.
>
> OK, fair enough.  I realise that CST has turned into a bit of a
side-project
> for you now.  If I manage to reproduce the same sort of results using the
> 2.5.0 session machinery, will I stand a better chance of seeing a fix?
I'd
> love to be able to help, but I'm well over my head at the moment.

If there was a replicable test case that reproduced a specific failure for
CST 0.9, I'd almost certainly be able to fix it in a reasonable amount of
time.  But I'm unable to take action on "it does X under nonspecific
conditions" types of bugreports because I can't even begin to estimate how
long it would take to guess the conditions under which the error is raised.

There's an equal chance of seeing a fix for either CST or Zope 2.5 out of me
the moment, which is just about zero for at least the next two weeks.
:-(  That said, I believe the sessioning stuff in Zope 2.5 is very stable.
I want to write a compatibility layer between its API and the CST API and
release *that* as "CST 1.0 " (for use in Zope older than 2.5) as soon as I
can (if that's even possible).  I've realized that I cannot support both in
good faith and I need to find a way to merge the two codebases somehow.

If I find anything out, I'll send mail to the list.

Sorry again!

- C


Terry's message follows:

Chris,

The problem I was having with the DB connection locking last week is solved.
The patch I explained to you did not fix the problem on our live server,
even
though it did stop the hang for the example on my workstation, so obviosly
the
problem was not related.

The problem on our live server was with CST 0.9.  I noticed many of the
following error, but always ignored them and assumed they were harmless as
advised by somebody on zope-dev a while agao

2001-11-16T06:46:22 ERROR(200) ZODB Close callback failed for
<Products.CoreSessionTracking.SessionDataManager.ConnectionCloser instance
at
0x880680c>
Traceback (innermost last):
   File /usr/local/zope/Zope-2.4.3-src/lib/python/ZODB/Connection.py, line
283,
in close
   File
/usr/local/zope/Zope-2.4.3-src/lib/python/Products/CoreSessionTracking/Sessi
onDataManager.py,
line 581, in __call__
KeyError: _v_container


I noticed that there were exactly 5 of these between each server hang...so I
assume that each one was killing a thread.  So I patched CST 0.9 to prevent
the
exception, and the server has gone from restarting every 20 minutes, to no
restarts in 3 days (since I did the patch)

*** SessionDataManager.py       Fri Oct  5 15:54:29 2001
--- /home/zope/instance/Products/CoreSessionTracking/SessionDataManager.py
Fri Feb  1 16:02:10 2002
***************
*** 578,584 ****
           """ This is called by the 'parent' connection's onCloseCallback
           handler, so that our 'spawned' connection will be closed when
           our parent connection is closed. """
!         del self.sdm._v_container
           if self.conn is not None:
               self.conn.close()
               self.conn=None
--- 579,586 ----
           """ This is called by the 'parent' connection's onCloseCallback
           handler, so that our 'spawned' connection will be closed when
           our parent connection is closed. """
!         if hasattr(self.sdm, '_v_container'):
!             del self.sdm._v_container
           if self.conn is not None:
               self.conn.close()
               self.conn=None


Is there going to be another release of CST, or is session tracking in zope
2.5 it?

terry