On Jun 1, 2006, at 12:03 PM, David Binger wrote: >> admin.example.com -> QP site A -> Durus DB A >> www.example.com -> QP site B -> Durus DB A >> another.example.com -> QP site C -> Durus DB A >> >> This way we shouldn't need to run an extern Durus instance, QP site A >> can manage that for us, we get the benefits of being able to manage >> sites individually and don't require any changes to QP to fake the >> domains we sit in, request paths etc. >> >> Can you see any problems with that kind of setup? > > It seems like it would work. > You'll need to remember to restart all sites if > the Durus server for A is restarted. Unless you do a trick similar to below, to re-establish the connection automatically should the server go down or the connection is lost for whatever reason... this is maybe overzealous, that i had written as protection from the now obsolete durus feature that any non-compliant request will shut down the server. In your case you would start the db server for A instead of self.site()'s. Maybe you could also get rid of the initial call to abort() on each hit... wrap the super's process_hit() into the exception block? def process_hit(self, hit, attempt=0): ''' Ensure that the durus server is up, and that this publisher's connection is good. To trigger the potential exception, we do a systematic abort() at the start of each request that is anyway good Durus practice. ''' if attempt < 3: try: self.get_connection().abort() except socket.error, (code,message) : if code == 54: print 'Connection reset by peer... restarting durus server.' self.site.stop_durus() self.site.start_durus() if code in (32,54): print 'Broken pipe... resetting durus connection.' durus_address = self.site.get_durus_address() if durus_address: durus_host, durus_port = durus_address from durus.client_storage import ClientStorage from durus.connection import Connection self.connection = Connection( ClientStorage(port=durus_port, host=durus_host), cache_size=self.site.get_durus_cache_size() ) self.log_exception() attempt += 1 self.process_hit(hit, attempt) super(Publisher, self).process_hit(hit)