Program: 34229
Project: 34229
Buggy source:
@Override public List<TaskInfo> getTaskInfo(RunId runId){
  List<TaskInfo> taskInfos=Lists.newArrayList();
  String startedTasksParentPath=ZooKeeperConstants.getStartedTasksParentPath();
  String completedTaskParentPath=ZooKeeperConstants.getCompletedTaskParentPath();
  try {
    String runPath=ZooKeeperConstants.getRunPath(runId);
    byte[] runBytes=curator.getData().forPath(runPath);
    RunnableTask runnableTask=serializer.deserialize(runBytes,RunnableTask.class);
    Set<TaskId> notStartedTasks=runnableTask.getTasks().values().stream().filter(ExecutableTask::isExecutable).map(ExecutableTask::getTaskId).collect(Collectors.toSet());
    Map<TaskId,StartedTask> startedTasks=Maps.newHashMap();
    curator.getChildren().forPath(startedTasksParentPath).stream().forEach(child -> {
      String fullPath=ZKPaths.makePath(startedTasksParentPath,child);
      TaskId taskId=new TaskId(ZooKeeperConstants.getTaskIdFromStartedTasksPath(fullPath));
      try {
        byte[] bytes=curator.getData().forPath(fullPath);
        StartedTask startedTask=serializer.deserialize(bytes,StartedTask.class);
        startedTasks.put(taskId,startedTask);
        notStartedTasks.remove(taskId);
      }
 catch (      KeeperException.NoNodeException ignore) {
      }
catch (      Exception e) {
        throw new RuntimeException("String_Node_Str" + fullPath,e);
      }
    }
);
    curator.getChildren().forPath(completedTaskParentPath).stream().forEach(child -> {
      String fullPath=ZKPaths.makePath(completedTaskParentPath,child);
      TaskId taskId=new TaskId(ZooKeeperConstants.getTaskIdFromCompletedTasksPath(fullPath));
      StartedTask startedTask=startedTasks.remove(taskId);
      if (startedTask != null) {
        try {
          byte[] bytes=curator.getData().forPath(fullPath);
          TaskExecutionResult taskExecutionResult=serializer.deserialize(bytes,TaskExecutionResult.class);
          taskInfos.add(new TaskInfo(taskId,startedTask.getInstanceName(),startedTask.getStartDateUtc(),taskExecutionResult));
          notStartedTasks.remove(taskId);
        }
 catch (        KeeperException.NoNodeException ignore) {
        }
catch (        Exception e) {
          throw new RuntimeException("String_Node_Str" + fullPath,e);
        }
      }
    }
);
    startedTasks.entrySet().forEach(entry -> {
      StartedTask startedTask=entry.getValue();
      taskInfos.add(new TaskInfo(entry.getKey(),startedTask.getInstanceName(),startedTask.getStartDateUtc(),startedTask.getProgress()));
    }
);
    notStartedTasks.forEach(taskId -> taskInfos.add(new TaskInfo(taskId)));
  }
 catch (  Throwable e) {
    throw new RuntimeException(e);
  }
  return taskInfos;
}

Fixed version (ground truth):
@Override public List<TaskInfo> getTaskInfo(RunId runId){
  List<TaskInfo> taskInfos=Lists.newArrayList();
  String startedTasksParentPath=ZooKeeperConstants.getStartedTasksParentPath();
  String completedTaskParentPath=ZooKeeperConstants.getCompletedTaskParentPath();
  try {
    String runPath=ZooKeeperConstants.getRunPath(runId);
    byte[] runBytes=curator.getData().forPath(runPath);
    RunnableTask runnableTask=serializer.deserialize(runBytes,RunnableTask.class);
    Set<TaskId> notStartedTasks=runnableTask.getTasks().values().stream().filter(ExecutableTask::isExecutable).map(ExecutableTask::getTaskId).collect(Collectors.toSet());
    Map<TaskId,StartedTask> startedTasks=Maps.newHashMap();
    curator.getChildren().forPath(startedTasksParentPath).stream().forEach(child -> {
      String fullPath=ZKPaths.makePath(startedTasksParentPath,child);
      TaskId taskId=new TaskId(ZooKeeperConstants.getTaskIdFromStartedTasksPath(fullPath));
      try {
        byte[] bytes=curator.getData().forPath(fullPath);
        StartedTask startedTask=serializer.deserialize(bytes,StartedTask.class);
        startedTasks.put(taskId,startedTask);
        notStartedTasks.remove(taskId);
      }
 catch (      KeeperException.NoNodeException ignore) {
      }
catch (      Exception e) {
        throw new RuntimeException("String_Node_Str" + fullPath,e);
      }
    }
);
    curator.getChildren().forPath(completedTaskParentPath).stream().forEach(child -> {
      String fullPath=ZKPaths.makePath(completedTaskParentPath,child);
      TaskId taskId=new TaskId(ZooKeeperConstants.getTaskIdFromCompletedTasksPath(fullPath));
      StartedTask startedTask=startedTasks.remove(taskId);
      if (startedTask != null) {
        try {
          byte[] bytes=curator.getData().forPath(fullPath);
          TaskExecutionResult taskExecutionResult=serializer.deserialize(bytes,TaskExecutionResult.class);
          taskInfos.add(new TaskInfo(taskId,startedTask.getInstanceName(),startedTask.getStartDateUtc(),startedTask.getProgress(),taskExecutionResult));
          notStartedTasks.remove(taskId);
        }
 catch (        KeeperException.NoNodeException ignore) {
        }
catch (        Exception e) {
          throw new RuntimeException("String_Node_Str" + fullPath,e);
        }
      }
    }
);
    startedTasks.entrySet().forEach(entry -> {
      StartedTask startedTask=entry.getValue();
      taskInfos.add(new TaskInfo(entry.getKey(),startedTask.getInstanceName(),startedTask.getStartDateUtc(),startedTask.getProgress()));
    }
);
    notStartedTasks.forEach(taskId -> taskInfos.add(new TaskInfo(taskId)));
  }
 catch (  Throwable e) {
    throw new RuntimeException(e);
  }
  return taskInfos;
}