Program: 117575
Project: 117575
Buggy source:
private <T extends DataObject>T get(final RequestContext<T> context){
  context.attemptCount+=1;
  final String host=context.platform.getTag().toLowerCase() + "String_Node_Str";
  Response response=null;
  MultiRateLimiter limiter=getRateLimiter(context.platform,context.rateLimiterName);
  try {
    if (limiter == null) {
synchronized (getCreateRateLimiterLock(context.platform,context.rateLimiterName)) {
        limiter=getRateLimiter(context.platform,context.rateLimiterName);
        if (limiter == null) {
          final long timeBefore=System.currentTimeMillis();
          response=client.get(host,context.endpoint,context.parameters,defaultHeaders,null);
          final long timeAfter=System.currentTimeMillis();
          createRateLimiter(context.platform,context.rateLimiterName,response,timeBefore,timeAfter);
        }
      }
    }
    if (limiter != null) {
      response=client.get(host,context.endpoint,context.parameters,defaultHeaders,limiter);
    }
  }
 catch (  final TimeoutException e) {
    LOGGER.info("String_Node_Str" + host + "String_Node_Str"+ context.endpoint+ "String_Node_Str",e);
    return Type.RATE_LIMITER == e.getType() ? limiterTimeoutStrategy.onFailedRequest(this,context,null,e) : httpTimeoutStrategy.onFailedRequest(this,context,null,e);
  }
catch (  final IOException e) {
    LOGGER.error("String_Node_Str" + host + "String_Node_Str"+ context.endpoint+ "String_Node_Str",e);
    throw new OriannaException("String_Node_Str" + host + "String_Node_Str"+ context.endpoint+ "String_Node_Str",e);
  }
  if (limiter != null) {
    adjustRateLimitsIfNecessary(limiter,response);
  }
switch (response.getStatusCode()) {
case 400:
    LOGGER.error("String_Node_Str" + host + "String_Node_Str"+ context.endpoint+ "String_Node_Str");
  throw new BadRequestException("String_Node_Str" + host + "String_Node_Str"+ context.endpoint+ "String_Node_Str");
case 401:
LOGGER.error("String_Node_Str" + host + "String_Node_Str"+ context.endpoint+ "String_Node_Str");
throw new UnauthorizedException("String_Node_Str" + host + "String_Node_Str"+ context.endpoint+ "String_Node_Str");
case 403:
LOGGER.error("String_Node_Str" + host + "String_Node_Str"+ context.endpoint+ "String_Node_Str");
throw new ForbiddenException("String_Node_Str" + host + "String_Node_Str"+ context.endpoint+ "String_Node_Str");
case 404:
LOGGER.info("String_Node_Str" + host + "String_Node_Str"+ context.endpoint+ "String_Node_Str");
return http404Strategy.onFailedRequest(this,context,response,new NotFoundException("String_Node_Str" + host + "String_Node_Str"+ context.endpoint+ "String_Node_Str"));
case 415:
LOGGER.error("String_Node_Str" + host + "String_Node_Str"+ context.endpoint+ "String_Node_Str");
throw new UnsupportedMediaTypeException("String_Node_Str" + host + "String_Node_Str"+ context.endpoint+ "String_Node_Str");
case 429:
LOGGER.info("String_Node_Str" + host + "String_Node_Str"+ context.endpoint+ "String_Node_Str");
return http429Strategy.onFailedRequest(this,context,response,new RateLimitExceededException("String_Node_Str" + host + "String_Node_Str"+ context.endpoint+ "String_Node_Str"));
case 500:
LOGGER.error("String_Node_Str" + host + "String_Node_Str"+ context.endpoint+ "String_Node_Str");
return http500Strategy.onFailedRequest(this,context,response,new InternalServerErrorException("String_Node_Str" + host + "String_Node_Str"+ context.endpoint+ "String_Node_Str"));
case 503:
LOGGER.error("String_Node_Str" + host + "String_Node_Str"+ context.endpoint+ "String_Node_Str");
return http503Strategy.onFailedRequest(this,context,response,new ServiceUnavailableException("String_Node_Str" + host + "String_Node_Str"+ context.endpoint+ "String_Node_Str"));
default :
if (response.getStatusCode() >= 400) {
LOGGER.error("String_Node_Str" + host + "String_Node_Str"+ context.endpoint+ "String_Node_Str"+ response.getStatusCode()+ "String_Node_Str"+ response.getBody());
throw new OriannaException("String_Node_Str" + response.getStatusCode() + "String_Node_Str"+ response.getBody());
}
break;
}
return DataObject.fromJSON(context.type,response.getBody());
}

