/** * @param sesId Session ID. * @param taskNodeId Task node ID. * @param taskName Task name. * @param dep Deployment. * @param taskClsName Task class name. * @param top Topology. * @param startTime Execution start time. * @param endTime Execution end time. * @param siblings Collection of siblings. * @param attrs Map of attributes. * @param fullSup {@code True} to enable distributed session attributes and checkpoints. * @return New session if one did not exist, or existing one. */ public GridTaskSessionImpl createTaskSession( GridUuid sesId, UUID taskNodeId, String taskName, @Nullable GridDeployment dep, String taskClsName, @Nullable Collection<UUID> top, long startTime, long endTime, Collection<GridComputeJobSibling> siblings, Map<Object, Object> attrs, boolean fullSup) { if (!fullSup) { return new GridTaskSessionImpl( taskNodeId, taskName, dep, taskClsName, sesId, top, startTime, endTime, siblings, attrs, ctx, fullSup); } while (true) { GridTaskSessionImpl ses = sesMap.get(sesId); if (ses == null) { GridTaskSessionImpl old = sesMap.putIfAbsent( sesId, ses = new GridTaskSessionImpl( taskNodeId, taskName, dep, taskClsName, sesId, top, startTime, endTime, siblings, attrs, ctx, fullSup)); if (old != null) ses = old; else // Return without acquire. return ses; } if (ses.acquire()) return ses; else sesMap.remove(sesId, ses); } }
/** * Removes session for a given session ID. * * @param sesId ID of session to remove. * @return {@code True} if session was removed. */ public boolean removeSession(GridUuid sesId) { GridTaskSessionImpl ses = sesMap.get(sesId); assert ses == null || ses.isFullSupport(); if (ses != null && ses.release()) { sesMap.remove(sesId, ses); return true; } return false; }