Program: 82531
Project: 82531
Buggy source:
private void setupTableWarmer(){
  _timerTableWarmer=new Timer("String_Node_Str",true);
  _timerTableWarmer.schedule(new TimerTask(){
    @Override public void run(){
      List<String> tableList=_clusterStatus.getTableList();
      _blurMetrics.tableCount.set(tableList.size());
      long indexCount=0;
      AtomicLong segmentCount=new AtomicLong();
      AtomicLong indexMemoryUsage=new AtomicLong();
      for (      String table : tableList) {
        try {
          Map<String,BlurIndex> indexes=getIndexes(table);
          int count=indexes.size();
          indexCount+=count;
          updateMetrics(_blurMetrics,indexes,segmentCount,indexMemoryUsage);
          LOG.debug("String_Node_Str",table,count);
        }
 catch (        IOException e) {
          LOG.error("String_Node_Str",e,table);
        }
      }
      _blurMetrics.indexCount.set(indexCount);
      _blurMetrics.segmentCount.set(segmentCount.get());
      _blurMetrics.indexMemoryUsage.set(indexMemoryUsage.get());
    }
    private void updateMetrics(    BlurMetrics blurMetrics,    Map<String,BlurIndex> indexes,    AtomicLong segmentCount,    AtomicLong indexMemoryUsage) throws IOException {
      for (      BlurIndex index : indexes.values()) {
        IndexReader reader=index.getIndexReader(false);
        try {
          IndexReader[] readers=reader.getSequentialSubReaders();
          if (readers != null) {
            segmentCount.addAndGet(readers.length);
          }
          indexMemoryUsage.addAndGet(BlurUtil.getMemoryUsage(reader));
        }
  finally {
          reader.decRef();
        }
      }
    }
  }
,_delay,_delay);
}

Fixed version (ground truth):
private void setupTableWarmer(){
  _timerTableWarmer=new Timer("String_Node_Str",true);
  _timerTableWarmer.schedule(new TimerTask(){
    @Override public void run(){
      try {
        warmup();
      }
 catch (      Throwable e) {
        LOG.error("String_Node_Str",e);
      }
    }
    private void warmup(){
      List<String> tableList=_clusterStatus.getTableList(cluster);
      _blurMetrics.tableCount.set(tableList.size());
      long indexCount=0;
      AtomicLong segmentCount=new AtomicLong();
      AtomicLong indexMemoryUsage=new AtomicLong();
      for (      String table : tableList) {
        try {
          Map<String,BlurIndex> indexes=getIndexes(table);
          int count=indexes.size();
          indexCount+=count;
          updateMetrics(_blurMetrics,indexes,segmentCount,indexMemoryUsage);
          LOG.debug("String_Node_Str",table,count);
        }
 catch (        IOException e) {
          LOG.error("String_Node_Str",e,table);
        }
      }
      _blurMetrics.indexCount.set(indexCount);
      _blurMetrics.segmentCount.set(segmentCount.get());
      _blurMetrics.indexMemoryUsage.set(indexMemoryUsage.get());
    }
    private void updateMetrics(    BlurMetrics blurMetrics,    Map<String,BlurIndex> indexes,    AtomicLong segmentCount,    AtomicLong indexMemoryUsage) throws IOException {
      for (      BlurIndex index : indexes.values()) {
        IndexReader reader=index.getIndexReader(false);
        try {
          IndexReader[] readers=reader.getSequentialSubReaders();
          if (readers != null) {
            segmentCount.addAndGet(readers.length);
          }
          indexMemoryUsage.addAndGet(BlurUtil.getMemoryUsage(reader));
        }
  finally {
          reader.decRef();
        }
      }
    }
  }
,_delay,_delay);
}