minchengbo created HADOOP-17333:
-----------------------------------

             Summary: MetricsRecordFiltered error
                 Key: HADOOP-17333
                 URL: https://issues.apache.org/jira/browse/HADOOP-17333
             Project: Hadoop Common
          Issue Type: Bug
          Components: common
    Affects Versions: 3.2.1
         Environment: This case can show the exception
        public static void main(String[] args) {
                 List<AbstractMetric> metricsd=new 
LinkedList<AbstractMetric>();                 
                 MetricsInfo info=MsInfo.ProcessName;
                 long timestamp=System.currentTimeMillis();
         List<MetricsTag> tags=new LinkedList<>();               
                 org.apache.hadoop.metrics2.impl.MetricsRecordImpl recordimp = 
new MetricsRecordImpl(info, timestamp, tags, metricsd);
                 MetricsFilter filter=new RegexFilter();         
                 MetricsRecordFiltered  recordfilter=new 
MetricsRecordFiltered(recordimp,filter);               
                 SubsetConfiguration conf=new SubsetConfiguration(new 
PropertyListConfiguration(),"test");
                 
conf.addProperty(AbstractGangliaSink.SUPPORT_SPARSE_METRICS_PROPERTY, true);
                 GangliaSink30  ganliasink=new GangliaSink30();
                 ganliasink.init(conf);          
                 ganliasink.putMetrics(recordfilter);
                
        }

///////////////////////////////////////////////////////////////
The root cause is:
 Gets a Iterable object in  MetricsRecordFiltered.java:
 @Override public Iterable<AbstractMetric> metrics() {
    return new Iterable<AbstractMetric>() {
      final Iterator<AbstractMetric> it = delegate.metrics().iterator();
      @Override public Iterator<AbstractMetric> iterator() {
        return new AbstractIterator<AbstractMetric>() {
          @Override public AbstractMetric computeNext() {
            while (it.hasNext()) {
              AbstractMetric next = it.next();
              if (filter.accepts(next.name())) {
                return next;
              }
            }
            return (AbstractMetric)endOfData();
          }
        };
      }
    };
  }

but convert to Collection in GangliaSink30.java line 164
        Collection<AbstractMetric> metrics = (Collection<AbstractMetric>) record
            .metrics();


            Reporter: minchengbo


 Got sink exception,when set  
datanode.sink.ganglia.metric.filter.exclude=metricssystem in 
hadoop-metrics2.properties ,

java.lang.ClassCastException: 
org.apache.hadoop.metrics2.impl.MetricsRecordFiltered$1 cannot be cast to 
java.util.Collection
 at 
org.apache.hadoop.metrics2.sink.ganglia.GangliaSink30.putMetrics(GangliaSink30.java:165)
 at 
org.apache.hadoop.metrics2.impl.MetricsSinkAdapter.consume(MetricsSinkAdapter.java:184)
 at 
org.apache.hadoop.metrics2.impl.MetricsSinkAdapter.consume(MetricsSinkAdapter.java:43)
 at org.apache.hadoop.metrics2.impl.SinkQueue.consumeAll(SinkQueue.java:87)
 at 
org.apache.hadoop.metrics2.impl.MetricsSinkAdapter.publishMetricsFromQueue(MetricsSinkAdapter.java:135)
 at 
org.apache.hadoop.metrics2.impl.MetricsSinkAdapter$1.run(MetricsSinkAdapter.java:89)



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

---------------------------------------------------------------------
To unsubscribe, e-mail: common-issues-unsubscr...@hadoop.apache.org
For additional commands, e-mail: common-issues-h...@hadoop.apache.org

Reply via email to