You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by ss...@apache.org on 2013/12/13 00:28:33 UTC

git commit: Made all relative dates relative to poll time.

Updated Branches:
  refs/heads/master ec8a16962 -> 1f4afad92


Made all relative dates relative to poll time.

When Angular tries to resolve a filter, it runs it twice to see if the
value changes. Without passing a reference date to `relativeDate`, the
function instantiates a new `Date` to use as the reference. In the
surprisingly frequent case when rendering occurs on the edge of a minute,
dozens of `relativeDate` calls will return two different values if the
filter is resolved before- and after the minute edge.

For example:

    Render starts at 12:13:59.999
    $digest calls relativeDate, returns "1 minute ago"
    $digest calls relativeDate 1ms later, returns "2 minutes ago"
    Angular throws, "Error: 10 $digest() iterations reached. Aborting!"

By passing the pollTime to all relative dates, the dates are all
relative to the same moment in time, and $digest always resolves
properly.

Note: Because page rendering is unfortunately painfully slow on some
pages when there is lots of data, this case happens frequently.

Review: http://reviews.apache.org/r/16185


Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/1f4afad9
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/1f4afad9
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/1f4afad9

Branch: refs/heads/master
Commit: 1f4afad921e6f8a46f00037668e2807ae6e79bec
Parents: ec8a169
Author: Ross Allen <ro...@gmail.com>
Authored: Fri Dec 6 12:17:14 2013 -0800
Committer: Ross Allen <ro...@gmail.com>
Committed: Thu Dec 12 15:27:58 2013 -0800

----------------------------------------------------------------------
 src/webui/master/static/framework.html    | 10 +++++-----
 src/webui/master/static/frameworks.html   |  8 ++++----
 src/webui/master/static/home.html         | 12 ++++++------
 src/webui/master/static/js/app.js         |  4 ++--
 src/webui/master/static/js/controllers.js |  8 ++++++++
 src/webui/master/static/slave.html        |  4 ++--
 src/webui/master/static/slaves.html       |  4 ++--
 7 files changed, 29 insertions(+), 21 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/1f4afad9/src/webui/master/static/framework.html
----------------------------------------------------------------------
diff --git a/src/webui/master/static/framework.html b/src/webui/master/static/framework.html
index 92f01ad..bf7e020 100644
--- a/src/webui/master/static/framework.html
+++ b/src/webui/master/static/framework.html
@@ -25,7 +25,7 @@
         <dt>Registered:</dt>
         <dd>
           <abbr title="{{framework.registered_time * 1000 | isoDate}}">
-            {{framework.registered_time * 1000 | relativeDate}}</abbr>
+            {{framework.registered_time * 1000 | relativeDate:pollTime}}</abbr>
           <button class="btn btn-mini btn-toggle"
               clipboard
               data-clipboard-text="{{framework.registered_time * 1000 | isoDate}}"
@@ -38,7 +38,7 @@
         <dd ng-show="!framework.reregistered_time">-</dd>
         <dd ng-show="framework.reregistered_time">
           <abbr title="{{framework.reregistered_time * 1000 | isoDate}}">
-            {{framework.reregistered_time * 1000 | relativeDate}}</abbr>
+            {{framework.reregistered_time * 1000 | relativeDate:pollTime}}</abbr>
           <button class="btn btn-mini btn-toggle"
               clipboard
               data-clipboard-text="{{framework.reregistered_time * 1000 | isoDate}}"
@@ -96,7 +96,7 @@
           <td>{{task.state | truncateMesosState}}</td>
           <td>
             <abbr title="{{task.start_time * 1000 | isoDate}}">
-              {{task.start_time * 1000 | relativeDate}}</abbr>
+              {{task.start_time * 1000 | relativeDate:pollTime}}</abbr>
             <button class="btn btn-mini btn-toggle"
               clipboard
               data-clipboard-text="{{task.start_time * 1000 | isoDate}}"
@@ -164,7 +164,7 @@
           <td>{{task.state | truncateMesosState}}</td>
           <td>
             <abbr title="{{task.start_time * 1000 | isoDate}}">
-              {{task.start_time * 1000 | relativeDate}}</abbr>
+              {{task.start_time * 1000 | relativeDate:pollTime}}</abbr>
             <button class="btn btn-mini btn-toggle"
               clipboard
               data-clipboard-text="{{task.start_time * 1000 | isoDate}}"
@@ -175,7 +175,7 @@
           </td>
           <td>
             <abbr title="{{task.finish_time * 1000 | isoDate}}">
-              {{task.finish_time * 1000 | relativeDate}}</abbr>
+              {{task.finish_time * 1000 | relativeDate:pollTime}}</abbr>
             <button class="btn btn-mini btn-toggle"
               clipboard
               data-clipboard-text="{{task.finish_time * 1000 | isoDate}}"

