Program: 106144
Project: 106144
Buggy source:
@Override public DataObject chooseOneToBeReplaced(DataStore store){
  Calendar cal=Calendar.getInstance();
  cal.setTime(DateUtil.now());
  cal.add(Calendar.DAY_OF_MONTH,-unusedTimeInterval.intValue());
  Date bef=cal.getTime();
  QueryBuilder<TemplateDataStoreVO> sc=QueryBuilder.create(TemplateDataStoreVO.class);
  sc.and(sc.entity().getLastUpdated(),SearchCriteria.Op.LT,bef);
  sc.and(sc.entity().getState(),SearchCriteria.Op.EQ,ObjectInDataStoreStateMachine.State.Ready);
  sc.and(sc.entity().getDataStoreId(),SearchCriteria.Op.EQ,store.getId());
  sc.and(sc.entity().getDataStoreRole(),SearchCriteria.Op.EQ,store.getRole());
  sc.and(sc.entity().getRefCnt(),SearchCriteria.Op.EQ,0);
  TemplateDataStoreVO template=sc.find();
  if (template != null) {
    return templateFactory.getTemplate(template.getTemplateId(),store);
  }
  QueryBuilder<VolumeDataStoreVO> volSc=QueryBuilder.create(VolumeDataStoreVO.class);
  volSc.and(volSc.entity().getLastUpdated(),SearchCriteria.Op.LT,bef);
  volSc.and(volSc.entity().getState(),SearchCriteria.Op.EQ,ObjectInDataStoreStateMachine.State.Ready);
  volSc.and(volSc.entity().getDataStoreId(),SearchCriteria.Op.EQ,store.getId());
  volSc.and(volSc.entity().getRefCnt(),SearchCriteria.Op.EQ,0);
  VolumeDataStoreVO volume=volSc.find();
  if (volume != null) {
    return volumeFactory.getVolume(volume.getVolumeId(),store);
  }
  QueryBuilder<SnapshotDataStoreVO> snapshotSc=QueryBuilder.create(SnapshotDataStoreVO.class);
  snapshotSc.and(snapshotSc.entity().getLastUpdated(),SearchCriteria.Op.LT,bef);
  snapshotSc.and(snapshotSc.entity().getState(),SearchCriteria.Op.EQ,ObjectInDataStoreStateMachine.State.Ready);
  snapshotSc.and(snapshotSc.entity().getDataStoreId(),SearchCriteria.Op.EQ,store.getId());
  snapshotSc.and(snapshotSc.entity().getRole(),SearchCriteria.Op.EQ,store.getRole());
  snapshotSc.and(snapshotSc.entity().getRefCnt(),SearchCriteria.Op.EQ,0);
  SnapshotDataStoreVO snapshot=snapshotSc.find();
  if (snapshot != null) {
    return snapshotFactory.getSnapshot(snapshot.getSnapshotId(),store);
  }
  return null;
}

Fixed version (ground truth):
@Override public DataObject chooseOneToBeReplaced(DataStore store){
  if (unusedTimeInterval == null) {
    unusedTimeInterval=NumbersUtil.parseInt(configDao.getValue(Config.StorageCacheReplacementLRUTimeInterval.key()),30);
  }
  Calendar cal=Calendar.getInstance();
  cal.setTime(DateUtil.now());
  cal.add(Calendar.DAY_OF_MONTH,-unusedTimeInterval.intValue());
  Date bef=cal.getTime();
  QueryBuilder<TemplateDataStoreVO> sc=QueryBuilder.create(TemplateDataStoreVO.class);
  sc.and(sc.entity().getLastUpdated(),SearchCriteria.Op.LT,bef);
  sc.and(sc.entity().getState(),SearchCriteria.Op.EQ,ObjectInDataStoreStateMachine.State.Ready);
  sc.and(sc.entity().getDataStoreId(),SearchCriteria.Op.EQ,store.getId());
  sc.and(sc.entity().getDataStoreRole(),SearchCriteria.Op.EQ,store.getRole());
  sc.and(sc.entity().getRefCnt(),SearchCriteria.Op.EQ,0);
  TemplateDataStoreVO template=sc.find();
  if (template != null) {
    return templateFactory.getTemplate(template.getTemplateId(),store);
  }
  QueryBuilder<VolumeDataStoreVO> volSc=QueryBuilder.create(VolumeDataStoreVO.class);
  volSc.and(volSc.entity().getLastUpdated(),SearchCriteria.Op.LT,bef);
  volSc.and(volSc.entity().getState(),SearchCriteria.Op.EQ,ObjectInDataStoreStateMachine.State.Ready);
  volSc.and(volSc.entity().getDataStoreId(),SearchCriteria.Op.EQ,store.getId());
  volSc.and(volSc.entity().getRefCnt(),SearchCriteria.Op.EQ,0);
  VolumeDataStoreVO volume=volSc.find();
  if (volume != null) {
    return volumeFactory.getVolume(volume.getVolumeId(),store);
  }
  QueryBuilder<SnapshotDataStoreVO> snapshotSc=QueryBuilder.create(SnapshotDataStoreVO.class);
  snapshotSc.and(snapshotSc.entity().getLastUpdated(),SearchCriteria.Op.LT,bef);
  snapshotSc.and(snapshotSc.entity().getState(),SearchCriteria.Op.EQ,ObjectInDataStoreStateMachine.State.Ready);
  snapshotSc.and(snapshotSc.entity().getDataStoreId(),SearchCriteria.Op.EQ,store.getId());
  snapshotSc.and(snapshotSc.entity().getRole(),SearchCriteria.Op.EQ,store.getRole());
  snapshotSc.and(snapshotSc.entity().getRefCnt(),SearchCriteria.Op.EQ,0);
  SnapshotDataStoreVO snapshot=snapshotSc.find();
  if (snapshot != null) {
    return snapshotFactory.getSnapshot(snapshot.getSnapshotId(),store);
  }
  return null;
}