public ViewableActivationResult Activate( AgentInstanceContext agentInstanceContext, bool isSubselect, bool isRecoveringResilient) { var consumerDesc = new NamedWindowConsumerDesc( _filterExpressions, _optPropertyEvaluator, agentInstanceContext); var consumerView = _processor.AddConsumer(consumerDesc, isSubselect); return(new ViewableActivationResult(consumerView, consumerView.Stop, null, null, null, false, false, null)); }
public override NamedWindowConsumerView AddConsumerNoContext(NamedWindowConsumerDesc consumerDesc) { NamedWindowConsumerCallback consumerCallback = new ProxyNamedWindowConsumerCallback() { ProcGetEnumerator = () => throw new UnsupportedOperationException( "Iterator not supported on named windows that have a context attached and when that context is not the same as the consuming statement's context"), ProcIsParentBatchWindow = () => isParentBatchWindow, ProcSnapshot = ( queryGraph, annotations) => Collections.GetEmptyList<EventBean>(), ProcStopped = RemoveConsumerNoContext, }; // Construct consumer view, allow a callback to this view to remove the consumer bool audit = AuditEnum.STREAM.GetAudit(consumerDesc.AgentInstanceContext.StatementContext.Annotations) != null; NamedWindowConsumerView consumerView = new NamedWindowConsumerView( consumerDesc.NamedWindowConsumerId, consumerDesc.FilterEvaluator, consumerDesc.OptPropertyEvaluator, eventType, consumerCallback, consumerDesc.AgentInstanceContext, audit); // Keep a list of consumer views per statement to accomodate joins and subqueries IList<NamedWindowConsumerView> viewsPerStatements = consumersNonContext.Get(consumerDesc.AgentInstanceContext.EpStatementAgentInstanceHandle); if (viewsPerStatements == null) { viewsPerStatements = new CopyOnWriteList<NamedWindowConsumerView>(); // avoid concurrent modification as a thread may currently iterate over consumers as its dispatching // without the runtime lock IDictionary<EPStatementAgentInstanceHandle, IList<NamedWindowConsumerView>> newConsumers = NamedWindowUtil.CreateConsumerMap(isPrioritized); newConsumers.PutAll(consumersNonContext); newConsumers.Put(consumerDesc.AgentInstanceContext.EpStatementAgentInstanceHandle, viewsPerStatements); consumersNonContext = newConsumers; } viewsPerStatements.Add(consumerView); return consumerView; }
public abstract NamedWindowConsumerView AddConsumerNoContext(NamedWindowConsumerDesc consumerDesc);
public NamedWindowConsumerView AddConsumer( NamedWindowConsumerDesc consumerDesc, bool isSubselect) { NamedWindowConsumerCallback consumerCallback = new ProxyNamedWindowConsumerCallback { ProcGetEnumerator = () => { var instance = _namedWindow.GetNamedWindowInstance(AgentInstanceContext); if (instance == null) { // this can happen on context-partition "output when terminated" return GetEnumerator(); } return instance.TailViewInstance.GetEnumerator(); }, ProcStopped = namedWindowConsumerView => RemoveConsumer(namedWindowConsumerView), ProcIsParentBatchWindow = () => _rootViewInstance.IsParentBatchWindow, ProcSnapshot = ( queryGraph, annotations) => Snapshot(queryGraph, annotations) }; // Construct consumer view, allow a callback to this view to remove the consumer var audit = AuditEnum.STREAM.GetAudit(consumerDesc.AgentInstanceContext.StatementContext.Annotations) != null; var consumerView = new NamedWindowConsumerView( consumerDesc.NamedWindowConsumerId, consumerDesc.FilterEvaluator, consumerDesc.OptPropertyEvaluator, TailView.EventType, consumerCallback, consumerDesc.AgentInstanceContext, audit); // indicate to virtual data window that a consumer was added var virtualDWView = _rootViewInstance.VirtualDataWindow; virtualDWView?.VirtualDataWindow.HandleEvent( new VirtualDataWindowEventConsumerAdd( TailView.EventType.Name, consumerView, consumerDesc.AgentInstanceContext.StatementName, consumerDesc.AgentInstanceContext.AgentInstanceId, consumerDesc.FilterEvaluator, AgentInstanceContext)); // Keep a list of consumer views per statement to accommodate joins and subqueries var viewsPerStatements = _consumersInContext.Get(consumerDesc.AgentInstanceContext.EpStatementAgentInstanceHandle); if (viewsPerStatements == null) { viewsPerStatements = new CopyOnWriteList<NamedWindowConsumerView>(); // avoid concurrent modification as a thread may currently iterate over consumers as its dispatching // without the runtime lock var newConsumers = NamedWindowUtil.CreateConsumerMap(TailView.IsPrioritized); newConsumers.PutAll(_consumersInContext); newConsumers.Put(consumerDesc.AgentInstanceContext.EpStatementAgentInstanceHandle, viewsPerStatements); _consumersInContext = newConsumers; } if (isSubselect) { viewsPerStatements.Insert(0, consumerView); } else { viewsPerStatements.Add(consumerView); } return consumerView; }