Program: 15245
Project: 15245
Buggy source:
private void runChecks(){
  this.getWorker().submit(new Runnable(){
    @Override public void run(){
      List<ServiceConfiguration> checkServicesList=ServiceConfigurations.collect(new Predicate<ServiceConfiguration>(){
        @Override public boolean apply(        ServiceConfiguration arg0){
          if (Bootstrap.isCloudController()) {
            return true;
          }
 else {
            return arg0.isVmLocal();
          }
        }
      }
);
      LOG.debug("String_Node_Str" + Joiner.on("String_Node_Str").join(checkServicesList));
      Predicate<Future<?>> futureIsDone=new Predicate<Future<?>>(){
        @Override public boolean apply(        Future<?> arg0){
          return arg0.isDone();
        }
      }
;
      Map<ServiceConfiguration,Future<ServiceConfiguration>> futures=Maps.newHashMap();
      for (      ServiceConfiguration config : checkServicesList) {
        LOG.debug("String_Node_Str" + config);
        futures.put(config,Topology.getInstance().submitExternal(config,TopologyChanges.checkFunction()));
      }
      for (int i=0; i < 100 && !Iterables.all(futures.values(),futureIsDone); i++) {
        try {
          TimeUnit.MILLISECONDS.sleep(100);
        }
 catch (        InterruptedException ex) {
          LOG.error(ex,ex);
          Thread.currentThread().interrupt();
        }
      }
      List<ServiceConfiguration> disabledServices=Lists.newArrayList();
      for (      Map.Entry<ServiceConfiguration,Future<ServiceConfiguration>> result : futures.entrySet()) {
        try {
          ServiceConfiguration resultConfig=result.getValue().get();
          LOG.debug("String_Node_Str" + result.getKey());
        }
 catch (        InterruptedException ex) {
          LOG.debug("String_Node_Str" + result.getKey());
          LOG.error(ex,ex);
          Thread.currentThread().interrupt();
        }
catch (        Exception ex) {
          Throwable e=ex;
          if (ex instanceof ExecutionException) {
            LOG.debug("String_Node_Str" + result.getKey() + "String_Node_Str"+ ex.getCause().getMessage());
            e=ex.getCause();
          }
 else {
            LOG.debug("String_Node_Str" + result.getKey() + "String_Node_Str"+ ex.getMessage());
          }
          try {
            disabledServices.add(result.getKey());
            Topology.this.getGuard().tryDisable(ServiceKey.create(result.getKey()),result.getKey());
          }
 catch (          ServiceRegistrationException ex1) {
            LOG.error(ex1,ex1);
          }
          LOG.error(ex,ex);
        }
      }
      if (Bootstrap.isCloudController()) {
        List<ServiceConfiguration> failoverServicesList=ServiceConfigurations.collect(new Predicate<ServiceConfiguration>(){
          @Override public boolean apply(          ServiceConfiguration arg0){
            try {
              ServiceKey key=ServiceKey.create(arg0);
              return Bootstrap.isCloudController() && Component.State.DISABLED.isIn(arg0) && !Topology.this.services.containsKey(key);
            }
 catch (            ServiceRegistrationException ex) {
              LOG.error(ex,ex);
              return false;
            }
          }
        }
);
        failoverServicesList.removeAll(disabledServices);
        for (        ServiceConfiguration config : failoverServicesList) {
          try {
            Topology.getInstance().submitExternal(config,CloudTopologyCallables.ENABLE).get();
          }
 catch (          InterruptedException ex) {
            LOG.error(ex,ex);
            Thread.currentThread().interrupt();
          }
catch (          ExecutionException ex) {
            LOG.error(ex,ex);
          }
catch (          Exception ex) {
            LOG.error(ex,ex);
          }
        }
      }
    }
  }
);
}

