Sascha Coenen created HADOOP-11182:
--------------------------------------
Summary: GraphiteSink emits wrong timestamps
Key: HADOOP-11182
URL: https://issues.apache.org/jira/browse/HADOOP-11182
Project: Hadoop Common
Issue Type: Bug
Affects Versions: 2.5.1, 2.5.0
Reporter: Sascha Coenen
the org.apache.hadoop.metrics2.sink.GraphiteSink class emits metrics at the
configured time period, but the timestamps written only change every 128
seconds, even it the configured time period in the configuration file is much
shorter.
This is due to a bug in line 93:
{code:java}
092 // Round the timestamp to second as Graphite accepts it in such
format.
093 int timestamp = Math.round(record.timestamp() / 1000.0f);
{code}
The timestamp property is a long and is divided by a float which yields a
result that is not precise enough and yields same valued results for timestamps
that lie up to 128 seconds apart. Also, the result is then written into an int
variable.
One solution would be to divide by 1000.0d, but the best fix would be to not
even convert to a decimal format in the first place. Instead one could replace
the line with the following:
{code:java}
long timestamp = record.timestamp() / 1000L;
{code}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)