Fixed version (ground truth):
private <T extends DataObject>T get(final RequestContext<T> context){
  context.attemptCount+=1;
  final String host=context.platform.getTag().toLowerCase() + "String_Node_Str";
  Response response=null;
  MultiRateLimiter limiter=getRateLimiter(context.platform,context.rateLimiterName);
  try {
    if (limiter == null) {
synchronized (getCreateRateLimiterLock(context.platform,context.rateLimiterName)) {
        limiter=getRateLimiter(context.platform,context.rateLimiterName);
        if (limiter == null) {
          final long timeBefore=System.currentTimeMillis();
          response=client.get(host,context.endpoint,context.parameters,defaultHeaders,null);
          final long timeAfter=System.currentTimeMillis();
          createRateLimiter(context.platform,context.rateLimiterName,response,timeBefore,timeAfter);
          final MultiRateLimiter decrement=getRateLimiter(context.platform,context.rateLimiterName);
          decrement.acquire();
          decrement.release();
        }
      }
    }
    if (limiter != null) {
      response=client.get(host,context.endpoint,context.parameters,defaultHeaders,limiter);
    }
  }
 catch (  final TimeoutException e) {
    LOGGER.info("String_Node_Str" + host + "String_Node_Str"+ context.endpoint+ "String_Node_Str",e);
    return Type.RATE_LIMITER == e.getType() ? limiterTimeoutStrategy.onFailedRequest(this,context,null,e) : httpTimeoutStrategy.onFailedRequest(this,context,null,e);
  }
catch (  final IOException e) {
    LOGGER.error("String_Node_Str" + host + "String_Node_Str"+ context.endpoint+ "String_Node_Str",e);
    throw new OriannaException("String_Node_Str" + host + "String_Node_Str"+ context.endpoint+ "String_Node_Str",e);
  }
catch (  final InterruptedException e) {
    LOGGER.error("String_Node_Str",e);
    throw new OriannaException("String_Node_Str",e);
  }
  if (limiter != null) {
    adjustRateLimitsIfNecessary(limiter,response);
  }
switch (response.getStatusCode()) {
case 400:
    LOGGER.error("String_Node_Str" + host + "String_Node_Str"+ context.endpoint+ "String_Node_Str");
  throw new BadRequestException("String_Node_Str" + host + "String_Node_Str"+ context.endpoint+ "String_Node_Str");
case 401:
LOGGER.error("String_Node_Str" + host + "String_Node_Str"+ context.endpoint+ "String_Node_Str");
throw new UnauthorizedException("String_Node_Str" + host + "String_Node_Str"+ context.endpoint+ "String_Node_Str");
case 403:
LOGGER.error("String_Node_Str" + host + "String_Node_Str"+ context.endpoint+ "String_Node_Str");
throw new ForbiddenException("String_Node_Str" + host + "String_Node_Str"+ context.endpoint+ "String_Node_Str");
case 404:
LOGGER.info("String_Node_Str" + host + "String_Node_Str"+ context.endpoint+ "String_Node_Str");
return http404Strategy.onFailedRequest(this,context,response,new NotFoundException("String_Node_Str" + host + "String_Node_Str"+ context.endpoint+ "String_Node_Str"));
case 415:
LOGGER.error("String_Node_Str" + host + "String_Node_Str"+ context.endpoint+ "String_Node_Str");
throw new UnsupportedMediaTypeException("String_Node_Str" + host + "String_Node_Str"+ context.endpoint+ "String_Node_Str");
case 429:
LOGGER.info("String_Node_Str" + response.getHeaders().get("String_Node_Str") + "String_Node_Str"+ host+ "String_Node_Str"+ context.endpoint+ "String_Node_Str");
return http429Strategy.onFailedRequest(this,context,response,new RateLimitExceededException("String_Node_Str" + host + "String_Node_Str"+ context.endpoint+ "String_Node_Str"+ response.getHeaders().get("String_Node_Str")+ "String_Node_Str"));
case 500:
LOGGER.error("String_Node_Str" + host + "String_Node_Str"+ context.endpoint+ "String_Node_Str");
return http500Strategy.onFailedRequest(this,context,response,new InternalServerErrorException("String_Node_Str" + host + "String_Node_Str"+ context.endpoint+ "String_Node_Str"));
case 503:
LOGGER.error("String_Node_Str" + host + "String_Node_Str"+ context.endpoint+ "String_Node_Str");
return http503Strategy.onFailedRequest(this,context,response,new ServiceUnavailableException("String_Node_Str" + host + "String_Node_Str"+ context.endpoint+ "String_Node_Str"));
default :
if (response.getStatusCode() >= 400) {
LOGGER.error("String_Node_Str" + host + "String_Node_Str"+ context.endpoint+ "String_Node_Str"+ response.getStatusCode()+ "String_Node_Str"+ response.getBody());
throw new OriannaException("String_Node_Str" + response.getStatusCode() + "String_Node_Str"+ response.getBody());
}
break;
}
return DataObject.fromJSON(context.type,response.getBody());
}