From cfe3c70f0f85dac8174d9f383e5317cd56be94a9 Mon Sep 17 00:00:00 2001
From: Michael Hanselmann <hansmi@google.com>
Date: Mon, 28 Jul 2008 10:17:29 +0000
Subject: [PATCH] Implement signal handling in ganeti-rapi

Reviewed-by: iustinp
---
 daemons/ganeti-rapi | 16 ++++++++++++++--
 1 file changed, 14 insertions(+), 2 deletions(-)

diff --git a/daemons/ganeti-rapi b/daemons/ganeti-rapi
index 29280f82e..817088a01 100755
--- a/daemons/ganeti-rapi
+++ b/daemons/ganeti-rapi
@@ -25,6 +25,7 @@ import glob
 import optparse
 import sys
 import os
+import signal
 
 from ganeti import constants
 from ganeti import errors
@@ -66,6 +67,17 @@ class RESTRequestHandler(http.HTTPRequestHandler):
     return result
 
 
+class RESTHttpServer(http.HTTPServer):
+  def serve_forever(self):
+    """Handle one request at a time until told to quit."""
+    sighandler = utils.SignalHandler([signal.SIGINT, signal.SIGTERM])
+    try:
+      while not sighandler.called:
+        self.handle_request()
+    finally:
+      sighandler.Reset()
+
+
 def ParseOptions():
   """Parse the command line options.
 
@@ -123,8 +135,8 @@ def main():
   log_fd = open(constants.LOG_RAPIACCESS, 'a')
   try:
     apache_log = http.ApacheLogfile(log_fd)
-    httpd = http.HTTPServer(("", options.port), RESTRequestHandler,
-                            httplog=apache_log)
+    httpd = RESTHttpServer(("", options.port), RESTRequestHandler,
+                           httplog=apache_log)
     try:
       httpd.serve_forever()
     finally:
-- 
GitLab