mirror of
https://github.com/zulip/zulip.git
synced 2025-11-06 06:53: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'
|
logging.info('Tornado dumped %d event queues in %.3fs'
|
||||||
% (len(clients), time.time() - start))
|
% (len(clients), time.time() - start))
|
||||||
|
|
||||||
def setup_event_queue(io_loop):
|
def load_event_queues():
|
||||||
global clients
|
global clients
|
||||||
start = time.time()
|
start = time.time()
|
||||||
# Read in existing event queues
|
|
||||||
try:
|
try:
|
||||||
with file(PERSISTENT_QUEUE_FILENAME, "r") as stored_queues:
|
with file(PERSISTENT_QUEUE_FILENAME, "r") as stored_queues:
|
||||||
clients = pickle.load(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'
|
logging.info('Tornado loaded %d event queues in %.3fs'
|
||||||
% (len(clients), time.time() - start))
|
% (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)
|
atexit.register(dump_event_queues)
|
||||||
# Make sure we dump event queues even if we exit via signal
|
# Make sure we dump event queues even if we exit via signal
|
||||||
signal.signal(signal.SIGTERM, lambda signum, stack: sys.exit(1))
|
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 = PeriodicCallback(gc_event_queues, EVENT_QUEUE_GC_FREQ_MSECS, io_loop)
|
||||||
pc.start()
|
pc.start()
|
||||||
|
|
||||||
|
send_restart_events()
|
||||||
|
|
||||||
# Called from Django
|
# Called from Django
|
||||||
def request_event_queue(user_profile, apply_markdown):
|
def request_event_queue(user_profile, apply_markdown):
|
||||||
if settings.TORNADO_SERVER:
|
if settings.TORNADO_SERVER:
|
||||||
|
|||||||
@@ -12,7 +12,6 @@ var viewport = $(window);
|
|||||||
|
|
||||||
var get_updates_params = {
|
var get_updates_params = {
|
||||||
pointer: -1,
|
pointer: -1,
|
||||||
server_generation: -1, /* to be filled in on document.ready */
|
|
||||||
last_event_id: 0
|
last_event_id: 0
|
||||||
};
|
};
|
||||||
var get_updates_failures = 0;
|
var get_updates_failures = 0;
|
||||||
@@ -606,14 +605,6 @@ function get_updates(options) {
|
|||||||
get_updates_params.pointer = furthest_read;
|
get_updates_params.pointer = furthest_read;
|
||||||
get_updates_params.dont_block = options.dont_block || get_updates_failures > 0;
|
get_updates_params.dont_block = options.dont_block || get_updates_failures > 0;
|
||||||
get_updates_params.queue_id = page_params.event_queue_id;
|
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({
|
get_updates_xhr = $.ajax({
|
||||||
type: 'POST',
|
type: 'POST',
|
||||||
@@ -633,12 +624,6 @@ function get_updates(options) {
|
|||||||
get_updates_failures = 0;
|
get_updates_failures = 0;
|
||||||
$('#connection-error').hide();
|
$('#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 messages = [];
|
||||||
var new_pointer;
|
var new_pointer;
|
||||||
|
|
||||||
@@ -655,7 +640,10 @@ function get_updates(options) {
|
|||||||
messages.push(event.message);
|
messages.push(event.message);
|
||||||
break;
|
break;
|
||||||
case 'pointer':
|
case 'pointer':
|
||||||
new_pointer = event.new_pointer;
|
new_pointer = event.pointer;
|
||||||
|
break;
|
||||||
|
case 'restart':
|
||||||
|
reload.initiate();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user