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; + } }
