From a5c8747fee9c161c9e502ea56a8c9e29b3277ff5 Mon Sep 17 00:00:00 2001 From: Ruud Date: Sat, 19 May 2012 17:32:00 +0200 Subject: [PATCH] Proper restarting of server --- couchpotato/core/_base/_core/main.py | 33 ++++++++++++++++----------------- couchpotato/environment.py | 1 + couchpotato/runner.py | 12 +++++++----- 3 files changed, 24 insertions(+), 22 deletions(-) diff --git a/couchpotato/core/_base/_core/main.py b/couchpotato/core/_base/_core/main.py index a496df6..127a0cf 100644 --- a/couchpotato/core/_base/_core/main.py +++ b/couchpotato/core/_base/_core/main.py @@ -5,7 +5,7 @@ from couchpotato.core.helpers.variable import cleanHost, md5 from couchpotato.core.logger import CPLog from couchpotato.core.plugins.base import Plugin from couchpotato.environment import Env -from flask import request +from tornado.ioloop import IOLoop from uuid import uuid4 import os import platform @@ -18,7 +18,7 @@ log = CPLog(__name__) class Core(Plugin): - ignore_restart = ['Core.crappyRestart', 'Core.crappyShutdown'] + ignore_restart = ['Core.crappyRestart', 'Core.crappyShutdown', 'Updater.check'] shutdown_started = False def __init__(self): @@ -63,30 +63,28 @@ class Core(Plugin): if self.shutdown_started: return - try: - self.urlopen('%s/app.shutdown' % self.createApiUrl(), show_error = False) - return True - except: - self.initShutdown() - return False + self.initShutdown() + return True def crappyRestart(self): if self.shutdown_started: return - try: - self.urlopen('%s/app.restart' % self.createApiUrl(), show_error = False) - return True - except: - self.initShutdown(restart = True) - return False + self.initShutdown(restart = True) + return True def shutdown(self): - self.initShutdown() + def shutdown(): + self.initShutdown() + IOLoop.instance().add_callback(shutdown) + return 'shutdown' def restart(self): - self.initShutdown(restart = True) + def restart(): + self.initShutdown(restart = True) + IOLoop.instance().add_callback(restart) + return 'restarting' def initShutdown(self, restart = False): @@ -121,7 +119,8 @@ class Core(Plugin): log.debug('Save to shutdown/restart') try: - request.environ.get('werkzeug.server.shutdown')() + Env.get('httpserver').stop() + IOLoop.instance().stop() except RuntimeError: pass except: diff --git a/couchpotato/environment.py b/couchpotato/environment.py index e804170..a6f3ebb 100644 --- a/couchpotato/environment.py +++ b/couchpotato/environment.py @@ -23,6 +23,7 @@ class Env(object): _deamonize = False _desktop = None _session = None + _httpserver = None ''' Data paths and directories ''' _app_dir = "" diff --git a/couchpotato/runner.py b/couchpotato/runner.py index 37c0f34..fd7ba8e 100644 --- a/couchpotato/runner.py +++ b/couchpotato/runner.py @@ -233,16 +233,18 @@ def runCouchPotato(options, base_path, args, data_dir = None, log_dir = None, En fireEventAsync('app.load') # Go go go! + web_container = WSGIContainer(app) + web_container._log = _log + http_server = HTTPServer(web_container, no_keep_alive = True) + Env.set('httpserver', http_server) + loop = IOLoop.instance() + try_restart = True restart_tries = 5 + while try_restart: try: - web_container = WSGIContainer(app) - web_container._log = _log - - http_server = HTTPServer(web_container) http_server.listen(config['port'], config['host']) - loop = IOLoop.instance() if config['use_reloader']: autoreload.start(loop)