[ZODB-Dev] Try and fail connect strategy for zeo/zrpc

Tim Peters tim at zope.com
Wed Jul 13 14:21:32 EDT 2005


[Jens Vagelpohl]
>>> Does't the *already included* zeoup.py do exactly what you are trying
>>> to do? See the bin directory of your zope home.

[Sidnei da Silva]
>> Unfortunately no. It uses ClientStorage, which goes through the 1000's
>> of lines of the connection dance using connect threads and large
>> timeouts. Effectively, ClientStorage will retry a connection 'forever'.
>> I just want to see if the port is listening and it smells like ZEO with
>> the minimal reasonable timeout.

[Chris Withers]
> Sounds like zeoup.py doesn't do what it should, which is what you're
> after. How about repairing zeoup.py rather than rolling yet another
> not-really-needed script? ;-)

Sidnei, have you tried opening a ClientStorage with wait=True and
wait_timeout=x, where x is "a small float"?  The docs are unclear, and I
don't know whether it works as intended, but the intent appears to be that
when wait=True, wait_timeout gives the maximum number of seconds you're
willing to wait for a connection to succeed.

If it does work, then I expect that exploiting it is what this comment in
zeoup.py had in mind:

        # TODO:  should do retries w/ exponential backoff.

I can't follow this code, alas, and got stalled in a project trying to
simplify it.  I did note at once that:

    def _wait(self, timeout=None):

does a

                    self._ready.wait(30)

no matter how small `timeout` may be, so I _expect_ it's futile to pass a
timeout value smaller than 30.

    def _wait_sync(self, deadline=None):

also does a

            self._connection.pending(30)

which _appears_ to be another hard-coded barrier to using a
smaller-than-30-seconds timeout effectively.



More information about the ZODB-Dev mailing list