Repository: incubator-slider
Updated Branches:
  refs/heads/develop b948f8b2e -> 05c083d5c


SLIDER-605. Slider list command does not order most recent application first


Project: http://git-wip-us.apache.org/repos/asf/incubator-slider/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-slider/commit/05c083d5
Tree: http://git-wip-us.apache.org/repos/asf/incubator-slider/tree/05c083d5
Diff: http://git-wip-us.apache.org/repos/asf/incubator-slider/diff/05c083d5

Branch: refs/heads/develop
Commit: 05c083d5c1046c43e3559e02506f9a715710c87d
Parents: b948f8b
Author: Sumit Mohanty <[email protected]>
Authored: Sun Nov 2 17:20:27 2014 -0800
Committer: Sumit Mohanty <[email protected]>
Committed: Sun Nov 2 17:20:27 2014 -0800

----------------------------------------------------------------------
 .../apache/slider/common/tools/SliderUtils.java | 12 ++--
 .../slider/common/tools/TestSliderUtils.java    | 65 ++++++++++++++++++++
 2 files changed, 71 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/05c083d5/slider-core/src/main/java/org/apache/slider/common/tools/SliderUtils.java
----------------------------------------------------------------------
diff --git 
a/slider-core/src/main/java/org/apache/slider/common/tools/SliderUtils.java 
b/slider-core/src/main/java/org/apache/slider/common/tools/SliderUtils.java
index ee8693f..82b17fd 100644
--- a/slider-core/src/main/java/org/apache/slider/common/tools/SliderUtils.java
+++ b/slider-core/src/main/java/org/apache/slider/common/tools/SliderUtils.java
@@ -2083,7 +2083,7 @@ public final class SliderUtils {
     public int compare(ApplicationReport r1, ApplicationReport r2) {
       long x = r1.getStartTime();
       long y = r2.getStartTime();
-      return compareTwoLongs(x, y);
+      return compareTwoLongsReverse(x, y);
     }
   }
   
@@ -2101,7 +2101,7 @@ public final class SliderUtils {
       long finished2 = r2.getFinishTime();
       long lastEvent1 = Math.max(started1, finished1);
       long lastEvent2 = Math.max(started2, finished2);
-      return compareTwoLongs(lastEvent1, lastEvent2);
+      return compareTwoLongsReverse(lastEvent1, lastEvent2);
     }
   }
 
@@ -2115,7 +2115,7 @@ public final class SliderUtils {
     public int compare(ApplicationReport r1, ApplicationReport r2) {
       long x = r1.getFinishTime();
       long y = r2.getFinishTime();
-      return compareTwoLongs(x, y);
+      return compareTwoLongsReverse(x, y);
     }
   }
 
