use of org.ballerinalang.siddhi.core.query.processor.Processor in project ballerina by ballerina-lang.
the class JoinInputStreamParser method insertJoinProcessorsAndGetFindable.
private static FindableProcessor insertJoinProcessorsAndGetFindable(JoinProcessor preJoinProcessor, JoinProcessor postJoinProcessor, SingleStreamRuntime streamRuntime, SiddhiAppContext siddhiAppContext, boolean outputExpectsExpiredEvents, String queryName, InputStream inputStream) {
Processor lastProcessor = streamRuntime.getProcessorChain();
Processor prevLastProcessor = null;
if (lastProcessor != null) {
while (lastProcessor.getNextProcessor() != null) {
prevLastProcessor = lastProcessor;
lastProcessor = lastProcessor.getNextProcessor();
}
}
if (lastProcessor == null) {
try {
WindowProcessor windowProcessor = new LengthWindowProcessor();
ExpressionExecutor[] expressionExecutors = new ExpressionExecutor[1];
expressionExecutors[0] = new ConstantExpressionExecutor(0, Attribute.Type.INT);
ConfigReader configReader = siddhiAppContext.getSiddhiContext().getConfigManager().generateConfigReader("", "length");
windowProcessor.initProcessor(((MetaStreamEvent) streamRuntime.getMetaComplexEvent()).getLastInputDefinition(), expressionExecutors, configReader, siddhiAppContext, outputExpectsExpiredEvents, queryName, inputStream);
lastProcessor = windowProcessor;
} catch (Throwable t) {
throw new SiddhiAppCreationException(t);
}
}
if (lastProcessor instanceof FindableProcessor) {
if (prevLastProcessor != null) {
prevLastProcessor.setNextProcessor(preJoinProcessor);
} else {
streamRuntime.setProcessorChain(preJoinProcessor);
}
preJoinProcessor.setNextProcessor(lastProcessor);
lastProcessor.setNextProcessor(postJoinProcessor);
return (FindableProcessor) lastProcessor;
} else {
throw new OperationNotSupportedException("Stream " + ((MetaStreamEvent) streamRuntime.getMetaComplexEvent()).getLastInputDefinition().getId() + "'s last processor " + lastProcessor.getClass().getCanonicalName() + " is not an instance of " + FindableProcessor.class.getCanonicalName() + " hence join cannot be proceed");
}
}
use of org.ballerinalang.siddhi.core.query.processor.Processor in project ballerina by ballerina-lang.
the class QueryParserHelper method initSingleStreamRuntime.
private static void initSingleStreamRuntime(SingleStreamRuntime singleStreamRuntime, int streamEventChainIndex, MetaComplexEvent metaComplexEvent, StateEventPool stateEventPool, LockWrapper lockWrapper, String queryName) {
MetaStreamEvent metaStreamEvent;
if (metaComplexEvent instanceof MetaStateEvent) {
metaStreamEvent = ((MetaStateEvent) metaComplexEvent).getMetaStreamEvent(streamEventChainIndex);
} else {
metaStreamEvent = (MetaStreamEvent) metaComplexEvent;
}
StreamEventPool streamEventPool = new StreamEventPool(metaStreamEvent, 5);
ProcessStreamReceiver processStreamReceiver = singleStreamRuntime.getProcessStreamReceiver();
processStreamReceiver.setMetaStreamEvent(metaStreamEvent);
processStreamReceiver.setStreamEventPool(streamEventPool);
processStreamReceiver.setLockWrapper(lockWrapper);
processStreamReceiver.init();
Processor processor = singleStreamRuntime.getProcessorChain();
while (processor != null) {
if (processor instanceof SchedulingProcessor) {
((SchedulingProcessor) processor).getScheduler().setStreamEventPool(streamEventPool);
((SchedulingProcessor) processor).getScheduler().init(lockWrapper, queryName);
}
if (processor instanceof AbstractStreamProcessor) {
((AbstractStreamProcessor) processor).setStreamEventCloner(new StreamEventCloner(metaStreamEvent, streamEventPool));
((AbstractStreamProcessor) processor).constructStreamEventPopulater(metaStreamEvent, streamEventChainIndex);
}
if (stateEventPool != null && processor instanceof JoinProcessor) {
if (((JoinProcessor) processor).getCompiledCondition() instanceof IncrementalAggregateCompileCondition) {
IncrementalAggregateCompileCondition compiledCondition = (IncrementalAggregateCompileCondition) ((JoinProcessor) processor).getCompiledCondition();
ComplexEventPopulater complexEventPopulater = StreamEventPopulaterFactory.constructEventPopulator(metaStreamEvent, 0, compiledCondition.getAdditionalAttributes());
compiledCondition.setComplexEventPopulater(complexEventPopulater);
}
((JoinProcessor) processor).setStateEventPool(stateEventPool);
((JoinProcessor) processor).setJoinLock(lockWrapper);
}
if (stateEventPool != null && processor instanceof StreamPreStateProcessor) {
((StreamPreStateProcessor) processor).setStateEventPool(stateEventPool);
((StreamPreStateProcessor) processor).setStreamEventPool(streamEventPool);
((StreamPreStateProcessor) processor).setStreamEventCloner(new StreamEventCloner(metaStreamEvent, streamEventPool));
if (metaComplexEvent instanceof MetaStateEvent) {
((StreamPreStateProcessor) processor).setStateEventCloner(new StateEventCloner(((MetaStateEvent) metaComplexEvent), stateEventPool));
}
}
processor = processor.getNextProcessor();
}
}
use of org.ballerinalang.siddhi.core.query.processor.Processor in project ballerina by ballerina-lang.
the class JoinStreamRuntime method clone.
@Override
public StreamRuntime clone(String key) {
JoinStreamRuntime joinStreamRuntime = new JoinStreamRuntime(siddhiAppContext, metaStateEvent);
for (SingleStreamRuntime singleStreamRuntime : singleStreamRuntimeList) {
joinStreamRuntime.addRuntime((SingleStreamRuntime) singleStreamRuntime.clone(key));
}
SingleStreamRuntime leftSingleStreamRuntime = joinStreamRuntime.getSingleStreamRuntimes().get(0);
SingleStreamRuntime rightSingleStreamRuntime = joinStreamRuntime.getSingleStreamRuntimes().get(1);
Processor lastLeftProcessor = leftSingleStreamRuntime.getProcessorChain();
while (!(lastLeftProcessor instanceof JoinProcessor)) {
lastLeftProcessor = lastLeftProcessor.getNextProcessor();
}
JoinProcessor leftPreJoinProcessor = (JoinProcessor) lastLeftProcessor;
WindowProcessor leftWindowProcessor = (WindowProcessor) leftPreJoinProcessor.getNextProcessor();
JoinProcessor leftPostJoinProcessor = (JoinProcessor) leftWindowProcessor.getNextProcessor();
Processor lastRightProcessor = rightSingleStreamRuntime.getProcessorChain();
while (!(lastRightProcessor instanceof JoinProcessor)) {
lastRightProcessor = lastRightProcessor.getNextProcessor();
}
JoinProcessor rightPreJoinProcessor = (JoinProcessor) lastRightProcessor;
WindowProcessor rightWindowProcessor = (WindowProcessor) rightPreJoinProcessor.getNextProcessor();
JoinProcessor rightPostJoinProcessor = (JoinProcessor) rightWindowProcessor.getNextProcessor();
rightPostJoinProcessor.setFindableProcessor((FindableProcessor) leftWindowProcessor);
rightPreJoinProcessor.setFindableProcessor((FindableProcessor) leftWindowProcessor);
leftPreJoinProcessor.setFindableProcessor((FindableProcessor) rightWindowProcessor);
leftPostJoinProcessor.setFindableProcessor((FindableProcessor) rightWindowProcessor);
return joinStreamRuntime;
}
use of org.ballerinalang.siddhi.core.query.processor.Processor in project ballerina by ballerina-lang.
the class SingleStreamRuntime method clone.
@Override
public StreamRuntime clone(String key) {
ProcessStreamReceiver clonedProcessStreamReceiver = this.processStreamReceiver.clone(key);
EntryValveProcessor entryValveProcessor = null;
SchedulingProcessor schedulingProcessor;
Processor clonedProcessorChain = null;
if (processorChain != null) {
if (!(processorChain instanceof QuerySelector || processorChain instanceof OutputRateLimiter)) {
clonedProcessorChain = processorChain.cloneProcessor(key);
if (clonedProcessorChain instanceof EntryValveProcessor) {
entryValveProcessor = (EntryValveProcessor) clonedProcessorChain;
}
}
Processor processor = processorChain.getNextProcessor();
while (processor != null) {
if (!(processor instanceof QuerySelector || processor instanceof OutputRateLimiter)) {
Processor clonedProcessor = processor.cloneProcessor(key);
clonedProcessorChain.setToLast(clonedProcessor);
if (clonedProcessor instanceof EntryValveProcessor) {
entryValveProcessor = (EntryValveProcessor) clonedProcessor;
} else if (clonedProcessor instanceof SchedulingProcessor) {
schedulingProcessor = (SchedulingProcessor) clonedProcessor;
schedulingProcessor.setScheduler(((SchedulingProcessor) processor).getScheduler().clone(key, entryValveProcessor));
}
}
processor = processor.getNextProcessor();
}
}
return new SingleStreamRuntime(clonedProcessStreamReceiver, clonedProcessorChain, metaComplexEvent);
}
use of org.ballerinalang.siddhi.core.query.processor.Processor in project ballerina by ballerina-lang.
the class StreamInnerStateRuntime method clone.
@Override
public InnerStateRuntime clone(String key) {
StreamInnerStateRuntime streamInnerStateRuntime = new StreamInnerStateRuntime(stateType);
for (SingleStreamRuntime singleStreamRuntime : singleStreamRuntimeList) {
streamInnerStateRuntime.singleStreamRuntimeList.add((SingleStreamRuntime) singleStreamRuntime.clone(key));
}
Processor processor = streamInnerStateRuntime.singleStreamRuntimeList.get(0).getProcessorChain();
streamInnerStateRuntime.firstProcessor = (StreamPreStateProcessor) processor;
while (processor != null) {
if (processor instanceof StreamPostStateProcessor) {
streamInnerStateRuntime.lastProcessor = (StreamPostStateProcessor) processor;
break;
} else {
processor = processor.getNextProcessor();
}
}
((StreamPostStateProcessor) streamInnerStateRuntime.lastProcessor).setThisStatePreProcessor((StreamPreStateProcessor) streamInnerStateRuntime.firstProcessor);
((StreamPreStateProcessor) streamInnerStateRuntime.firstProcessor).setThisStatePostProcessor((StreamPostStateProcessor) streamInnerStateRuntime.lastProcessor);
((StreamPreStateProcessor) streamInnerStateRuntime.firstProcessor).setThisLastProcessor((StreamPostStateProcessor) streamInnerStateRuntime.lastProcessor);
return streamInnerStateRuntime;
}
Aggregations