def proxy_write_to_master(xom, request):
""" relay modifying http requests to master and wait until
the change is replicated back.
"""
r = proxy_request_to_master(xom, request, stream=True)
# for redirects, the body is already read and stored in the ``next``
# attribute (see requests.sessions.send)
if r.raw.closed and r.next:
body = r.next.body
else:
body = r.raw.read()
if r.status_code < 400:
commit_serial = int(r.headers["X-DEVPI-SERIAL"])
xom.keyfs.wait_tx_serial(commit_serial)
headers = clean_response_headers(r)
headers[str("X-DEVPI-PROXY")] = str("replica")
if r.status_code == 302: # REDIRECT
# rewrite master-related location to our replica site
master_location = r.headers["location"]
outside_url = request.application_url
headers[str("location")] = str(
master_location.replace(xom.config.master_url.url, outside_url))
return Response(status="%s %s" %(r.status_code, r.reason),
body=body,
headers=headers)
评论列表
文章目录