use of org.wso2.siddhi.core.partition.executor.PartitionExecutor in project siddhi by wso2.
the class PartitionStreamReceiver method receive.
@Override
public void receive(long timestamp, Object[] data) {
StreamEvent borrowedEvent = eventPool.borrowEvent();
streamEventConverter.convertData(timestamp, data, borrowedEvent);
if (partitionExecutors.size() == 0) {
send(borrowedEvent);
} else {
for (PartitionExecutor partitionExecutor : partitionExecutors) {
String key = partitionExecutor.execute(borrowedEvent);
send(key, borrowedEvent);
}
}
eventPool.returnEvents(borrowedEvent);
}
use of org.wso2.siddhi.core.partition.executor.PartitionExecutor in project siddhi by wso2.
the class PartitionStreamReceiver method receive.
@Override
public void receive(ComplexEvent complexEvent) {
if (partitionExecutors.size() == 0) {
StreamEvent borrowedEvent = eventPool.borrowEvent();
streamEventConverter.convertComplexEvent(complexEvent, borrowedEvent);
send(borrowedEvent);
} else {
if (complexEvent.getNext() == null) {
for (PartitionExecutor partitionExecutor : partitionExecutors) {
StreamEvent borrowedEvent = eventPool.borrowEvent();
streamEventConverter.convertComplexEvent(complexEvent, borrowedEvent);
String key = partitionExecutor.execute(borrowedEvent);
send(key, borrowedEvent);
}
} else {
ComplexEventChunk<ComplexEvent> complexEventChunk = new ComplexEventChunk<ComplexEvent>(false);
complexEventChunk.add(complexEvent);
String currentKey = null;
while (complexEventChunk.hasNext()) {
ComplexEvent aEvent = complexEventChunk.next();
complexEventChunk.remove();
StreamEvent borrowedEvent = eventPool.borrowEvent();
streamEventConverter.convertComplexEvent(aEvent, borrowedEvent);
boolean currentEventMatchedPrevPartitionExecutor = false;
for (PartitionExecutor partitionExecutor : partitionExecutors) {
String key = partitionExecutor.execute(borrowedEvent);
if (key != null) {
if (currentKey == null) {
currentKey = key;
} else if (!currentKey.equals(key)) {
if (!currentEventMatchedPrevPartitionExecutor) {
ComplexEvent firstEvent = streamEventChunk.getFirst();
send(currentKey, firstEvent);
currentKey = key;
streamEventChunk.clear();
} else {
ComplexEvent firstEvent = streamEventChunk.getFirst();
send(currentKey, firstEvent);
currentKey = key;
streamEventChunk.clear();
StreamEvent cloneEvent = eventPool.borrowEvent();
streamEventConverter.convertComplexEvent(aEvent, cloneEvent);
streamEventChunk.add(cloneEvent);
}
}
if (!currentEventMatchedPrevPartitionExecutor) {
streamEventChunk.add(borrowedEvent);
}
currentEventMatchedPrevPartitionExecutor = true;
}
}
}
send(currentKey, streamEventChunk.getFirst());
streamEventChunk.clear();
}
}
}
use of org.wso2.siddhi.core.partition.executor.PartitionExecutor in project siddhi by wso2.
the class PartitionStreamReceiver method receive.
@Override
public void receive(Event event) {
StreamEvent borrowedEvent = eventPool.borrowEvent();
streamEventConverter.convertEvent(event, borrowedEvent);
for (PartitionExecutor partitionExecutor : partitionExecutors) {
String key = partitionExecutor.execute(borrowedEvent);
send(key, borrowedEvent);
}
if (partitionExecutors.size() == 0) {
send(borrowedEvent);
}
eventPool.returnEvents(borrowedEvent);
}
use of org.wso2.siddhi.core.partition.executor.PartitionExecutor in project siddhi by wso2.
the class StreamPartitioner method createSingleInputStreamExecutors.
private void createSingleInputStreamExecutors(SingleInputStream inputStream, Partition partition, MetaStreamEvent metaEvent, List<VariableExpressionExecutor> executors, Map<String, Table> tableMap, SiddhiAppContext siddhiAppContext, String queryName) {
List<PartitionExecutor> executorList = new ArrayList<PartitionExecutor>();
partitionExecutorLists.add(executorList);
if (!inputStream.isInnerStream()) {
for (PartitionType partitionType : partition.getPartitionTypeMap().values()) {
if (partitionType instanceof ValuePartitionType) {
if (partitionType.getStreamId().equals(inputStream.getStreamId())) {
executorList.add(new ValuePartitionExecutor(ExpressionParser.parseExpression(((ValuePartitionType) partitionType).getExpression(), metaEvent, SiddhiConstants.UNKNOWN_STATE, tableMap, executors, siddhiAppContext, false, 0, queryName)));
}
} else {
for (RangePartitionType.RangePartitionProperty rangePartitionProperty : ((RangePartitionType) partitionType).getRangePartitionProperties()) {
if (partitionType.getStreamId().equals(inputStream.getStreamId())) {
executorList.add(new RangePartitionExecutor((ConditionExpressionExecutor) ExpressionParser.parseExpression(rangePartitionProperty.getCondition(), metaEvent, SiddhiConstants.UNKNOWN_STATE, tableMap, executors, siddhiAppContext, false, 0, queryName), rangePartitionProperty.getPartitionKey()));
}
}
}
}
}
}
use of org.wso2.siddhi.core.partition.executor.PartitionExecutor in project siddhi by wso2.
the class PartitionRuntime method addPartitionReceiver.
public void addPartitionReceiver(QueryRuntime queryRuntime, List<VariableExpressionExecutor> executors, MetaStateEvent metaEvent) {
Query query = queryRuntime.getQuery();
List<List<PartitionExecutor>> partitionExecutors = new StreamPartitioner(query.getInputStream(), partition, metaEvent, executors, siddhiAppContext, null).getPartitionExecutorLists();
if (queryRuntime.getStreamRuntime() instanceof SingleStreamRuntime) {
SingleInputStream singleInputStream = (SingleInputStream) query.getInputStream();
addPartitionReceiver(singleInputStream.getStreamId(), singleInputStream.isInnerStream(), metaEvent.getMetaStreamEvent(0), partitionExecutors.get(0));
} else if (queryRuntime.getStreamRuntime() instanceof JoinStreamRuntime) {
SingleInputStream leftSingleInputStream = (SingleInputStream) ((JoinInputStream) query.getInputStream()).getLeftInputStream();
addPartitionReceiver(leftSingleInputStream.getStreamId(), leftSingleInputStream.isInnerStream(), metaEvent.getMetaStreamEvent(0), partitionExecutors.get(0));
SingleInputStream rightSingleInputStream = (SingleInputStream) ((JoinInputStream) query.getInputStream()).getRightInputStream();
addPartitionReceiver(rightSingleInputStream.getStreamId(), rightSingleInputStream.isInnerStream(), metaEvent.getMetaStreamEvent(1), partitionExecutors.get(1));
} else if (queryRuntime.getStreamRuntime() instanceof StateStreamRuntime) {
StateElement stateElement = ((StateInputStream) query.getInputStream()).getStateElement();
addPartitionReceiverForStateElement(stateElement, metaEvent, partitionExecutors, 0);
}
}
Aggregations