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