Repository: hadoop Updated Branches: refs/heads/branch-3.0 07cbb81e8 -> 1a2e8196d
YARN-7181. CPUTimeTracker.updateElapsedJiffies can report negative usage. (Miklos Szegedi via Haibo Chen) (cherry picked from commit d2d8f665e62a6ddfe20457fb3a07cc2bea9a856b) Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/1a2e8196 Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/1a2e8196 Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/1a2e8196 Branch: refs/heads/branch-3.0 Commit: 1a2e8196d132309de4a2b3873ad8b15d8eb8f381 Parents: 07cbb81 Author: Haibo Chen <[email protected]> Authored: Mon Sep 11 12:42:17 2017 -0700 Committer: Haibo Chen <[email protected]> Committed: Mon Sep 11 12:48:38 2017 -0700 ---------------------------------------------------------------------- .../org/apache/hadoop/util/CpuTimeTracker.java | 4 +- .../apache/hadoop/util/TestCpuTimeTracker.java | 52 ++++++++++++++++++++ 2 files changed, 55 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hadoop/blob/1a2e8196/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/util/CpuTimeTracker.java ---------------------------------------------------------------------- diff --git a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/util/CpuTimeTracker.java b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/util/CpuTimeTracker.java index 3f17c9a..b4ebe86 100644 --- a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/util/CpuTimeTracker.java +++ b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/util/CpuTimeTracker.java @@ -97,7 +97,9 @@ public class CpuTimeTracker { * @param newTime new sample time */ public void updateElapsedJiffies(BigInteger elapsedJiffies, long newTime) { - cumulativeCpuTime = elapsedJiffies.multiply(jiffyLengthInMillis); + BigInteger newValue = elapsedJiffies.multiply(jiffyLengthInMillis); + cumulativeCpuTime = newValue.compareTo(cumulativeCpuTime) >= 0 ? + newValue : cumulativeCpuTime; sampleTime = newTime; } http://git-wip-us.apache.org/repos/asf/hadoop/blob/1a2e8196/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/util/TestCpuTimeTracker.java ---------------------------------------------------------------------- diff --git a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/util/TestCpuTimeTracker.java b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/util/TestCpuTimeTracker.java new file mode 100644 index 0000000..6246672 --- /dev/null +++ b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/util/TestCpuTimeTracker.java @@ -0,0 +1,52 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.hadoop.util; + +import org.junit.Test; +import java.math.BigInteger; +import static org.junit.Assert.assertTrue; + +public class TestCpuTimeTracker { + @Test + public void test() throws InterruptedException { + CpuTimeTracker tracker = new CpuTimeTracker(10); + tracker.updateElapsedJiffies( + BigInteger.valueOf(100), + System.currentTimeMillis()); + float val1 = tracker.getCpuTrackerUsagePercent(); + assertTrue( + "Not invalid CPU usage", + val1 == -1.0); + Thread.sleep(1000); + tracker.updateElapsedJiffies( + BigInteger.valueOf(200), + System.currentTimeMillis()); + float val2 = tracker.getCpuTrackerUsagePercent(); + assertTrue( + "Not positive CPU usage", + val2 > 0); + Thread.sleep(1000); + tracker.updateElapsedJiffies( + BigInteger.valueOf(0), + System.currentTimeMillis()); + float val3 = tracker.getCpuTrackerUsagePercent(); + assertTrue( + "Not positive CPU usage", + val3 == 0.0); + } +} --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
