diff --git a/zephyr/lib/event_queue.py b/zephyr/lib/event_queue.py index f198f90897..82cf7a60e0 100644 --- a/zephyr/lib/event_queue.py +++ b/zephyr/lib/event_queue.py @@ -135,10 +135,9 @@ def dump_event_queues(): logging.info('Tornado dumped %d event queues in %.3fs' % (len(clients), time.time() - start)) -def setup_event_queue(io_loop): +def load_event_queues(): global clients start = time.time() - # Read in existing event queues try: with file(PERSISTENT_QUEUE_FILENAME, "r") as stored_queues: clients = pickle.load(stored_queues) @@ -151,6 +150,13 @@ def setup_event_queue(io_loop): logging.info('Tornado loaded %d event queues in %.3fs' % (len(clients), time.time() - start)) +def send_restart_events(): + for client in clients.itervalues(): + event = dict(type='restart', server_generation=settings.SERVER_GENERATION) + client.add_event(event) + +def setup_event_queue(io_loop): + load_event_queues() atexit.register(dump_event_queues) # Make sure we dump event queues even if we exit via signal signal.signal(signal.SIGTERM, lambda signum, stack: sys.exit(1)) @@ -164,6 +170,8 @@ def setup_event_queue(io_loop): pc = PeriodicCallback(gc_event_queues, EVENT_QUEUE_GC_FREQ_MSECS, io_loop) pc.start() + send_restart_events() + # Called from Django def request_event_queue(user_profile, apply_markdown): if settings.TORNADO_SERVER: diff --git a/zephyr/static/js/zephyr.js b/zephyr/static/js/zephyr.js index c155a64f4a..067648a7fb 100644 --- a/zephyr/static/js/zephyr.js +++ b/zephyr/static/js/zephyr.js @@ -12,7 +12,6 @@ var viewport = $(window); var get_updates_params = { pointer: -1, - server_generation: -1, /* to be filled in on document.ready */ last_event_id: 0 }; var get_updates_failures = 0; @@ -606,14 +605,6 @@ function get_updates(options) { get_updates_params.pointer = furthest_read; get_updates_params.dont_block = options.dont_block || get_updates_failures > 0; get_updates_params.queue_id = page_params.event_queue_id; - if (reload.is_pending()) { - // We only send a server_generation to the server if we're - // interested in an immediate reply to tell us if we need to - // reload. Once we're already reloading, we need to not - // submit the parameter, so that the server will process our - // future requests in longpolling mode. - delete get_updates_params.server_generation; - } get_updates_xhr = $.ajax({ type: 'POST', @@ -633,12 +624,6 @@ function get_updates(options) { get_updates_failures = 0; $('#connection-error').hide(); - if (get_updates_params.server_generation === -1) { - get_updates_params.server_generation = data.server_generation; - } else if (data.server_generation !== get_updates_params.server_generation) { - reload.initiate(); - } - var messages = []; var new_pointer; @@ -655,7 +640,10 @@ function get_updates(options) { messages.push(event.message); break; case 'pointer': - new_pointer = event.new_pointer; + new_pointer = event.pointer; + break; + case 'restart': + reload.initiate(); break; } });