private void startTasks(Map<String, List<TaskAttemptDescriptor>> taskAttemptMap) throws HyracksException { final DeploymentId deploymentId = jobRun.getDeploymentId(); final JobId jobId = jobRun.getJobId(); final ActivityClusterGraph acg = jobRun.getActivityClusterGraph(); final Map<ConnectorDescriptorId, IConnectorPolicy> connectorPolicies = new HashMap<>(jobRun.getConnectorPolicyMap()); INodeManager nodeManager = ccs.getNodeManager(); try { byte[] acgBytes = isDeployed() ? null : JavaSerializationUtils.serialize(acg); for (Map.Entry<String, List<TaskAttemptDescriptor>> entry : taskAttemptMap.entrySet()) { String nodeId = entry.getKey(); final List<TaskAttemptDescriptor> taskDescriptors = entry.getValue(); final NodeControllerState node = nodeManager.getNodeControllerState(nodeId); if (node != null) { node.getActiveJobIds().add(jobRun.getJobId()); boolean changed = jobRun.getParticipatingNodeIds().add(nodeId); if (LOGGER.isTraceEnabled()) { LOGGER.trace("Starting: " + taskDescriptors + " at " + entry.getKey()); } byte[] jagBytes = changed ? acgBytes : null; node.getNodeController().startTasks(deploymentId, jobId, jagBytes, taskDescriptors, connectorPolicies, jobRun.getFlags(), ccs.createOrGetJobParameterByteStore(jobId).getParameterMap(), deployedJobSpecId, jobRun.getStartTime()); } } } catch (Exception e) { throw HyracksException.create(e); } }