mirror of
https://github.com/zulip/zulip.git
synced 2025-11-06 23:13:25 +00:00
Inform clients to reload via a 'restart' event sent on Tornado start up
(imported from commit 10bb45547ea0bf34e56fc620ecd7415bb8a825c5)
This commit is contained in:
@@ -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:
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user