def deadHost(self, s_id, reason=''):
     t,host = self.open[s_id]
     if host in self.hosts:
         pdlogging.log("marking host %s down (%s)\n"%(str(host), reason),
                         datestamp=1)
         self.hosts.remove(host)
     if host in self.openconns:
         del self.openconns[host]
     if host in self.totalconns:
         del self.totalconns[host]
     self.badhosts[host] = (time(), reason)
     # make sure we also mark this session as done.
     self.doneHost(s_id)
    def clientConnectionFailed(self, connector, reason):
        #print "bzzt. we failed,", connector, reason

        # this would hang up the inbound. We don't want that.
        #self.receiver.transport.loseConnection()
        self.receiver.factory.scheduler.deadHost(self, reason)
        next =  self.receiver.factory.scheduler.getHost(self,
                                                    self.receiver.client_addr)
        if next:
            pdlogging.log("retrying with %s\n"%repr(next), datestamp=1)
            host, port = next
            reactor.connectTCP(host, port, self)
        else:
            # No working servers!?
            pdlogging.log("no working servers, manager -> aggressive\n",
                          datestamp=1)
            self.receiver.transport.loseConnection()
Beispiel #3
0
    def checkBadHosts(self, scheduler):
        import time
        forcecheck=0
        badhosts = scheduler.badhosts
        hosts = badhosts.keys()

        if not len(scheduler.hosts):
            # All servers are down! Go into a more aggressive mode for
            # checking.
            forcecheck=1
        for bh in hosts:
            now = time.time()
            when,what = badhosts[bh]
            if forcecheck or (now > when + self.checktime):
                pdlogging.log("re-adding %s automatically\n"%str(bh),
                        datestamp=1)
                name = scheduler.getHostNames()[bh]
                del badhosts[bh]
                scheduler.newHost(bh, name)
Beispiel #4
0
import pdlogging
try:
    import twisted
    from pdnetworktwisted import *
except ImportError:
    pdlogging.log("no twisted available - falling back to asyncore")
    from pdnetworkasyncore import *
 def dataReceived(self, data):
     #print "client data", len(data)
     if self.receiver is None:
         pdlogging.log("client got data, no receiver, tho\n", datestamp=1)
     else:
         self.receiver.transport.write(data)