/* * 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.internal.processors.continuous; import java.io.Externalizable; import java.util.Collection; import java.util.Map; import java.util.UUID; import org.apache.ignite.IgniteCheckedException; import org.apache.ignite.internal.GridKernalContext; import org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion; import org.apache.ignite.internal.util.typedef.T2; import org.jetbrains.annotations.Nullable; /** * Continuous routine handler. */ @SuppressWarnings("PublicInnerClass") public interface GridContinuousHandler extends Externalizable, Cloneable { /** * Listener registration status. */ public enum RegisterStatus { /** */ REGISTERED, /** */ NOT_REGISTERED, /** */ DELAYED } /** * Registers listener. * * @param nodeId ID of the node that started routine. * @param routineId Routine ID. * @param ctx Kernal context. * @return Whether listener was actually registered. * @throws IgniteCheckedException In case of error. */ public RegisterStatus register(UUID nodeId, UUID routineId, GridKernalContext ctx) throws IgniteCheckedException; /** * Unregisters listener. * * @param routineId Routine ID. * @param ctx Kernal context. */ public void unregister(UUID routineId, GridKernalContext ctx); /** * Notifies local callback. * * @param nodeId ID of the node where notification came from. * @param routineId Routine ID. * @param objs Notification objects. * @param ctx Kernal context. */ public void notifyCallback(UUID nodeId, UUID routineId, Collection<?> objs, GridKernalContext ctx); /** * Deploys and marshals inner objects (called only if peer deployment is enabled). * * @param ctx Kernal context. * @throws IgniteCheckedException In case of error. */ public void p2pMarshal(GridKernalContext ctx) throws IgniteCheckedException; /** * Unmarshals inner objects (called only if peer deployment is enabled). * * @param nodeId Sender node ID. * @param ctx Kernal context. * @throws IgniteCheckedException In case of error. */ public void p2pUnmarshal(UUID nodeId, GridKernalContext ctx) throws IgniteCheckedException; /** * Creates new batch. * * @return New batch. */ public GridContinuousBatch createBatch(); /** * Client node disconnected callback. */ public void onClientDisconnected(); /** * Called when ack for a batch is received from client. * * @param routineId Routine ID. * @param batch Acknowledged batch. * @param ctx Kernal context. */ public void onBatchAcknowledged(UUID routineId, GridContinuousBatch batch, GridKernalContext ctx); /** * Node which started routine leave topology. */ public void onNodeLeft(); /** * @return Topic for ordered notifications. If {@code null}, notifications * will be sent in non-ordered messages. */ @Nullable public Object orderedTopic(); /** * Clones this handler. * * @return Clone of this handler. */ public GridContinuousHandler clone(); /** * @return {@code True} if for events. */ public boolean isEvents(); /** * @return {@code True} if for messaging. */ public boolean isMessaging(); /** * @return {@code True} if for continuous queries. */ public boolean isQuery(); /** * @return {@code True} if Ignite Binary objects should be passed to the listener and filter. */ public boolean keepBinary(); /** * @return Cache name if this is a continuous query handler. */ public String cacheName(); /** * @param cntrsPerNode Init state partition counters for node. * @param cntrs Init state for partition counters. * @param topVer Topology version. */ public void updateCounters(AffinityTopologyVersion topVer, Map<UUID, Map<Integer, T2<Long, Long>>> cntrsPerNode, Map<Integer, T2<Long, Long>> cntrs); }