blob: 7610437e7370e2563ab1ac01cadb4bba468e7897 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.ignite.compute;
import java.util.List;
import java.util.Map;
import org.apache.ignite.lang.IgniteUuid;
import org.jetbrains.annotations.Nullable;
/**
* Context attached to every job executed on the grid. Note that unlike
* {@link ComputeTaskSession}, which distributes all attributes to all jobs
* in the task including the task itself, job context attributes belong
* to a job and do not get sent over network unless a job moves from one
* node to another.
* <p>
* In most cases a job, once assigned to a node, will never move to another
* node. However, it is possible that collision SPI rejects a job before
* it ever got a chance to execute (job rejection) which will cause fail-over
* to another node. Or user is not satisfied with the outcome of a job and
* fails it over to another node by returning {@link ComputeJobResultPolicy#FAILOVER}
* policy from {@link ComputeTask#result(ComputeJobResult, List)} method. In this case
* all context attributes set on one node will be available on any other node
* this job travels to.
* <p>
* You can also use {@code ComputeJobContext} to communicate between SPI's and jobs.
* For example, if you need to cancel an actively running job from {@link org.apache.ignite.spi.collision.CollisionSpi}
* you may choose to set some context attribute on the job to mark the fact
* that a job was cancelled by grid and not by a user. Context attributes can
* also be assigned in {@link org.apache.ignite.spi.failover.FailoverSpi} prior to failing over a job.
* <p>
* From within {@link ComputeTask#result(ComputeJobResult, List)} or {@link ComputeTask#reduce(List)} methods,
* job context is available via {@link ComputeJobResult#getJobContext()} method which gives user the
* ability to check context attributes from within grid task implementation for every job
* returned from remote nodes.
* <p>
* Job context can be injected into {@link ComputeJob} via {@link org.apache.ignite.resources.JobContextResource}
* annotation. Refer to the {@link org.apache.ignite.resources.JobContextResource}
* documentation for coding examples on how to inject job context.
* <p>
* Attribute names that start with {@code "apache.ignite:"} are reserved for internal system use.
*/
public interface ComputeJobContext extends ComputeJobContinuation {
/**
* Gets ID of the job this context belongs to.
*
* @return ID of the job this context belongs to.
*/
public IgniteUuid getJobId();
/**
* Sets an attribute into this job context.
*
* @param key Attribute key.
* @param val Attribute value.
*/
public void setAttribute(Object key, @Nullable Object val);
/**
* Sets map of attributes into this job context.
*
* @param attrs Local attributes.
*/
public void setAttributes(Map<?, ?> attrs);
/**
* Gets attribute from this job context.
*
* @param key Attribute key.
* @param <K> Type of the attribute key.
* @param <V> Type of the attribute value.
* @return Attribute value (possibly {@code null}).
*/
public <K, V> V getAttribute(K key);
/**
* Gets all attributes present in this job context.
*
* @return All attributes.
*/
public Map<?, ?> getAttributes();
}