@@ -2125,10 +2125,10 @@ public final class SliderUtils {
    * is inapplicable
    * @param x x value
    * @param y y value
-   * @return -ve if x is less than y, +ve if y is greater than x; 0 for 
equality
+   * @return +ve if x is less than y, -ve if y is greater than x; 0 for 
equality
    */
-  public static int compareTwoLongs(long x, long y) {
-    return (x < y) ? -1 : ((x == y) ? 0 : 1);
+  public static int compareTwoLongsReverse(long x, long y) {
+    return (x < y) ? +1 : ((x == y) ? 0 : -1);
   }
   
 }

http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/05c083d5/slider-core/src/test/java/org/apache/slider/common/tools/TestSliderUtils.java
----------------------------------------------------------------------
diff --git 
a/slider-core/src/test/java/org/apache/slider/common/tools/TestSliderUtils.java 
b/slider-core/src/test/java/org/apache/slider/common/tools/TestSliderUtils.java
index be850da..c1e0940 100644
--- 
a/slider-core/src/test/java/org/apache/slider/common/tools/TestSliderUtils.java
+++ 
b/slider-core/src/test/java/org/apache/slider/common/tools/TestSliderUtils.java
@@ -19,6 +19,9 @@ package org.apache.slider.common.tools;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.FileSystem;
 import org.apache.hadoop.fs.Path;
+import org.apache.hadoop.yarn.api.records.ApplicationReport;
+import org.apache.hadoop.yarn.api.records.YarnApplicationState;
+import org.apache.hadoop.yarn.api.records.impl.pb.ApplicationReportPBImpl;
 import org.apache.slider.tools.TestUtility;
 import org.junit.Assert;
 import org.junit.Rule;
@@ -28,6 +31,8 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.List;
 
 /** Test slider util methods. */
 public class TestSliderUtils {
@@ -68,4 +73,64 @@ public class TestSliderUtils {
     Assert.assertEquals(SliderUtils.truncate("1234567890", 10), "1234567890");
     Assert.assertEquals(SliderUtils.truncate("", 10), "");
   }
+
+  @Test
+  public void testApplicationReportComparison() {
+    List<ApplicationReport> instances = getApplicationReports();
+
+    SliderUtils.sortApplicationsByMostRecent(instances);
+
+    Assert.assertEquals(1000, instances.get(0).getStartTime());
+    Assert.assertEquals(1000, instances.get(1).getStartTime());
+    Assert.assertEquals(1000, instances.get(2).getStartTime());
+    Assert.assertEquals(1000, instances.get(3).getStartTime());
+
+    instances = getApplicationReports();
+
+    SliderUtils.sortApplicationReport(instances);
+    Assert.assertEquals(1000, instances.get(0).getStartTime());
+    Assert.assertEquals(1000, instances.get(1).getStartTime());
+    Assert.assertEquals(1000, instances.get(2).getStartTime());
+    Assert.assertEquals(1000, instances.get(3).getStartTime());
+
+    Assert.assertTrue(instances.get(0).getYarnApplicationState() == 
YarnApplicationState.ACCEPTED ||
+                      instances.get(0).getYarnApplicationState() == 
YarnApplicationState.RUNNING);
+    Assert.assertTrue(instances.get(1).getYarnApplicationState() == 
YarnApplicationState.ACCEPTED ||
+                      instances.get(1).getYarnApplicationState() == 
YarnApplicationState.RUNNING);
+    Assert.assertTrue(instances.get(2).getYarnApplicationState() == 
YarnApplicationState.ACCEPTED ||
+                      instances.get(2).getYarnApplicationState() == 
YarnApplicationState.RUNNING);
+    Assert.assertTrue(instances.get(3).getYarnApplicationState() == 
YarnApplicationState.KILLED);
+  }
+
+  private List<ApplicationReport> getApplicationReports() {
+    List<ApplicationReport> instances = new ArrayList<ApplicationReport>();
+    instances.add(getApplicationReport(1000, 0, "app1", 
YarnApplicationState.ACCEPTED));
+    instances.add(getApplicationReport(900, 998, "app1", 
YarnApplicationState.KILLED));
+    instances.add(getApplicationReport(900, 998, "app2", 
YarnApplicationState.FAILED));
+    instances.add(getApplicationReport(1000, 0, "app2", 
YarnApplicationState.RUNNING));
+    instances.add(getApplicationReport(800, 837, "app3", 
YarnApplicationState.FINISHED));
+    instances.add(getApplicationReport(1000, 0, "app3", 
YarnApplicationState.RUNNING));
+    instances.add(getApplicationReport(900, 998, "app3", 
YarnApplicationState.KILLED));
+    instances.add(getApplicationReport(800, 837, "app4", 
YarnApplicationState.FINISHED));
+    instances.add(getApplicationReport(1000, 1050, "app4", 
YarnApplicationState.KILLED));
+    instances.add(getApplicationReport(900, 998, "app4", 
YarnApplicationState.FINISHED));
+
+    Assert.assertEquals("app1", instances.get(0).getApplicationType());
+    Assert.assertEquals("app1", instances.get(1).getApplicationType());
+    Assert.assertEquals("app2", instances.get(2).getApplicationType());
+    Assert.assertEquals("app2", instances.get(3).getApplicationType());
+    return instances;
+  }
+
+  private ApplicationReportPBImpl getApplicationReport(long startTime,
+                                                       long finishTime,
+                                                       String name,
+                                                       YarnApplicationState 
state) {
+    ApplicationReportPBImpl ar = new ApplicationReportPBImpl();
+    ar.setFinishTime(finishTime);
+    ar.setStartTime(startTime);
+    ar.setApplicationType(name);
+    ar.setYarnApplicationState(state);
+    return ar;
+  }
 }

Reply via email to