diff --git a/api/common.py b/api/common.py index 0171480b91..095b7900c2 100644 --- a/api/common.py +++ b/api/common.py @@ -63,8 +63,6 @@ class HumbugAPI(object): if not (isinstance(val, str) or isinstance(val, unicode)): request[key] = simplejson.dumps(val) - request["failures"] = 0 - while True: try: res = requests.post(urlparse.urljoin(self.base_url, url), data=request, @@ -76,7 +74,7 @@ class HumbugAPI(object): if not had_error_retry: sys.stdout.write("connection error %s -- retrying." % (res.status_code,)) had_error_retry = True - request["failures"] += 1 + request["dont_block"] = simplejson.dumps(True) else: sys.stdout.write(".") sys.stdout.flush() @@ -102,7 +100,7 @@ class HumbugAPI(object): if not had_error_retry: sys.stdout.write("connection error -- retrying.") had_error_retry = True - request["failures"] += 1 + request["dont_block"] = simplejson.dumps(True) else: sys.stdout.write(".") sys.stdout.flush() diff --git a/zephyr/static/js/zephyr.js b/zephyr/static/js/zephyr.js index 7b748529f3..4670393acc 100644 --- a/zephyr/static/js/zephyr.js +++ b/zephyr/static/js/zephyr.js @@ -10,10 +10,10 @@ var selected_message = $(); /* = rows.get(selected_message_id) */ var get_updates_params = { last: -1, pointer: -1, - failures: 0, server_generation: -1, /* to be filled in on document.ready */ reload_pending: 0 }; +var get_updates_failures = 0; // The "message groups", i.e. blocks of messages collapsed by recipient. // Each message table has a list of lists. @@ -559,7 +559,7 @@ function get_updates(options) { get_updates_params.pointer = furthest_read; get_updates_params.reload_pending = Number(reload.is_pending()); - get_updates_params.dont_block = options.dont_block; + get_updates_params.dont_block = options.dont_block || get_updates_failures > 0; get_updates_xhr = $.ajax({ type: 'POST', @@ -578,7 +578,7 @@ function get_updates(options) { return; } - get_updates_params.failures = 0; + get_updates_failures = 0; $('#connection-error').hide(); if (get_updates_params.server_generation === -1) { @@ -614,19 +614,19 @@ function get_updates(options) { error: function (xhr, error_type, exn) { if (error_type === 'timeout') { // Retry indefinitely on timeout. - get_updates_params.failures = 0; + get_updates_failures = 0; $('#connection-error').hide(); } else { - get_updates_params.failures += 1; + get_updates_failures += 1; } - if (get_updates_params.failures >= 5) { + if (get_updates_failures >= 5) { $('#connection-error').show(); } else { $('#connection-error').hide(); } - var retry_sec = Math.min(90, Math.exp(get_updates_params.failures/2)); + var retry_sec = Math.min(90, Math.exp(get_updates_failures/2)); get_updates_timeout = setTimeout(get_updates, retry_sec*1000); } }); @@ -741,7 +741,7 @@ setInterval(function () { // Our app's JS wasn't running (the machine was probably // asleep). Now that we're running again, immediately poll for // new updates. - get_updates_params.failures = 0; + get_updates_failures = 0; restart_get_updates(); } watchdog_time = new_time; diff --git a/zephyr/views.py b/zephyr/views.py index fcaed2de22..ad8fe761ac 100644 --- a/zephyr/views.py +++ b/zephyr/views.py @@ -331,13 +331,13 @@ def format_updates_response(messages=[], apply_markdown=True, return ret def return_messages_immediately(user_profile, client_id, last, - failures, client_server_generation, + client_server_generation, client_reload_pending, client_pointer, dont_block, **kwargs): if last is None: # When an API user is first querying the server to subscribe, # there's no reason to reply immediately. - # TODO: Make this work with server_generation/failures + # TODO: Make this work with server_generation return None if UserMessage.objects.filter(user_profile=user_profile).count() == 0: @@ -378,9 +378,6 @@ def return_messages_immediately(user_profile, client_id, last, new_pointer = ptr update_types.append("pointer_update") - if failures >= 1: - update_types.append("reset_failure_counter") - if update_types: return format_updates_response(messages=messages, user_profile=user_profile, @@ -409,13 +406,12 @@ def send_with_safety_check(response, handler, apply_markdown=True, **kwargs): @has_request_variables def get_updates_backend(request, user_profile, handler, client_id, last = POST(converter=int, default=None), - failures = POST(converter=int, default=None), client_server_generation = POST(whence='server_generation', default=None), client_reload_pending = POST(whence='reload_pending', default=None), client_pointer = POST(whence='pointer', converter=int, default=None), dont_block = POST(converter=simplejson.loads, default=False), **kwargs): - resp = return_messages_immediately(user_profile, client_id, last, failures, + resp = return_messages_immediately(user_profile, client_id, last, client_server_generation, client_reload_pending, client_pointer,