Ejemplo n.º 1
0
    def send_to_peer(self, peer, sync_to_peer, key):
        peer = peer.lower()
        ssl = False
        if peer.startswith('https://'):
            ssl = True
            peer = peer[8:]
        if peer.startswith('http://'):
            peer = peer[7:]
        try:
            with Timeout(self.conn_timeout):
                if ssl:
                    #print 'HTTPS %s ' % peer
                    conn = HTTPSConnection(peer)
                else:
                    #print 'HTTP %s ' % peer
                    conn = HTTPConnection(peer)
            conn.putrequest(self.req.method, self.req.path_qs)
            conn.putheader('X-Orig-Cluster', self.my_cluster)
            conn.putheader('X-Account-Meta-Orig-Cluster', self.my_cluster)
            conn.putheader('X-Container-Meta-Orig-Cluster', self.my_cluster)
            if key:
                sync_to = sync_to_peer + self.env['PATH_INFO']
                conn.putheader('X-Container-Sync-To', sync_to)
            for header, value in self.req.headers.iteritems():
                if header != 'X-Container-Sync-To':
                    conn.putheader(header, value)
            conn.endheaders(message_body=None)
            with Timeout(self.req_timeout):
                resp = conn.getresponse()
                status = resp.status
                return (status, resp.getheaders(), resp.read())
        except (Exception, Timeout) as e:
            # Print error log
            print >> sys.stderr, peer + ': Exception, Timeout error: %s' % e

        print '<<<<<<<< HTTP_SERVICE_UNAVAILABLE'