servermanager.py 文件源码

python
阅读 23 收藏 0 点赞 0 评论 0

项目:networking-zte 作者: openstack 项目源码 文件源码
def rest_call(self, action, resource, data, headers, ignore_codes,
                  timeout=False):
        good_first = sorted(self.servers, key=lambda x: x.failed)
        first_response = None
        for active_server in good_first:
            ret = active_server.rest_call(action, resource, data, headers,
                                          timeout,
                                          reconnect=self.always_reconnect)
            # If inconsistent, do a full synchronization
            # if ret[0] == httplib.CONFLICT:
            #    if self.get_topo_function:
            #        data = self.get_topo_function(
            #            **self.get_topo_function_args)
            #        active_server.rest_call('PUT', TOPOLOGY_PATH, data,
            #                                timeout=None)
            # Store the first response as the error to be bubbled up to the
            # user since it was a good server. Subsequent servers will most
            # likely be cluster slaves and won't have a useful error for the
            # user (e.g. 302 redirect to master)
            if not first_response:
                first_response = ret
            if not self.server_failure(ret, ignore_codes):
                active_server.failed = False
                return ret
            else:
                try:
                    LOG.error(_LE('ServerProxy: %(action)s failure for '
                                  'servers:%(server)r Response:'
                                  '%(response)s'),
                              {'action': action,
                               'server': (active_server.server,
                                          active_server.port),
                               'response': unicode(ret[3], "utf-8")})
                    LOG.error(_LE("ServerProxy: Error details: "
                                  "status=%(status)d, reason=%(reason)r, "
                                  "ret=%(ret)s, data=%(data)r"),
                              {'status': ret[0], 'reason': ret[1],
                               'ret': unicode(ret[2], "utf-8"),
                               'data': unicode(ret[3], "utf-8")})
                except Exception as e:
                    LOG.error(_LE("fail to display info, err: %(e)s"),
                              {'e': e})
                active_server.failed = True

        # All servers failed, reset server list and try again next time
        LOG.error(_('ServerProxy: %(action)s failure for all servers: '
                    '%(server)r'),
                  {'action': action,
                   'server': tuple((s.server,
                                    s.port) for s in self.servers)})
        return first_response
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号