From 713faea621da08cd132d05693dabb04c21d1ea9b Mon Sep 17 00:00:00 2001 From: Oleksiy Mishchenko <oleksiy@google.com> Date: Fri, 17 Oct 2008 13:06:04 +0000 Subject: [PATCH] ETag passing support. Reviewed-by: imsnah --- daemons/ganeti-rapi | 3 +++ lib/http.py | 5 +++++ lib/rapi/baserlib.py | 7 +++++++ 3 files changed, 15 insertions(+) diff --git a/daemons/ganeti-rapi b/daemons/ganeti-rapi index 88686db1c..d11fefd58 100755 --- a/daemons/ganeti-rapi +++ b/daemons/ganeti-rapi @@ -61,6 +61,9 @@ class RemoteApiHttpServer(http.HttpServer): try: result = fn() + sn = handler.getSerialNumber() + if sn: + req.response_headers[http.HTTP_ETAG] = str(sn) except: logging.exception("Error while handling the %s request", method) raise diff --git a/lib/http.py b/lib/http.py index 12418826f..7a6c0db9e 100644 --- a/lib/http.py +++ b/lib/http.py @@ -65,6 +65,7 @@ HTTP_1_1 = "HTTP/1.1" HTTP_GET = "GET" HTTP_HEAD = "HEAD" +HTTP_ETAG = "ETag" class SocketClosed(socket.error): @@ -372,6 +373,7 @@ class _HttpConnectionHandler(object): self.response_body = None self.response_code = HTTP_OK self.response_content_type = None + self.response_headers = {} self.should_fork = False @@ -484,6 +486,9 @@ class _HttpConnectionHandler(object): self._SendHeader("Date", self._DateTimeHeader()) self._SendHeader("Content-Type", self.response_content_type) self._SendHeader("Content-Length", str(len(self.response_body))) + for key, val in self.response_headers.iteritems(): + self._SendHeader(key, val) + # We don't support keep-alive at this time self._SendHeader("Connection", "close") self.wfile.write("\r\n") diff --git a/lib/rapi/baserlib.py b/lib/rapi/baserlib.py index fde62c838..872b71a6e 100644 --- a/lib/rapi/baserlib.py +++ b/lib/rapi/baserlib.py @@ -137,3 +137,10 @@ class R_Generic(object): self.items = items self.queryargs = queryargs self.post_data = post_data + self.sn = None + + def getSerialNumber(self): + """Get Serial Number. + + """ + return self.sn -- GitLab