Fixed version (ground truth):
private void runChecks(){
  this.getWorker().submit(new Runnable(){
    @Override public void run(){
      List<ServiceConfiguration> checkServicesList=ServiceConfigurations.collect(new Predicate<ServiceConfiguration>(){
        @Override public boolean apply(        ServiceConfiguration arg0){
          if (Bootstrap.isCloudController()) {
            return true;
          }
 else {
            return arg0.isVmLocal();
          }
        }
      }
);
      LOG.debug("String_Node_Str" + Joiner.on("String_Node_Str").join(Topology.this.services.values()));
      LOG.debug("String_Node_Str" + Joiner.on("String_Node_Str").join(Topology.this.services.values()));
      LOG.debug("String_Node_Str" + Joiner.on("String_Node_Str").join(checkServicesList));
      Predicate<Future<?>> futureIsDone=new Predicate<Future<?>>(){
        @Override public boolean apply(        Future<?> arg0){
          return arg0.isDone();
        }
      }
;
      Map<ServiceConfiguration,Future<ServiceConfiguration>> futures=Maps.newHashMap();
      for (      ServiceConfiguration config : checkServicesList) {
        LOG.debug("String_Node_Str" + config);
        futures.put(config,Topology.getInstance().submitExternal(config,TopologyChanges.checkFunction()));
      }
      for (int i=0; i < 100 && !Iterables.all(futures.values(),futureIsDone); i++) {
        try {
          TimeUnit.MILLISECONDS.sleep(100);
        }
 catch (        InterruptedException ex) {
          LOG.error(ex,ex);
          Thread.currentThread().interrupt();
        }
      }
      List<ServiceConfiguration> disabledServices=Lists.newArrayList();
      for (      Map.Entry<ServiceConfiguration,Future<ServiceConfiguration>> result : futures.entrySet()) {
        try {
          ServiceConfiguration resultConfig=result.getValue().get();
          LOG.debug("String_Node_Str" + result.getKey());
        }
 catch (        InterruptedException ex) {
          LOG.debug("String_Node_Str" + result.getKey());
          LOG.error(ex,ex);
          Thread.currentThread().interrupt();
        }
catch (        Exception ex) {
          Throwable e=ex;
          if (ex instanceof ExecutionException) {
            LOG.debug("String_Node_Str" + result.getKey() + "String_Node_Str"+ ex.getCause().getMessage());
            e=ex.getCause();
          }
 else {
            LOG.debug("String_Node_Str" + result.getKey() + "String_Node_Str"+ ex.getMessage());
          }
          try {
            disabledServices.add(result.getKey());
            Topology.this.getGuard().tryDisable(ServiceKey.create(result.getKey()),result.getKey());
          }
 catch (          ServiceRegistrationException ex1) {
            LOG.error(ex1,ex1);
          }
          LOG.error(ex,ex);
        }
      }
      if (Bootstrap.isCloudController()) {
        List<ServiceConfiguration> failoverServicesList=ServiceConfigurations.collect(new Predicate<ServiceConfiguration>(){
          @Override public boolean apply(          ServiceConfiguration arg0){
            try {
              ServiceKey key=ServiceKey.create(arg0);
              return Bootstrap.isCloudController() && Component.State.DISABLED.isIn(arg0) && !Topology.this.services.containsKey(key);
            }
 catch (            ServiceRegistrationException ex) {
              LOG.error(ex,ex);
              return false;
            }
          }
        }
);
        failoverServicesList.removeAll(disabledServices);
        for (        ServiceConfiguration config : failoverServicesList) {
          try {
            Topology.getInstance().submitExternal(config,CloudTopologyCallables.ENABLE).get();
          }
 catch (          InterruptedException ex) {
            LOG.error(ex,ex);
            Thread.currentThread().interrupt();
          }
catch (          ExecutionException ex) {
            LOG.error(ex,ex);
          }
catch (          Exception ex) {
            LOG.error(ex,ex);
          }
        }
      }
    }
  }
);
}