xinqiu.hu created HADOOP-18429:
----------------------------------
Summary: MutableGaugeFloat#incr(float) get stuck in an infinite
loop
Key: HADOOP-18429
URL: https://issues.apache.org/jira/browse/HADOOP-18429
Project: Hadoop Common
Issue Type: Bug
Components: metrics
Reporter: xinqiu.hu
The current implementation converts the value from int to float, causing the
compareAndSet method to get stuck.
{code:java}
private final boolean compareAndSet(float expect, float update) {
return value.compareAndSet(Float.floatToIntBits(expect),
Float.floatToIntBits(update));
}
private void incr(float delta) {
while (true) {
float current = value.get();
float next = current + delta;
if (compareAndSet(current, next)) {
setChanged();
return;
}
}
} {code}
Perhaps it could be:
{code:java}
private void incr(float delta) {
while (true) {
float current = Float.intBitsToFloat(value.get());
float next = current + delta;
if (compareAndSet(current, next)) {
setChanged();
return;
}
}
} {code}
The unit test looks like this
{code:java}
MutableGaugeFloat mgf = new MutableGaugeFloat(Context,3.2f);
assertEquals(3.2f, mgf.value(), 0.0);
mgf.incr();
assertEquals(4.2f, mgf.value(), 0.0); {code}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]