http://git-wip-us.apache.org/repos/asf/mesos/blob/1f4afad9/src/webui/master/static/frameworks.html
----------------------------------------------------------------------
diff --git a/src/webui/master/static/frameworks.html b/src/webui/master/static/frameworks.html
index f6594ae..f83cffe 100644
--- a/src/webui/master/static/frameworks.html
+++ b/src/webui/master/static/frameworks.html
@@ -71,7 +71,7 @@
       <td>{{framework.max_share * 100 | number}}%</td>
       <td>
         <abbr title="{{framework.registered_time * 1000 | isoDate}}">
-          {{framework.registered_time * 1000 | relativeDate}}</abbr>
+          {{framework.registered_time * 1000 | relativeDate:pollTime}}</abbr>
         <button class="btn btn-mini btn-toggle"
           clipboard
           data-clipboard-text="{{framework.registered_time * 1000 | isoDate}}"
@@ -83,7 +83,7 @@
       <td ng-show="!framework.reregistered_time">-</td>
       <td ng-show="framework.reregistered_time">
         <abbr title="{{framework.reregistered_time * 1000 | isoDate}}">
-          {{framework.reregistered_time * 1000 | relativeDate}}</abbr>
+          {{framework.reregistered_time * 1000 | relativeDate:pollTime}}</abbr>
         <button class="btn btn-mini btn-toggle"
           clipboard
           data-clipboard-text="{{framework.registered_time * 1000 | isoDate}}"
@@ -139,7 +139,7 @@
       <td>{{framework.name}}</td>
       <td>
         <abbr title="{{framework.registered_time * 1000 | isoDate}}">
-          {{framework.registered_time * 1000 | relativeDate}}</abbr>
+          {{framework.registered_time * 1000 | relativeDate:pollTime}}</abbr>
         <button class="btn btn-mini btn-toggle"
           clipboard
           data-clipboard-text="{{framework.reregistered_time * 1000 | isoDate}}"
@@ -150,7 +150,7 @@
       </td>
       <td>
         <abbr title="{{framework.unregistered_time * 1000 | isoDate}}">
-          {{framework.unregistered_time * 1000 | relativeDate}}</abbr>
+          {{framework.unregistered_time * 1000 | relativeDate:pollTime}}</abbr>
         <button class="btn btn-mini btn-toggle"
           clipboard
           data-clipboard-text="{{framework.unregistered_time * 1000 | isoDate}}"

http://git-wip-us.apache.org/repos/asf/mesos/blob/1f4afad9/src/webui/master/static/home.html
----------------------------------------------------------------------
diff --git a/src/webui/master/static/home.html b/src/webui/master/static/home.html
index bccffd9..ff9d132 100644
--- a/src/webui/master/static/home.html
+++ b/src/webui/master/static/home.html
@@ -24,7 +24,7 @@
         <dt>Built:</dt>
         <dd>
           <abbr title="{{state.build_time * 1000 | isoDate}}">
-            {{state.build_time * 1000 | relativeDate}}</abbr>
+            {{state.build_time * 1000 | relativeDate:pollTime}}</abbr>
           by <i>{{state.build_user}}</i>
           <button class="btn btn-mini btn-toggle"
               clipboard
@@ -37,7 +37,7 @@
         <dt>Started:</dt>
         <dd>
           <abbr title="{{state.start_time * 1000 | isoDate}}">
-            {{state.start_time * 1000 | relativeDate}}</abbr>
+            {{state.start_time * 1000 | relativeDate:pollTime}}</abbr>
           <button class="btn btn-mini btn-toggle"
               clipboard
               data-clipboard-text="{{state.start_time * 1000 | isoDate}}"
@@ -198,7 +198,7 @@
           <td>{{framework.max_share * 100 | number}}%</td>
           <td>
             <abbr title="{{framework.registered_time * 1000 | isoDate}}">
-              {{framework.registered_time * 1000 | relativeDate}}</abbr>
+              {{framework.registered_time * 1000 | relativeDate:pollTime}}</abbr>
             <button class="btn btn-mini btn-toggle"
               clipboard
               data-clipboard-text="{{framework.registered_time * 1000 | isoDate}}"
@@ -210,7 +210,7 @@
           <td ng-show="!framework.reregistered_time">-</td>
           <td ng-show="framework.reregistered_time">
             <abbr title="{{framework.reregistered_time * 1000 | isoDate}}">
-              {{framework.reregistered_time * 1000 | relativeDate}}</abbr>
+              {{framework.reregistered_time * 1000 | relativeDate:pollTime}}</abbr>
             <button class="btn btn-mini btn-toggle"
               clipboard
               data-clipboard-text="{{framework.reregistered_time * 1000 | isoDate}}"
@@ -266,7 +266,7 @@
           <td>{{framework.name}}</td>
           <td>
             <abbr title="{{framework.registered_time * 1000 | isoDate}}">
-              {{framework.registered_time * 1000 | relativeDate}}</abbr>
+              {{framework.registered_time * 1000 | relativeDate:pollTime}}</abbr>
             <button class="btn btn-mini btn-toggle"
               clipboard
               data-clipboard-text="{{framework.reregistered_time * 1000 | isoDate}}"
@@ -277,7 +277,7 @@
           </td>
           <td>
             <abbr title="{{framework.unregistered_time * 1000 | isoDate}}">
-              {{framework.unregistered_time * 1000 | relativeDate}}</abbr>
+              {{framework.unregistered_time * 1000 | relativeDate:pollTime}}</abbr>
             <button class="btn btn-mini btn-toggle"
               clipboard
               data-clipboard-text="{{framework.unregistered_time * 1000 | isoDate}}"

http://git-wip-us.apache.org/repos/asf/mesos/blob/1f4afad9/src/webui/master/static/js/app.js
----------------------------------------------------------------------
diff --git a/src/webui/master/static/js/app.js b/src/webui/master/static/js/app.js
index 37b423e..5c58b7e 100644
--- a/src/webui/master/static/js/app.js
+++ b/src/webui/master/static/js/app.js
@@ -69,8 +69,8 @@
       };
     })
     .filter('relativeDate', function() {
-      return function(date) {
-        return relativeDate(date);
+      return function(date, refDate) {
+        return relativeDate(date, refDate);
       };
     })
     .filter('unixDate', function($filter) {

http://git-wip-us.apache.org/repos/asf/mesos/blob/1f4afad9/src/webui/master/static/js/controllers.js
----------------------------------------------------------------------
diff --git a/src/webui/master/static/js/controllers.js b/src/webui/master/static/js/controllers.js
index 5308bb9..16ba3e2 100644
--- a/src/webui/master/static/js/controllers.js
+++ b/src/webui/master/static/js/controllers.js
@@ -154,6 +154,14 @@
 
     $scope.data = data;
 
+    // Pass this pollTime to all relativeDate calls to make them all relative to
+    // the same moment in time.
+    //
+    // If relativeDate is called without a reference time, it instantiates a new
+    // Date to be the reference. Since there can be hundreds of dates on a given
+    // page, they would all be relative to slightly different moments in time.
+    $scope.pollTime = new Date();
+
     // Update the maps.
     $scope.slaves = {};
     $scope.frameworks = {};

http://git-wip-us.apache.org/repos/asf/mesos/blob/1f4afad9/src/webui/master/static/slave.html
----------------------------------------------------------------------
diff --git a/src/webui/master/static/slave.html b/src/webui/master/static/slave.html
index e1dabc0..24e855b 100644
--- a/src/webui/master/static/slave.html
+++ b/src/webui/master/static/slave.html
@@ -33,7 +33,7 @@
         <dt>Started:</dt>
         <dd>
           <abbr title="{{state.start_time * 1000 | isoDate}}">
-            {{state.start_time * 1000 | relativeDate}}</abbr>
+            {{state.start_time * 1000 | relativeDate:pollTime}}</abbr>
           <button class="btn btn-mini btn-toggle"
               clipboard
               data-clipboard-text="{{state.start_time * 1000 | isoDate}}"
@@ -45,7 +45,7 @@
         <dt>Built:</dt>
         <dd>
           <abbr title="{{state.build_time * 1000 | isoDate}}">
-            {{state.build_time * 1000 | relativeDate}}</abbr>
+            {{state.build_time * 1000 | relativeDate:pollTime}}</abbr>
           by <i>{{state.build_user}}</i>
           <button class="btn btn-mini btn-toggle"
               clipboard

http://git-wip-us.apache.org/repos/asf/mesos/blob/1f4afad9/src/webui/master/static/slaves.html
----------------------------------------------------------------------
diff --git a/src/webui/master/static/slaves.html b/src/webui/master/static/slaves.html
index 99b1c35..ee41b26 100644
--- a/src/webui/master/static/slaves.html
+++ b/src/webui/master/static/slaves.html
@@ -60,7 +60,7 @@
     <td>{{slave.resources.disk * (1024 * 1024) | dataSize}}</td>
     <td>
       <abbr title="{{slave.registered_time * 1000 | isoDate}}">
-        {{slave.registered_time * 1000 | relativeDate}}</abbr>
+        {{slave.registered_time * 1000 | relativeDate:pollTime}}</abbr>
       <button class="btn btn-mini btn-toggle"
           clipboard
           data-clipboard-text="{{slave.registered_time * 1000 | isoDate}}"
@@ -72,7 +72,7 @@
     </td>
     <td>
       <abbr title="{{slave.reregistered_time * 1000 | isoDate}}">
-        {{slave.reregistered_time * 1000 | relativeDate}}</abbr>
+        {{slave.reregistered_time * 1000 | relativeDate:pollTime}}</abbr>
       <button class="btn btn-mini btn-toggle"
           clipboard
           data-clipboard-text="{{slave.reregistered_time * 1000 | isoDate}}"