/*******************************************************************************
* Copyright (c) 2013 Imperial College London.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Raul Castro Fernandez - initial design and implementation
* Martin Rouaux - Removal of upstream and downstream connections
* which is required to support scale-in of operators.
******************************************************************************/
package uk.ac.imperial.lsds.seep.processingunit;
import java.net.InetAddress;
import java.util.ArrayList;
import java.util.Map;
import uk.ac.imperial.lsds.seep.comm.serialization.DataTuple;
import uk.ac.imperial.lsds.seep.operator.Operator;
import uk.ac.imperial.lsds.seep.operator.OperatorStaticInformation;
import uk.ac.imperial.lsds.seep.runtimeengine.CoreRE;
import uk.ac.imperial.lsds.seep.runtimeengine.DataStructureAdapter;
import uk.ac.imperial.lsds.seep.runtimeengine.OutputQueue;
import uk.ac.imperial.lsds.seep.runtimeengine.TimestampTracker;
public interface IProcessingUnit {
//This enum is for aiding in the implementation of the protocols
public enum SystemStatus {
NORMAL, WAITING_FOR_STATE_ACK, INITIALISING_STATE//, REPLAYING_BUFFER//, RECONFIGURING_COMM
, MERGING_STATE
}
public CoreRE getOwner();
public Operator getOperator();
public boolean isNodeStateful();
public SystemStatus getSystemStatus();
public void setSystemStatus(SystemStatus systemStatus);
public void newOperatorInstantiation(Operator o);
public boolean isOperatorReady();
public void setOpReady(int opId);
public void setOutputQueue(OutputQueue outputQueue);
public PUContext setUpRemoteConnections();
public void startDataProcessing();
public void initOperator();
public Map<String, Integer> createTupleAttributeMapper();
public void processData(DataTuple data);
public void processData(ArrayList<DataTuple> data);
public void sendData(DataTuple dt, ArrayList<Integer> targets);
public void sendPartitionedData(DataTuple[] dt, ArrayList<Integer> targets);
public void sendDataByThreadPool(DataTuple dt, ArrayList<Integer> targets);
public void stopConnection(int opId);
public void reconfigureOperatorLocation(int opId, InetAddress ip);
public void reconfigureOperatorConnection(int opId, InetAddress ip);
public void invalidateState(int opId);
public void registerManagedState(int opId);
public boolean isManagingStateOf(int opId);
public void addDownstream(int opId, OperatorStaticInformation location);
public void removeDownstream(int opId);
public void addUpstream(int opId, OperatorStaticInformation location);
public void removeUpstream(int opId);
public void launchMultiCoreMechanism(CoreRE core, DataStructureAdapter dsa);
public void disableMultiCoreSupport();
public boolean isMultiCoreEnabled();
public void createAndRunAckWorker();
public TimestampTracker getLastACK();
public void emitACK(TimestampTracker currentTs);
public ArrayList<Integer> getRouterIndexesInformation(int opId);
public ArrayList<Integer> getRouterKeysInformation(int opId);
public int getOriginalUpstreamFromOpId(int opId);
public int getOpIdFromUpstreamIp(InetAddress ip);
}