'Sends an HTTP request to multiple nodes and aggregates the results.
It attempts the primary nodes concurrently, then iterates over the
handoff nodes as needed.
:param req: a request sent by the client
:param ring: the ring used for finding backend servers
:param part: the partition number
:param method: the method to send to the backend
:param path: the path to send to the backend
(full path ends up being  /<$device>/<$part>/<$path>)
:param headers: a list of dicts, where each dict represents one
backend request that should be made.
:param query_string: optional query string to send to the backend
:param overrides: optional return status override map used to override
the returned status of a request.
:param node_count: optional number of nodes to send request to.
:param node_iterator: optional node iterator.
:returns: a swob.Response object'

def make_requests(self, req, ring, part, method, path, headers, query_string='', overrides=None, node_count=None, node_iterator=None):

    nodes = GreenthreadSafeIterator((node_iterator or self.app.iter_nodes(ring, part)))
    node_number = (node_count or len(ring.get_part_nodes(part)))
    pile = GreenAsyncPile(node_number)
    for head in headers:
        pile.spawn(self._make_request, nodes, part, method, path, head, query_string, self.app.logger.thread_locals)
    response = []
    statuses = []
    for resp in pile:
        if (not resp):
            continue
        response.append(resp)
        statuses.append(resp[0])
        if self.have_quorum(statuses, node_number):
            break
    finished_quickly = pile.waitall(self.app.post_quorum_timeout)
    for resp in finished_quickly:
        if (not resp):
            continue
        response.append(resp)
        statuses.append(resp[0])
    while (len(response) < node_number):
        response.append((HTTP_SERVICE_UNAVAILABLE, '', '', ''))
    (statuses, reasons, resp_headers, bodies) = zip(*response)
    return self.best_response(req, statuses, reasons, bodies, ('%s    %s' % (self.server_type, req.method)), overrides=overrides, headers=resp_headers)
