Search in sources :

Example 6 with ComputeJobSibling

use of org.apache.ignite.compute.ComputeJobSibling in project ignite by apache.

the class GridTaskSessionImpl method getJobSibling.

/** {@inheritDoc} */
@Override
public ComputeJobSibling getJobSibling(IgniteUuid jobId) {
    A.notNull(jobId, "jobId");
    Collection<ComputeJobSibling> tmp = getJobSiblings();
    for (ComputeJobSibling sibling : tmp) if (sibling.getJobId().equals(jobId))
        return sibling;
    return null;
}
Also used : ComputeJobSibling(org.apache.ignite.compute.ComputeJobSibling)

Example 7 with ComputeJobSibling

use of org.apache.ignite.compute.ComputeJobSibling in project ignite by apache.

the class GridTaskProcessor method sendSessionAttributes.

/**
     * This method will make the best attempt to send attributes to all jobs.
     *
     * @param attrs Deserialized session attributes.
     * @param ses Task session.
     * @throws IgniteCheckedException If send to any of the jobs failed.
     */
@SuppressWarnings({ "SynchronizationOnLocalVariableOrMethodParameter", "BusyWait" })
private void sendSessionAttributes(Map<?, ?> attrs, GridTaskSessionImpl ses) throws IgniteCheckedException {
    assert attrs != null;
    assert ses != null;
    Collection<ComputeJobSibling> siblings = ses.getJobSiblings();
    GridIoManager commMgr = ctx.io();
    long timeout = ses.getEndTime() - U.currentTimeMillis();
    if (timeout <= 0) {
        U.warn(log, "Session attributes won't be set due to task timeout: " + attrs);
        return;
    }
    Set<UUID> rcvrs = new HashSet<>();
    UUID locNodeId = ctx.localNodeId();
    synchronized (ses) {
        if (ses.isClosed()) {
            if (log.isDebugEnabled())
                log.debug("Setting session attributes on closed session (will ignore): " + ses);
            return;
        }
        ses.setInternal(attrs);
        // ID will be associated with a certain session state.
        for (ComputeJobSibling s : siblings) {
            GridJobSiblingImpl sib = (GridJobSiblingImpl) s;
            UUID nodeId = sib.nodeId();
            if (!nodeId.equals(locNodeId) && !sib.isJobDone() && !rcvrs.contains(nodeId))
                rcvrs.add(nodeId);
        }
    }
    if (ctx.event().isRecordable(EVT_TASK_SESSION_ATTR_SET)) {
        Event evt = new TaskEvent(ctx.discovery().localNode(), "Changed attributes: " + attrs, EVT_TASK_SESSION_ATTR_SET, ses.getId(), ses.getTaskName(), ses.getTaskClassName(), false, null);
        ctx.event().record(evt);
    }
    IgniteCheckedException ex = null;
    // Every job gets an individual message to keep track of ghost requests.
    for (ComputeJobSibling s : ses.getJobSiblings()) {
        GridJobSiblingImpl sib = (GridJobSiblingImpl) s;
        UUID nodeId = sib.nodeId();
        // Pair can be null if job is finished.
        if (rcvrs.remove(nodeId)) {
            ClusterNode node = ctx.discovery().node(nodeId);
            // Check that node didn't change (it could happen in case of failover).
            if (node != null) {
                boolean loc = node.id().equals(ctx.localNodeId()) && !ctx.config().isMarshalLocalJobs();
                GridTaskSessionRequest req = new GridTaskSessionRequest(ses.getId(), null, loc ? null : U.marshal(marsh, attrs), attrs);
                // should be preserved here.
                try {
                    commMgr.sendOrderedMessage(node, sib.jobTopic(), req, SYSTEM_POOL, timeout, false);
                } catch (IgniteCheckedException e) {
                    node = ctx.discovery().node(nodeId);
                    if (node != null) {
                        try {
                            // Since communication on remote node may stop before
                            // we get discovery notification, we give ourselves the
                            // best effort to detect it.
                            Thread.sleep(DISCO_TIMEOUT);
                        } catch (InterruptedException ignore) {
                            U.warn(log, "Got interrupted while sending session attributes.");
                        }
                        node = ctx.discovery().node(nodeId);
                    }
                    String err = "Failed to send session attribute request message to node " + "(normal case if node left grid) [node=" + node + ", req=" + req + ']';
                    if (node != null)
                        U.warn(log, err);
                    else if (log.isDebugEnabled())
                        log.debug(err);
                    if (ex == null)
                        ex = e;
                }
            }
        }
    }
    if (ex != null)
        throw ex;
}
Also used : ClusterNode(org.apache.ignite.cluster.ClusterNode) GridJobSiblingImpl(org.apache.ignite.internal.GridJobSiblingImpl) IgniteCheckedException(org.apache.ignite.IgniteCheckedException) GridIoManager(org.apache.ignite.internal.managers.communication.GridIoManager) GridTaskSessionRequest(org.apache.ignite.internal.GridTaskSessionRequest) TaskEvent(org.apache.ignite.events.TaskEvent) TaskEvent(org.apache.ignite.events.TaskEvent) Event(org.apache.ignite.events.Event) DiscoveryEvent(org.apache.ignite.events.DiscoveryEvent) ComputeJobSibling(org.apache.ignite.compute.ComputeJobSibling) UUID(java.util.UUID) HashSet(java.util.HashSet)

Aggregations

ComputeJobSibling (org.apache.ignite.compute.ComputeJobSibling)7 Map (java.util.Map)3 IgniteCheckedException (org.apache.ignite.IgniteCheckedException)3 UUID (java.util.UUID)2 Ignite (org.apache.ignite.Ignite)2 IgniteException (org.apache.ignite.IgniteException)2 ClusterNode (org.apache.ignite.cluster.ClusterNode)2 ComputeTaskSession (org.apache.ignite.compute.ComputeTaskSession)2 GridJobSiblingImpl (org.apache.ignite.internal.GridJobSiblingImpl)2 IgniteUuid (org.apache.ignite.lang.IgniteUuid)2 ArrayList (java.util.ArrayList)1 Collection (java.util.Collection)1 HashMap (java.util.HashMap)1 HashSet (java.util.HashSet)1 ConcurrentMap (java.util.concurrent.ConcurrentMap)1 IgniteDeploymentException (org.apache.ignite.IgniteDeploymentException)1 ComputeJob (org.apache.ignite.compute.ComputeJob)1 ComputeTaskSessionAttributeListener (org.apache.ignite.compute.ComputeTaskSessionAttributeListener)1 ComputeTaskSessionScope (org.apache.ignite.compute.ComputeTaskSessionScope)1 DiscoveryEvent (org.apache.ignite.events.DiscoveryEvent)1