Program: 8118
Project: 8118
Buggy source:
/** 
 * API to request time series data for a set of metrics.
 * @param request
 */
@Override public DataPoints getTimeSeries(TimeseriesRequest request) throws MetricsServiceException, TException {
  validateTimeseriesRequest(request);
  MetricTimeseriesLevel level=MetricTimeseriesLevel.FLOW_LEVEL;
  if (request.isSetLevel()) {
    level=request.getLevel();
  }
  Iterable<String> iterator=Iterables.transform(request.getMetrics(),new Function<String,String>(){
    @Override public String apply(    @Nullable String input){
      if (input.equals("String_Node_Str")) {
        return "String_Node_Str";
      }
      return "String_Node_Str" + input + "String_Node_Str";
    }
  }
);
  String values=Joiner.on("String_Node_Str").join(iterator);
  Connection connection=null;
  PreparedStatement stmt=null;
  ResultSet rs=null;
  long start=System.currentTimeMillis() / 1000;
  ;
  long end=start;
  DataPoints results=new DataPoints();
  try {
    if (request.isSetStartts() && request.getEndts() < 0) {
      start=request.getStartts() - request.getEndts() * 1000;
      end=request.getStartts();
    }
    if (!request.isSetStartts() && request.getEndts() < 0) {
      start=request.getStartts() - request.getEndts() * 1000;
    }
    if (request.isSetStartts() && request.getEndts() > 0) {
      start=request.getStartts();
      end=request.getEndts();
    }
    connection=getConnection();
    if (level == MetricTimeseriesLevel.RUNID_LEVEL) {
      StringBuffer sb=new StringBuffer();
      sb.append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str").append(values).append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str");
      stmt=connection.prepareStatement(sb.toString());
      stmt.setString(1,request.getArgument().getAccountId());
      stmt.setString(2,request.getArgument().getApplicationId());
      stmt.setString(3,request.getArgument().getFlowId());
      stmt.setString(4,request.getArgument().getRunId());
      stmt.setLong(5,start);
      stmt.setLong(6,end);
    }
 else     if (level == MetricTimeseriesLevel.ACCOUNT_LEVEL) {
      StringBuffer sb=new StringBuffer();
      sb.append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str").append(values).append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str");
      stmt=connection.prepareStatement(sb.toString());
      stmt.setString(1,request.getArgument().getAccountId());
      stmt.setLong(2,start);
      stmt.setLong(3,end);
    }
 else     if (level == MetricTimeseriesLevel.APPLICATION_LEVEL) {
      StringBuffer sb=new StringBuffer();
      sb.append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str").append(values).append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str");
      stmt=connection.prepareStatement(sb.toString());
      stmt.setString(1,request.getArgument().getAccountId());
      stmt.setString(2,request.getArgument().getApplicationId());
      stmt.setLong(3,start);
      stmt.setLong(4,end);
    }
 else     if (level == MetricTimeseriesLevel.FLOW_LEVEL) {
      StringBuffer sb=new StringBuffer();
      sb.append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str").append(values).append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str");
      stmt=connection.prepareStatement(sb.toString());
      stmt.setString(1,request.getArgument().getAccountId());
      stmt.setString(2,request.getArgument().getApplicationId());
      stmt.setString(3,request.getArgument().getFlowId());
      stmt.setLong(4,start);
      stmt.setLong(5,end);
    }
 else     if (level == MetricTimeseriesLevel.FLOWLET_LEVEL) {
      StringBuffer sb=new StringBuffer();
      sb.append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str").append(values).append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str");
      stmt=connection.prepareStatement(sb.toString());
      stmt.setString(1,request.getArgument().getAccountId());
      stmt.setString(2,request.getArgument().getApplicationId());
      stmt.setString(3,request.getArgument().getFlowId());
      stmt.setString(4,request.getArgument().getFlowletId());
      stmt.setLong(5,start);
      stmt.setLong(6,end);
    }
    rs=stmt.executeQuery();
    Map<String,List<DataPoint>> points=Maps.newHashMap();
    Map<String,Double> previousPoint=Maps.newHashMap();
    Map<String,Double> latest=Maps.newHashMap();
    while (rs.next()) {
      String metric=rs.getString("String_Node_Str");
      long ts=rs.getLong("String_Node_Str");
      double value=rs.getFloat("String_Node_Str");
      double newValue=value;
      if (request.isSetSummary() && request.isSetSummary()) {
        latest.put(metric,value);
      }
      if (previousPoint.containsKey(metric)) {
        double prevValue=previousPoint.get(metric);
        newValue=value - prevValue;
        if (newValue > prevValue * 2) {
          newValue=prevValue;
        }
      }
      previousPoint.put(metric,value);
      DataPoint point=new DataPoint(ts,newValue);
      if (points.containsKey(metric)) {
        points.get(metric).add(point);
      }
 else {
        List<DataPoint> newPoints=Lists.newArrayList();
        newPoints.add(point);
        points.put(metric,newPoints);
      }
    }
    for (    Map.Entry<String,List<DataPoint>> entry : points.entrySet()) {
      entry.getValue().remove(0);
    }
    results.setPoints(points);
    if (request.isSetSummary() && request.isSetSummary()) {
      results.setLatest(latest);
    }
  }
 catch (  SQLException e) {
    Log.warn("String_Node_Str",request.toString(),e.getMessage());
  }
 finally {
    try {
      if (rs != null) {
        rs.close();
      }
      if (stmt != null) {
        stmt.close();
      }
      if (connection != null) {
        connection.close();
      }
    }
 catch (    SQLException e) {
      Log.warn("String_Node_Str",e.getMessage());
    }
  }
  return results;
}

