Decrease JX.Leader lease duration from 16,000ms to 1,500ms and usurp more aggressively
Summary: Ref T12573. `JX.Leader` synchronizes the Aphlict connection across multiple windows. Currently, we only test to see if the leader window has been closed every 16 seconds. Instead, test every 1.5 seconds. Also, make windows keep trying to become the leader forever. This was removed previously (in D15806) but I think that change decreased robustness here. Test Plan: - Opened two windows to the "Realtime" tab in DarkConsole. - Saw one become the leader and one become a follower. - (Optionally, wait for 10 seconds here to test the "keep trying to become the leader" behavior.) - Closed the leader. - Saw the follower become the leader after ~1.5 seconds. Reviewers: chad Reviewed By: chad Maniphest Tasks: T12573 Differential Revision: https://secure.phabricator.com/D17703
This commit is contained in:
@@ -10,8 +10,8 @@ return array(
|
|||||||
'conpherence.pkg.css' => 'a34d59bd',
|
'conpherence.pkg.css' => 'a34d59bd',
|
||||||
'conpherence.pkg.js' => '5f86c17d',
|
'conpherence.pkg.js' => '5f86c17d',
|
||||||
'core.pkg.css' => '959330a2',
|
'core.pkg.css' => '959330a2',
|
||||||
'core.pkg.js' => 'deabcef7',
|
'core.pkg.js' => '941db947',
|
||||||
'darkconsole.pkg.js' => 'e7393ebb',
|
'darkconsole.pkg.js' => '061371d8',
|
||||||
'differential.pkg.css' => '90b30783',
|
'differential.pkg.css' => '90b30783',
|
||||||
'differential.pkg.js' => 'ddfeb49b',
|
'differential.pkg.js' => 'ddfeb49b',
|
||||||
'diffusion.pkg.css' => '91c5d3a6',
|
'diffusion.pkg.css' => '91c5d3a6',
|
||||||
@@ -20,7 +20,7 @@ return array(
|
|||||||
'maniphest.pkg.css' => '4845691a',
|
'maniphest.pkg.css' => '4845691a',
|
||||||
'maniphest.pkg.js' => '5ab2753f',
|
'maniphest.pkg.js' => '5ab2753f',
|
||||||
'rsrc/css/aphront/aphront-bars.css' => '231ac33c',
|
'rsrc/css/aphront/aphront-bars.css' => '231ac33c',
|
||||||
'rsrc/css/aphront/dark-console.css' => 'f54bf286',
|
'rsrc/css/aphront/dark-console.css' => '07dd8d38',
|
||||||
'rsrc/css/aphront/dialog-view.css' => '685c7e2d',
|
'rsrc/css/aphront/dialog-view.css' => '685c7e2d',
|
||||||
'rsrc/css/aphront/list-filter-view.css' => '5d6f0526',
|
'rsrc/css/aphront/list-filter-view.css' => '5d6f0526',
|
||||||
'rsrc/css/aphront/multi-column.css' => '84cc6640',
|
'rsrc/css/aphront/multi-column.css' => '84cc6640',
|
||||||
@@ -234,7 +234,7 @@ return array(
|
|||||||
'rsrc/externals/javelin/lib/DOM.js' => '805b806a',
|
'rsrc/externals/javelin/lib/DOM.js' => '805b806a',
|
||||||
'rsrc/externals/javelin/lib/History.js' => 'd4505101',
|
'rsrc/externals/javelin/lib/History.js' => 'd4505101',
|
||||||
'rsrc/externals/javelin/lib/JSON.js' => '69adf288',
|
'rsrc/externals/javelin/lib/JSON.js' => '69adf288',
|
||||||
'rsrc/externals/javelin/lib/Leader.js' => 'fea0eb47',
|
'rsrc/externals/javelin/lib/Leader.js' => '7f243deb',
|
||||||
'rsrc/externals/javelin/lib/Mask.js' => '8a41885b',
|
'rsrc/externals/javelin/lib/Mask.js' => '8a41885b',
|
||||||
'rsrc/externals/javelin/lib/Quicksand.js' => '6b8ef10b',
|
'rsrc/externals/javelin/lib/Quicksand.js' => '6b8ef10b',
|
||||||
'rsrc/externals/javelin/lib/Request.js' => '94b750d2',
|
'rsrc/externals/javelin/lib/Request.js' => '94b750d2',
|
||||||
@@ -363,7 +363,7 @@ return array(
|
|||||||
'rsrc/image/texture/table_header_tall.png' => 'd56b434f',
|
'rsrc/image/texture/table_header_tall.png' => 'd56b434f',
|
||||||
'rsrc/js/application/aphlict/Aphlict.js' => '5359e785',
|
'rsrc/js/application/aphlict/Aphlict.js' => '5359e785',
|
||||||
'rsrc/js/application/aphlict/behavior-aphlict-dropdown.js' => 'caade6f2',
|
'rsrc/js/application/aphlict/behavior-aphlict-dropdown.js' => 'caade6f2',
|
||||||
'rsrc/js/application/aphlict/behavior-aphlict-listen.js' => 'fb20ac8d',
|
'rsrc/js/application/aphlict/behavior-aphlict-listen.js' => 'd82b1ff9',
|
||||||
'rsrc/js/application/aphlict/behavior-aphlict-status.js' => '5e2634b9',
|
'rsrc/js/application/aphlict/behavior-aphlict-status.js' => '5e2634b9',
|
||||||
'rsrc/js/application/aphlict/behavior-desktop-notifications-control.js' => 'd5a2d665',
|
'rsrc/js/application/aphlict/behavior-desktop-notifications-control.js' => 'd5a2d665',
|
||||||
'rsrc/js/application/calendar/behavior-day-view.js' => '4b3c4443',
|
'rsrc/js/application/calendar/behavior-day-view.js' => '4b3c4443',
|
||||||
@@ -482,7 +482,6 @@ return array(
|
|||||||
'rsrc/js/core/behavior-autofocus.js' => '7319e029',
|
'rsrc/js/core/behavior-autofocus.js' => '7319e029',
|
||||||
'rsrc/js/core/behavior-badge-view.js' => '8ff5e24c',
|
'rsrc/js/core/behavior-badge-view.js' => '8ff5e24c',
|
||||||
'rsrc/js/core/behavior-choose-control.js' => '327a00d1',
|
'rsrc/js/core/behavior-choose-control.js' => '327a00d1',
|
||||||
'rsrc/js/core/behavior-dark-console.js' => 'f411b6ae',
|
|
||||||
'rsrc/js/core/behavior-detect-timezone.js' => '4c193c96',
|
'rsrc/js/core/behavior-detect-timezone.js' => '4c193c96',
|
||||||
'rsrc/js/core/behavior-device.js' => 'bb1dd507',
|
'rsrc/js/core/behavior-device.js' => 'bb1dd507',
|
||||||
'rsrc/js/core/behavior-drag-and-drop-textarea.js' => '484a6e22',
|
'rsrc/js/core/behavior-drag-and-drop-textarea.js' => '484a6e22',
|
||||||
@@ -521,6 +520,9 @@ return array(
|
|||||||
'rsrc/js/core/behavior-user-menu.js' => '31420f77',
|
'rsrc/js/core/behavior-user-menu.js' => '31420f77',
|
||||||
'rsrc/js/core/behavior-watch-anchor.js' => '9f36c42d',
|
'rsrc/js/core/behavior-watch-anchor.js' => '9f36c42d',
|
||||||
'rsrc/js/core/behavior-workflow.js' => '0a3f3021',
|
'rsrc/js/core/behavior-workflow.js' => '0a3f3021',
|
||||||
|
'rsrc/js/core/darkconsole/DarkLog.js' => 'c8e1ffe3',
|
||||||
|
'rsrc/js/core/darkconsole/DarkMessage.js' => 'c48cccdd',
|
||||||
|
'rsrc/js/core/darkconsole/behavior-dark-console.js' => '3725c90c',
|
||||||
'rsrc/js/core/phtize.js' => 'd254d646',
|
'rsrc/js/core/phtize.js' => 'd254d646',
|
||||||
'rsrc/js/phui/behavior-phui-dropdown-menu.js' => 'b95d6f7d',
|
'rsrc/js/phui/behavior-phui-dropdown-menu.js' => 'b95d6f7d',
|
||||||
'rsrc/js/phui/behavior-phui-file-upload.js' => 'b003d4fb',
|
'rsrc/js/phui/behavior-phui-file-upload.js' => 'b003d4fb',
|
||||||
@@ -536,7 +538,7 @@ return array(
|
|||||||
'symbols' => array(
|
'symbols' => array(
|
||||||
'almanac-css' => 'dbb9b3af',
|
'almanac-css' => 'dbb9b3af',
|
||||||
'aphront-bars' => '231ac33c',
|
'aphront-bars' => '231ac33c',
|
||||||
'aphront-dark-console-css' => 'f54bf286',
|
'aphront-dark-console-css' => '07dd8d38',
|
||||||
'aphront-dialog-view-css' => '685c7e2d',
|
'aphront-dialog-view-css' => '685c7e2d',
|
||||||
'aphront-list-filter-view-css' => '5d6f0526',
|
'aphront-list-filter-view-css' => '5d6f0526',
|
||||||
'aphront-multi-column-view-css' => '84cc6640',
|
'aphront-multi-column-view-css' => '84cc6640',
|
||||||
@@ -584,7 +586,7 @@ return array(
|
|||||||
'javelin-aphlict' => '5359e785',
|
'javelin-aphlict' => '5359e785',
|
||||||
'javelin-behavior' => '61cbc29a',
|
'javelin-behavior' => '61cbc29a',
|
||||||
'javelin-behavior-aphlict-dropdown' => 'caade6f2',
|
'javelin-behavior-aphlict-dropdown' => 'caade6f2',
|
||||||
'javelin-behavior-aphlict-listen' => 'fb20ac8d',
|
'javelin-behavior-aphlict-listen' => 'd82b1ff9',
|
||||||
'javelin-behavior-aphlict-status' => '5e2634b9',
|
'javelin-behavior-aphlict-status' => '5e2634b9',
|
||||||
'javelin-behavior-aphront-basic-tokenizer' => 'b3a4b884',
|
'javelin-behavior-aphront-basic-tokenizer' => 'b3a4b884',
|
||||||
'javelin-behavior-aphront-drag-and-drop-textarea' => '484a6e22',
|
'javelin-behavior-aphront-drag-and-drop-textarea' => '484a6e22',
|
||||||
@@ -603,7 +605,7 @@ return array(
|
|||||||
'javelin-behavior-conpherence-pontificate' => '55616e04',
|
'javelin-behavior-conpherence-pontificate' => '55616e04',
|
||||||
'javelin-behavior-conpherence-search' => '9bbf3762',
|
'javelin-behavior-conpherence-search' => '9bbf3762',
|
||||||
'javelin-behavior-countdown-timer' => 'e4cc26b3',
|
'javelin-behavior-countdown-timer' => 'e4cc26b3',
|
||||||
'javelin-behavior-dark-console' => 'f411b6ae',
|
'javelin-behavior-dark-console' => '3725c90c',
|
||||||
'javelin-behavior-dashboard-async-panel' => '469c0d9e',
|
'javelin-behavior-dashboard-async-panel' => '469c0d9e',
|
||||||
'javelin-behavior-dashboard-move-panels' => '408bf173',
|
'javelin-behavior-dashboard-move-panels' => '408bf173',
|
||||||
'javelin-behavior-dashboard-query-panel-select' => '453c5375',
|
'javelin-behavior-dashboard-query-panel-select' => '453c5375',
|
||||||
@@ -720,7 +722,7 @@ return array(
|
|||||||
'javelin-history' => 'd4505101',
|
'javelin-history' => 'd4505101',
|
||||||
'javelin-install' => '05270951',
|
'javelin-install' => '05270951',
|
||||||
'javelin-json' => '69adf288',
|
'javelin-json' => '69adf288',
|
||||||
'javelin-leader' => 'fea0eb47',
|
'javelin-leader' => '7f243deb',
|
||||||
'javelin-magical-init' => '3010e992',
|
'javelin-magical-init' => '3010e992',
|
||||||
'javelin-mask' => '8a41885b',
|
'javelin-mask' => '8a41885b',
|
||||||
'javelin-quicksand' => '6b8ef10b',
|
'javelin-quicksand' => '6b8ef10b',
|
||||||
@@ -774,6 +776,8 @@ return array(
|
|||||||
'phabricator-content-source-view-css' => '4b8b05d4',
|
'phabricator-content-source-view-css' => '4b8b05d4',
|
||||||
'phabricator-core-css' => '9f4cb463',
|
'phabricator-core-css' => '9f4cb463',
|
||||||
'phabricator-countdown-css' => '16c52f5c',
|
'phabricator-countdown-css' => '16c52f5c',
|
||||||
|
'phabricator-darklog' => 'c8e1ffe3',
|
||||||
|
'phabricator-darkmessage' => 'c48cccdd',
|
||||||
'phabricator-dashboard-css' => 'fe5b1869',
|
'phabricator-dashboard-css' => 'fe5b1869',
|
||||||
'phabricator-drag-and-drop-file-upload' => '58dea2fa',
|
'phabricator-drag-and-drop-file-upload' => '58dea2fa',
|
||||||
'phabricator-draggable-list' => 'bea6e7f4',
|
'phabricator-draggable-list' => 'bea6e7f4',
|
||||||
@@ -1118,6 +1122,16 @@ return array(
|
|||||||
'javelin-dom',
|
'javelin-dom',
|
||||||
'javelin-workflow',
|
'javelin-workflow',
|
||||||
),
|
),
|
||||||
|
'3725c90c' => array(
|
||||||
|
'javelin-behavior',
|
||||||
|
'javelin-stratcom',
|
||||||
|
'javelin-util',
|
||||||
|
'javelin-dom',
|
||||||
|
'javelin-request',
|
||||||
|
'phabricator-keyboard-shortcut',
|
||||||
|
'phabricator-darklog',
|
||||||
|
'phabricator-darkmessage',
|
||||||
|
),
|
||||||
'3ab51e2c' => array(
|
'3ab51e2c' => array(
|
||||||
'javelin-behavior',
|
'javelin-behavior',
|
||||||
'javelin-behavior-device',
|
'javelin-behavior-device',
|
||||||
@@ -1475,6 +1489,9 @@ return array(
|
|||||||
'javelin-behavior',
|
'javelin-behavior',
|
||||||
'javelin-history',
|
'javelin-history',
|
||||||
),
|
),
|
||||||
|
'7f243deb' => array(
|
||||||
|
'javelin-install',
|
||||||
|
),
|
||||||
'8018ee50' => array(
|
'8018ee50' => array(
|
||||||
'javelin-install',
|
'javelin-install',
|
||||||
'javelin-util',
|
'javelin-util',
|
||||||
@@ -2066,6 +2083,20 @@ return array(
|
|||||||
'javelin-dom',
|
'javelin-dom',
|
||||||
'phabricator-draggable-list',
|
'phabricator-draggable-list',
|
||||||
),
|
),
|
||||||
|
'd82b1ff9' => array(
|
||||||
|
'javelin-behavior',
|
||||||
|
'javelin-aphlict',
|
||||||
|
'javelin-stratcom',
|
||||||
|
'javelin-request',
|
||||||
|
'javelin-uri',
|
||||||
|
'javelin-dom',
|
||||||
|
'javelin-json',
|
||||||
|
'javelin-router',
|
||||||
|
'javelin-util',
|
||||||
|
'javelin-leader',
|
||||||
|
'javelin-sound',
|
||||||
|
'phabricator-notification',
|
||||||
|
),
|
||||||
'd835b03a' => array(
|
'd835b03a' => array(
|
||||||
'javelin-behavior',
|
'javelin-behavior',
|
||||||
'javelin-dom',
|
'javelin-dom',
|
||||||
@@ -2173,14 +2204,6 @@ return array(
|
|||||||
'f12cbc9f' => array(
|
'f12cbc9f' => array(
|
||||||
'phui-oi-list-view-css',
|
'phui-oi-list-view-css',
|
||||||
),
|
),
|
||||||
'f411b6ae' => array(
|
|
||||||
'javelin-behavior',
|
|
||||||
'javelin-stratcom',
|
|
||||||
'javelin-util',
|
|
||||||
'javelin-dom',
|
|
||||||
'javelin-request',
|
|
||||||
'phabricator-keyboard-shortcut',
|
|
||||||
),
|
|
||||||
'f50152ad' => array(
|
'f50152ad' => array(
|
||||||
'phui-timeline-view-css',
|
'phui-timeline-view-css',
|
||||||
),
|
),
|
||||||
@@ -2203,20 +2226,6 @@ return array(
|
|||||||
'javelin-install',
|
'javelin-install',
|
||||||
'javelin-dom',
|
'javelin-dom',
|
||||||
),
|
),
|
||||||
'fb20ac8d' => array(
|
|
||||||
'javelin-behavior',
|
|
||||||
'javelin-aphlict',
|
|
||||||
'javelin-stratcom',
|
|
||||||
'javelin-request',
|
|
||||||
'javelin-uri',
|
|
||||||
'javelin-dom',
|
|
||||||
'javelin-json',
|
|
||||||
'javelin-router',
|
|
||||||
'javelin-util',
|
|
||||||
'javelin-leader',
|
|
||||||
'javelin-sound',
|
|
||||||
'phabricator-notification',
|
|
||||||
),
|
|
||||||
'fbe497e7' => array(
|
'fbe497e7' => array(
|
||||||
'javelin-behavior',
|
'javelin-behavior',
|
||||||
'javelin-util',
|
'javelin-util',
|
||||||
@@ -2242,9 +2251,6 @@ return array(
|
|||||||
'javelin-view-visitor',
|
'javelin-view-visitor',
|
||||||
'javelin-util',
|
'javelin-util',
|
||||||
),
|
),
|
||||||
'fea0eb47' => array(
|
|
||||||
'javelin-install',
|
|
||||||
),
|
|
||||||
),
|
),
|
||||||
'packages' => array(
|
'packages' => array(
|
||||||
'conpherence.pkg.css' => array(
|
'conpherence.pkg.css' => array(
|
||||||
|
|||||||
12
webroot/rsrc/externals/javelin/lib/Leader.js
vendored
12
webroot/rsrc/externals/javelin/lib/Leader.js
vendored
@@ -33,6 +33,8 @@ JX.install('Leader', {
|
|||||||
events: ['onBecomeLeader', 'onReceiveBroadcast'],
|
events: ['onBecomeLeader', 'onReceiveBroadcast'],
|
||||||
|
|
||||||
statics: {
|
statics: {
|
||||||
|
_leaseDuration: 1500,
|
||||||
|
|
||||||
_interval: null,
|
_interval: null,
|
||||||
_timeout: null,
|
_timeout: null,
|
||||||
_broadcastKey: 'JX.Leader.broadcast',
|
_broadcastKey: 'JX.Leader.broadcast',
|
||||||
@@ -130,8 +132,10 @@ JX.install('Leader', {
|
|||||||
// If we haven't installed an update timer yet, do so now. This will
|
// If we haven't installed an update timer yet, do so now. This will
|
||||||
// renew our lease every 5 seconds, making sure we hold it until the
|
// renew our lease every 5 seconds, making sure we hold it until the
|
||||||
// tab is closed.
|
// tab is closed.
|
||||||
if (!self._interval && lease.until > now + 10000) {
|
var interval = parseInt(self._leaseDuration / 3, 10);
|
||||||
self._interval = window.setInterval(self._write, 5000);
|
|
||||||
|
if (!self._interval && lease.until > now + (interval * 2)) {
|
||||||
|
self._interval = window.setInterval(self._write, interval);
|
||||||
}
|
}
|
||||||
|
|
||||||
self._becomeLeader();
|
self._becomeLeader();
|
||||||
@@ -227,7 +231,7 @@ JX.install('Leader', {
|
|||||||
_write: function() {
|
_write: function() {
|
||||||
var self = JX.Leader;
|
var self = JX.Leader;
|
||||||
|
|
||||||
var str = [self._id, ((+new Date()) + 16000)].join(':');
|
var str = [self._id, ((+new Date()) + self._leaseDuration)].join(':');
|
||||||
window.localStorage.setItem(self._leaderKey, str);
|
window.localStorage.setItem(self._leaderKey, str);
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -311,8 +315,8 @@ JX.install('Leader', {
|
|||||||
*/
|
*/
|
||||||
_usurp: function() {
|
_usurp: function() {
|
||||||
var self = JX.Leader;
|
var self = JX.Leader;
|
||||||
self.call(JX.bag);
|
|
||||||
self._timeout = null;
|
self._timeout = null;
|
||||||
|
self.call(JX.bag);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user