public static boolean equals(Event event1, Event event2, StreamDefinition streamDefinition) { if (event1 == event2) return true; List<Attribute> payloadDefinitions = streamDefinition.getPayloadData(); List<Attribute> correlationDefinitions = streamDefinition.getCorrelationData(); List<Attribute> metaDefinitions = streamDefinition.getMetaData(); try { if (!(event1.getStreamId().equals(event2.getStreamId()))) { return false; } if (!(event1.getTimeStamp() == event2.getTimeStamp())) { return false; } if (payloadDefinitions != null) { for (int i = 0; i < payloadDefinitions.size(); i++) { Attribute attribute = payloadDefinitions.get(i); if (!compare( event1.getPayloadData()[i], event2.getPayloadData()[i], attribute.getType())) { return false; } } } else { if (!(event1.getPayloadData() == event2.getPayloadData())) return false; } if (metaDefinitions != null) { for (int i = 0; i < metaDefinitions.size(); i++) { Attribute attribute = metaDefinitions.get(i); if (!compare(event1.getMetaData()[i], event2.getMetaData()[i], attribute.getType())) { return false; } } } else { if (!(event1.getMetaData() == event2.getMetaData())) return false; } if (correlationDefinitions != null) { for (int i = 0; i < correlationDefinitions.size(); i++) { Attribute attribute = correlationDefinitions.get(i); if (!compare( event1.getCorrelationData()[i], event2.getCorrelationData()[i], attribute.getType())) { return false; } } } else { if (!(event1.getCorrelationData() == event2.getCorrelationData())) return false; } } catch (IOException e) { log.error(e.getMessage(), e); return false; } return true; }
public static Event convertToWSO2Event( org.wso2.siddhi.core.event.Event event, StreamDefinition streamDefinition) { int metaSize; int correlationSize; int payloadSize; Object[] metaAttributes = null; Object[] correlationAttributes = null; Object[] payloadAttributes = null; long timeStamp = event.getTimestamp(); Object[] objArray = event.getData(); int attributeIndex = 0; if (streamDefinition.getMetaData() != null) { // If there is at least 1 meta data field metaSize = streamDefinition.getMetaData().size(); metaAttributes = new Object[metaSize]; for (int i = 0; i < metaSize; i++) { metaAttributes[i] = objArray[attributeIndex++]; } } if (streamDefinition.getCorrelationData() != null) { // If there is at least 1 correlation data field correlationSize = streamDefinition.getCorrelationData().size(); correlationAttributes = new Object[correlationSize]; for (int i = 0; i < correlationSize; i++) { correlationAttributes[i] = objArray[attributeIndex++]; } } if (streamDefinition.getPayloadData() != null) { // If there is at least 1 payload data field payloadSize = streamDefinition.getPayloadData().size(); payloadAttributes = new Object[payloadSize]; for (int i = 0; i < payloadSize; i++) { payloadAttributes[i] = objArray[attributeIndex++]; } } return new Event( streamDefinition.getStreamId(), timeStamp, metaAttributes, correlationAttributes, payloadAttributes); }
public void addExecutionPlanConfiguration( ExecutionPlanConfiguration executionPlanConfiguration, AxisConfiguration axisConfiguration) throws ExecutionPlanDependencyValidationException, ExecutionPlanConfigurationException, ServiceDependencyValidationException { int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(); Map<String, ExecutionPlan> tenantExecutionPlans = tenantSpecificExecutionPlans.get(tenantId); if (tenantExecutionPlans == null) { tenantExecutionPlans = new ConcurrentHashMap<String, ExecutionPlan>(); tenantSpecificExecutionPlans.put(tenantId, tenantExecutionPlans); } else if (tenantExecutionPlans.get(executionPlanConfiguration.getName()) != null) { // if an execution plan with the same name already exists, we are not going to override it // with this plan. throw new ExecutionPlanConfigurationException( "Execution plan with the same name already exists. Please remove it and retry."); } // This iteration exists only as a check. Actual usage of imported stream configs is further // down for (StreamConfiguration streamConfiguration : executionPlanConfiguration.getImportedStreams()) { try { StreamDefinition streamDefinition = EventProcessorValueHolder.getEventStreamService() .getStreamDefinition(streamConfiguration.getStreamId(), tenantId); if (streamDefinition == null) { throw new ExecutionPlanDependencyValidationException( streamConfiguration.getStreamId(), "Imported Stream " + streamConfiguration.getStreamId() + " does not exist"); } } catch (EventStreamConfigurationException e) { throw new ExecutionPlanConfigurationException( "Error in retrieving stream ID : " + streamConfiguration.getStreamId()); } } // This iteration exists only as a check. Actual usage of exported stream configs is further // down for (StreamConfiguration streamConfiguration : executionPlanConfiguration.getExportedStreams()) { try { StreamDefinition streamDefinition = EventProcessorValueHolder.getEventStreamService() .getStreamDefinition(streamConfiguration.getStreamId(), tenantId); if (streamDefinition == null) { throw new ExecutionPlanDependencyValidationException( streamConfiguration.getStreamId(), "Exported Stream " + streamConfiguration.getStreamId() + " does not exist"); } } catch (EventStreamConfigurationException e) { throw new ExecutionPlanConfigurationException( "Error in retrieving stream ID : " + streamConfiguration.getStreamId()); } } Map<String, InputHandler> inputHandlerMap = new ConcurrentHashMap<String, InputHandler>( executionPlanConfiguration.getImportedStreams().size()); SiddhiConfiguration siddhiConfig = getSiddhiConfigurationFor(executionPlanConfiguration, tenantId); SiddhiManager siddhiManager = getSiddhiManagerFor(executionPlanConfiguration, siddhiConfig, inputHandlerMap); for (StreamConfiguration importedStreamConfiguration : executionPlanConfiguration.getImportedStreams()) { org.wso2.siddhi.query.api.definition.StreamDefinition siddhiStreamDefinition = new org.wso2.siddhi.query.api.definition.StreamDefinition(); siddhiStreamDefinition.name(importedStreamConfiguration.getSiddhiStreamName()); StreamDefinition streamDefinition = null; try { streamDefinition = EventProcessorValueHolder.getEventStreamService() .getStreamDefinition(importedStreamConfiguration.getStreamId(), tenantId); populateAttributes( siddhiStreamDefinition, streamDefinition.getMetaData(), EventProcessorConstants.META + EventProcessorConstants.ATTRIBUTE_SEPARATOR); populateAttributes( siddhiStreamDefinition, streamDefinition.getCorrelationData(), EventProcessorConstants.CORRELATION + EventProcessorConstants.ATTRIBUTE_SEPARATOR); populateAttributes(siddhiStreamDefinition, streamDefinition.getPayloadData(), ""); InputHandler inputHandler = siddhiManager.defineStream(siddhiStreamDefinition); inputHandlerMap.put(streamDefinition.getStreamId(), inputHandler); log.debug("input handler created for " + siddhiStreamDefinition.getStreamId()); } catch (EventStreamConfigurationException e) { // ignored as this will not happen } } for (StreamConfiguration exportedStreamConfiguration : executionPlanConfiguration.getExportedStreams()) { org.wso2.siddhi.query.api.definition.StreamDefinition siddhiStreamDefinition = new org.wso2.siddhi.query.api.definition.StreamDefinition(); siddhiStreamDefinition.name(exportedStreamConfiguration.getSiddhiStreamName()); StreamDefinition streamDefinition = null; try { streamDefinition = EventProcessorValueHolder.getEventStreamService() .getStreamDefinition(exportedStreamConfiguration.getStreamId(), tenantId); populateAttributes( siddhiStreamDefinition, streamDefinition.getMetaData(), EventProcessorConstants.META + EventProcessorConstants.ATTRIBUTE_SEPARATOR); populateAttributes( siddhiStreamDefinition, streamDefinition.getCorrelationData(), EventProcessorConstants.CORRELATION + EventProcessorConstants.ATTRIBUTE_SEPARATOR); populateAttributes(siddhiStreamDefinition, streamDefinition.getPayloadData(), ""); siddhiManager.defineStream(siddhiStreamDefinition); log.debug("stream defined for " + siddhiStreamDefinition.getStreamId()); } catch (EventStreamConfigurationException e) { // ignored as this will not happen } } HAManager haManager = null; String isDistributedProcessingEnabledString = executionPlanConfiguration .getSiddhiConfigurationProperties() .get(EventProcessorConstants.SIDDHI_DISTRIBUTED_PROCESSING); if (isDistributedProcessingEnabledString != null && isDistributedProcessingEnabledString.equalsIgnoreCase("RedundantNode")) { haManager = new HAManager( EventProcessorValueHolder.getHazelcastInstance(), executionPlanConfiguration.getName(), tenantId, siddhiManager, inputHandlerMap.size(), currentCepMembershipInfo); } try { siddhiManager.addExecutionPlan(executionPlanConfiguration.getQueryExpressions()); } catch (Exception e) { throw new ExecutionPlanConfigurationException( "Invalid query specified, " + e.getMessage(), e); } ExecutionPlan executionPlan = new ExecutionPlan( executionPlanConfiguration.getName(), siddhiManager, executionPlanConfiguration, haManager); tenantExecutionPlans.put(executionPlanConfiguration.getName(), executionPlan); // subscribe output to junction SindhiStormOutputEventListener stormOutputListener = null; if (isRunningOnStorm) { stormOutputListener = new SindhiStormOutputEventListener(executionPlanConfiguration, tenantId); } for (StreamConfiguration exportedStreamConfiguration : executionPlanConfiguration.getExportedStreams()) { SiddhiOutputStreamListener streamCallback; if (haManager != null) { streamCallback = new SiddhiHAOutputStreamListener( exportedStreamConfiguration.getSiddhiStreamName(), exportedStreamConfiguration.getStreamId(), executionPlanConfiguration, tenantId); haManager.addStreamCallback((SiddhiHAOutputStreamListener) streamCallback); } else { streamCallback = new SiddhiOutputStreamListener( exportedStreamConfiguration.getSiddhiStreamName(), exportedStreamConfiguration.getStreamId(), executionPlanConfiguration, tenantId); if (isRunningOnStorm) { stormOutputListener.registerOutputStreamListener( exportedStreamConfiguration.getSiddhiStreamName(), streamCallback); } } siddhiManager.addCallback(exportedStreamConfiguration.getSiddhiStreamName(), streamCallback); try { EventProcessorValueHolder.getEventStreamService().subscribe(streamCallback, tenantId); } catch (EventStreamConfigurationException e) { // ignored as this will never happen } executionPlan.addProducer(streamCallback); } // subscribe input to junction for (StreamConfiguration importedStreamConfiguration : executionPlanConfiguration.getImportedStreams()) { InputHandler inputHandler = inputHandlerMap.get(importedStreamConfiguration.getStreamId()); AbstractSiddhiInputEventDispatcher eventDispatcher = null; if (haManager != null) { eventDispatcher = new SiddhiHAInputEventDispatcher( importedStreamConfiguration.getStreamId(), inputHandler, executionPlanConfiguration, tenantId, haManager.getProcessThreadPoolExecutor(), haManager.getThreadBarrier()); haManager.addInputEventDispatcher( importedStreamConfiguration.getStreamId(), (SiddhiHAInputEventDispatcher) eventDispatcher); } else if (isRunningOnStorm) { StreamDefinition streamDefinition = null; try { streamDefinition = EventProcessorValueHolder.getEventStreamService() .getStreamDefinition(importedStreamConfiguration.getStreamId(), tenantId); } catch (EventStreamConfigurationException e) { // Ignore as this would never happen } eventDispatcher = new SiddhiStormInputEventDispatcher( streamDefinition, importedStreamConfiguration.getSiddhiStreamName(), executionPlanConfiguration, tenantId); } else { eventDispatcher = new SiddhiInputEventDispatcher( importedStreamConfiguration.getStreamId(), inputHandler, executionPlanConfiguration, tenantId); } try { EventProcessorValueHolder.getEventStreamService().subscribe(eventDispatcher, tenantId); executionPlan.addConsumer(eventDispatcher); } catch (EventStreamConfigurationException e) { // ignored as this will never happen } } if (haManager != null) { haManager.init(); } }
private static boolean validateSiddhiStreamWithDatabridgeStream( String streamName, String streamVersion, org.wso2.siddhi.query.api.definition.StreamDefinition siddhiStreamDefinition) throws ExecutionPlanConfigurationException, ExecutionPlanDependencyValidationException { if (siddhiStreamDefinition == null) { throw new ExecutionPlanDependencyValidationException( streamName + EventProcessorConstants.STREAM_SEPARATOR + streamVersion, "Cannot validate null Siddhi stream for the stream: " + streamName + EventProcessorConstants.STREAM_SEPARATOR + streamVersion + " "); } EventStreamService eventStreamService = EventProcessorValueHolder.getEventStreamService(); try { StreamDefinition streamDefinition = eventStreamService.getStreamDefinition(streamName, streamVersion); if (streamDefinition != null) { String siddhiAttributeName; int attributeCount = 0; int streamSize = (streamDefinition.getMetaData() == null ? 0 : streamDefinition.getMetaData().size()) + (streamDefinition.getCorrelationData() == null ? 0 : streamDefinition.getCorrelationData().size()) + (streamDefinition.getPayloadData() == null ? 0 : streamDefinition.getPayloadData().size()); if (siddhiStreamDefinition.getAttributeList().size() != streamSize) { throw new ExecutionPlanDependencyValidationException( streamName + EventProcessorConstants.STREAM_SEPARATOR + streamVersion, "No of attributes in stream " + streamName + EventProcessorConstants.STREAM_SEPARATOR + streamVersion + " do not match the no of attributes in Siddhi stream"); } if (streamDefinition.getMetaData() != null) { for (Attribute attribute : streamDefinition.getMetaData()) { siddhiAttributeName = EventProcessorConstants.META_PREFIX + attribute.getName(); org.wso2.siddhi.query.api.definition.Attribute.Type type = siddhiStreamDefinition.getAttributeType(siddhiAttributeName); // null check for type not required since an exception is thrown by Siddhi // StreamDefinition.getAttributeType() method for non-existent attributes if (siddhiStreamDefinition.getAttributePosition(siddhiAttributeName) != attributeCount++) { throw new ExecutionPlanDependencyValidationException( streamName + EventProcessorConstants.STREAM_SEPARATOR + streamVersion, "Stream " + streamName + EventProcessorConstants.STREAM_SEPARATOR + streamVersion + "; Attribute positions do not match for attribute: " + attribute.getName()); } if (!isMatchingType(type, attribute.getType())) { throw new ExecutionPlanDependencyValidationException( streamName + EventProcessorConstants.STREAM_SEPARATOR + streamVersion, "Stream " + streamName + EventProcessorConstants.STREAM_SEPARATOR + streamVersion + "; Type mismatch for attribute: " + attribute.getName()); } } } if (streamDefinition.getCorrelationData() != null) { for (Attribute attribute : streamDefinition.getCorrelationData()) { siddhiAttributeName = EventProcessorConstants.CORRELATION_PREFIX + attribute.getName(); org.wso2.siddhi.query.api.definition.Attribute.Type type = siddhiStreamDefinition.getAttributeType(siddhiAttributeName); // null check for type not required since an exception is thrown by Siddhi // StreamDefinition.getAttributeType() method for non-existent attributes if (siddhiStreamDefinition.getAttributePosition(siddhiAttributeName) != attributeCount++) { throw new ExecutionPlanDependencyValidationException( streamName + EventProcessorConstants.STREAM_SEPARATOR + streamVersion, "Stream " + streamName + EventProcessorConstants.STREAM_SEPARATOR + streamVersion + "; Attribute positions do not match for attribute: " + attribute.getName()); } if (!isMatchingType(type, attribute.getType())) { throw new ExecutionPlanDependencyValidationException( streamName + EventProcessorConstants.STREAM_SEPARATOR + streamVersion, "Stream " + streamName + EventProcessorConstants.STREAM_SEPARATOR + streamVersion + "; Type mismatch for attribute: " + attribute.getName()); } } } if (streamDefinition.getPayloadData() != null) { for (Attribute attribute : streamDefinition.getPayloadData()) { siddhiAttributeName = attribute.getName(); org.wso2.siddhi.query.api.definition.Attribute.Type type = siddhiStreamDefinition.getAttributeType(siddhiAttributeName); // null check for type not required since an exception is thrown by Siddhi // StreamDefinition.getAttributeType() method for non-existent attributes if (siddhiStreamDefinition.getAttributePosition(siddhiAttributeName) != attributeCount++) { throw new ExecutionPlanDependencyValidationException( streamName + EventProcessorConstants.STREAM_SEPARATOR + streamVersion, "Stream " + streamName + EventProcessorConstants.STREAM_SEPARATOR + streamVersion + "; Attribute positions do not match for attribute: " + attribute.getName()); } if (!isMatchingType(type, attribute.getType())) { throw new ExecutionPlanDependencyValidationException( streamName + EventProcessorConstants.STREAM_SEPARATOR + streamVersion, "Stream " + streamName + EventProcessorConstants.STREAM_SEPARATOR + streamVersion + "; Type mismatch for attribute: " + attribute.getName()); } } } return true; } } catch (EventStreamConfigurationException e) { throw new ExecutionPlanConfigurationException( "Error while validating stream definition with store : " + e.getMessage(), e); } catch (AttributeNotExistException e) { throw new ExecutionPlanDependencyValidationException( streamName + EventProcessorConstants.STREAM_SEPARATOR + streamVersion, e.getMessage()); } throw new ExecutionPlanDependencyValidationException( streamName + EventProcessorConstants.STREAM_SEPARATOR + streamVersion, "Stream " + streamName + EventProcessorConstants.STREAM_SEPARATOR + streamVersion + " does not exist"); }