Fixed version (ground truth):
/** 
 * API to request time series data for a set of metrics.
 * @param request
 */
@Override public DataPoints getTimeSeries(TimeseriesRequest request) throws MetricsServiceException, TException {
  validateTimeseriesRequest(request);
  MetricTimeseriesLevel level=MetricTimeseriesLevel.FLOW_LEVEL;
  if (request.isSetLevel()) {
    level=request.getLevel();
  }
  Iterable<String> iterator=Iterables.transform(request.getMetrics(),new Function<String,String>(){
    @Override public String apply(    @Nullable String input){
      if (input.equals("String_Node_Str")) {
        return "String_Node_Str";
      }
      return "String_Node_Str" + input + "String_Node_Str";
    }
  }
);
  String values=Joiner.on("String_Node_Str").join(iterator);
  Connection connection=null;
  PreparedStatement stmt=null;
  ResultSet rs=null;
  long start=System.currentTimeMillis() / 1000;
  ;
  long end=start;
  DataPoints results=new DataPoints();
  try {
    if (request.isSetStartts() && request.getEndts() < 0) {
      start=request.getStartts() - request.getEndts() * 1000;
      end=request.getStartts();
    }
    if (!request.isSetStartts() && request.getEndts() < 0) {
      start=request.getStartts() - request.getEndts() * 1000;
    }
    if (request.isSetStartts() && request.getEndts() > 0) {
      start=request.getStartts();
      end=request.getEndts();
    }
    start=start - 5;
    end=end - 5;
    connection=getConnection();
    if (level == MetricTimeseriesLevel.RUNID_LEVEL) {
      StringBuffer sb=new StringBuffer();
      sb.append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str").append(values).append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str");
      stmt=connection.prepareStatement(sb.toString());
      stmt.setString(1,request.getArgument().getAccountId());
      stmt.setString(2,request.getArgument().getApplicationId());
      stmt.setString(3,request.getArgument().getFlowId());
      stmt.setString(4,request.getArgument().getRunId());
      stmt.setLong(5,start);
      stmt.setLong(6,end);
    }
 else     if (level == MetricTimeseriesLevel.ACCOUNT_LEVEL) {
      StringBuffer sb=new StringBuffer();
      sb.append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str").append(values).append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str");
      stmt=connection.prepareStatement(sb.toString());
      stmt.setString(1,request.getArgument().getAccountId());
      stmt.setLong(2,start);
      stmt.setLong(3,end);
    }
 else     if (level == MetricTimeseriesLevel.APPLICATION_LEVEL) {
      StringBuffer sb=new StringBuffer();
      sb.append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str").append(values).append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str");
      stmt=connection.prepareStatement(sb.toString());
      stmt.setString(1,request.getArgument().getAccountId());
      stmt.setString(2,request.getArgument().getApplicationId());
      stmt.setLong(3,start);
      stmt.setLong(4,end);
    }
 else     if (level == MetricTimeseriesLevel.FLOW_LEVEL) {
      StringBuffer sb=new StringBuffer();
      sb.append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str").append(values).append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str");
      stmt=connection.prepareStatement(sb.toString());
      stmt.setString(1,request.getArgument().getAccountId());
      stmt.setString(2,request.getArgument().getApplicationId());
      stmt.setString(3,request.getArgument().getFlowId());
      stmt.setLong(4,start);
      stmt.setLong(5,end);
    }
 else     if (level == MetricTimeseriesLevel.FLOWLET_LEVEL) {
      StringBuffer sb=new StringBuffer();
      sb.append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str").append(values).append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str");
      sb.append("String_Node_Str").append("String_Node_Str");
      stmt=connection.prepareStatement(sb.toString());
      stmt.setString(1,request.getArgument().getAccountId());
      stmt.setString(2,request.getArgument().getApplicationId());
      stmt.setString(3,request.getArgument().getFlowId());
      stmt.setString(4,request.getArgument().getFlowletId());
      stmt.setLong(5,start);
      stmt.setLong(6,end);
    }
    rs=stmt.executeQuery();
    Map<String,List<DataPoint>> points=Maps.newHashMap();
    Map<String,Double> previousPoint=Maps.newHashMap();
    Map<String,Double> latest=Maps.newHashMap();
    while (rs.next()) {
      String metric=rs.getString("String_Node_Str");
      long ts=rs.getLong("String_Node_Str");
      double value=rs.getFloat("String_Node_Str");
      double newValue=value;
      if (request.isSetSummary() && request.isSetSummary()) {
        latest.put(metric,value);
      }
      if (previousPoint.containsKey(metric)) {
        double prevValue=previousPoint.get(metric);
        newValue=value - prevValue;
        if (newValue > prevValue * 2) {
          newValue=prevValue;
        }
      }
      previousPoint.put(metric,value);
      DataPoint point=new DataPoint(ts,newValue);
      if (points.containsKey(metric)) {
        points.get(metric).add(point);
      }
 else {
        List<DataPoint> newPoints=Lists.newArrayList();
        newPoints.add(point);
        points.put(metric,newPoints);
      }
    }
    for (    Map.Entry<String,List<DataPoint>> entry : points.entrySet()) {
      entry.getValue().remove(0);
    }
    results.setPoints(points);
    if (request.isSetSummary() && request.isSetSummary()) {
      results.setLatest(latest);
    }
  }
 catch (  SQLException e) {
    Log.warn("String_Node_Str",request.toString(),e.getMessage());
  }
 finally {
    try {
      if (rs != null) {
        rs.close();
      }
      if (stmt != null) {
        stmt.close();
      }
      if (connection != null) {
        connection.close();
      }
    }
 catch (    SQLException e) {
      Log.warn("String_Node_Str",e.getMessage());
    }
  }
  return results;
}