/* * 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(); }