YARN-7181. CPUTimeTracker.updateElapsedJiffies can report negative usage. (Miklos Szegedi via Haibo Chen)
This commit is contained in:
parent
de9994bd89
commit
d2d8f665e6
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue