[PEAK] Heads up: '_open()' signature to change soon

Phillip J. Eby pje at telecommunity.com
Tue Mar 23 19:33:38 EST 2004

Hey all.  If you're using any 'storage.ManagedConnection' subclasses, such 
as custom SQL/LDAP/whatever connection types, you should be aware that the 
'_open()' method signature is going to change in a4.  Currently, the 
'connection' binding calls '_open()' with no parameters, but in future this 
will be '_open(address)', so you'll define the open method as:

     def _open(self,address):
         # ...

and you'll need to use the passed-in address, as 'self.address' will no 
longer be available.

This is in preparation for supporting automatic connection 
failover.  ManagedConnection will be changed to allow connecting to each of 
several possible addresses if the preceding addresses failed.  This will be 
done by calling _open() with each address in turn until the operation succeeds.

You'll be able to specify multiple addresses using 
'naming.Reference("connection.classname", ["addr1","addr2",...])', or the 
corresponding 'ref:' URL syntax in a URL.  Then, the managed connection 
will be created with a collection of the addresses to be tried.

Note, by the way, that once this feature is added, it will automatically 
provide simple failover capability to all managed connection types, 
including SQL and LDAP connections, as well as any custom connection types 
you've created for Jabber or Spread or whatever else.

Oh, and there will probably be a couple of other things you'll have to add 
to your existing connection classes, like the protocol (class or interface) 
your connection class expects its addresses to conform to, and an exception 
class (or tuple thereof) that should be used to trigger failover, as 
opposed to being treated as a program error.  (Maybe there'll be a method 
that gets called to validate a particular exception value as well; I 
haven't finished fleshing out the design here just yet.)

More information about the PEAK mailing list