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));
        }
Example #2
0
        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;
        }
Example #3
0
 public abstract NamedWindowConsumerView AddConsumerNoContext(NamedWindowConsumerDesc consumerDesc);
Example #4
0
        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;
        }