コード例 #1
0
        public StatementAIResourceRegistry AllocateAgentInstanceResourceRegistry(
            AIRegistryRequirements registryRequirements)
        {
            if (ContextDefinition.ControllerFactories.Length == 1) {
                return ContextDefinition.ControllerFactories[0]
                    .AllocateAgentInstanceResourceRegistry(registryRequirements);
            }

            return AIRegistryUtil.AllocateRegistries(registryRequirements, AIRegistryFactoryMap.INSTANCE);
        }
コード例 #2
0
#pragma warning restore 649

        public SelectOp(
            SelectFactory factory,
            AgentInstanceContext agentInstanceContext)
        {
            this.factory = factory;
            this.agentInstanceContext = agentInstanceContext;

            startResult = (StatementAgentInstanceFactorySelectResult) factory.FactorySelect.NewContext(agentInstanceContext, false);
            startResult.FinalView.Child = this;
            AIRegistryUtil.AssignFutures(
                factory.ResourceRegistry, agentInstanceContext.AgentInstanceId, startResult.OptionalAggegationService, startResult.PriorStrategies,
                startResult.PreviousGetterStrategies, startResult.SubselectStrategies, startResult.TableAccessStrategies,
                startResult.RowRecogPreviousStrategy);
        }
コード例 #3
0
 private void AssignAIResourcesForExpressionContextPartitions(
     int agentInstanceId,
     StatementResourceHolder holder)
 {
     AIRegistryUtil.AssignFutures(
         statementAgentInstanceRegistry,
         agentInstanceId,
         holder.AggregationService,
         holder.PriorEvalStrategies,
         holder.PreviousGetterStrategies,
         holder.SubselectStrategies,
         holder.TableAccessStrategies,
         holder.RowRecogPreviousStrategy);
 }
コード例 #4
0
        public void InitializeFactory(DataFlowOpFactoryInitializeContext context)
        {
            var ha = context.StatementContext.ViewFactoryService != ViewFactoryServiceImpl.INSTANCE;
            if (ha) {
                throw new EPException("The select-operator is not supported in the HA environment");
            }

            AdapterFactories = new EventBeanAdapterFactory[EventTypes.Length];
            for (var i = 0; i < EventTypes.Length; i++) {
                if (EventTypes[i] != null) {
                    AdapterFactories[i] = EventTypeUtility.GetAdapterFactoryForType(
                        EventTypes[i], context.StatementContext.EventBeanTypedEventFactory,
                        context.StatementContext.EventTypeAvroHandler);
                }
            }

            FactorySelect = (StatementAgentInstanceFactorySelect) FactoryProvider.Factory;
            var registryRequirements = FactorySelect.RegistryRequirements;
            ResourceRegistry = AIRegistryUtil.AllocateRegistries(registryRequirements, AIRegistryFactoryMap.INSTANCE);
            FactoryProvider.Assign(new StatementAIFactoryAssignmentContext(ResourceRegistry));
        }
コード例 #5
0
 public override StatementAIResourceRegistry AllocateAgentInstanceResourceRegistry(
     AIRegistryRequirements registryRequirements)
 {
     return AIRegistryUtil.AllocateRegistries(registryRequirements, AIRegistryFactoryMultiPerm.INSTANCE);
 }
コード例 #6
0
        public static StatementAgentInstanceFactoryResult Start(
            StatementContextRuntimeServices services,
            ContextControllerStatementDesc statement,
            int agentInstanceId,
            MappedEventBean contextProperties,
            AgentInstanceFilterProxy agentInstanceFilterProxy,
            bool isRecoveringResilient)
        {
            var statementContext = statement.Lightweight.StatementContext;

            // create handle that comtains lock for use in scheduling and filter callbacks
            var @lock =
                statementContext.StatementAIFactoryProvider.Factory.ObtainAgentInstanceLock(
                    statementContext,
                    agentInstanceId);
            var agentInstanceHandle =
                new EPStatementAgentInstanceHandle(statementContext.EpStatementHandle, agentInstanceId, @lock);

            var auditProvider = statementContext.StatementInformationals.AuditProvider;
            var instrumentationProvider =
                statementContext.StatementInformationals.InstrumentationProvider;
            var agentInstanceContext = new AgentInstanceContext(
                statementContext,
                agentInstanceHandle,
                agentInstanceFilterProxy,
                contextProperties,
                auditProvider,
                instrumentationProvider);
            if (agentInstanceId != -1) {
                agentInstanceContext.AuditProvider.ContextPartition(true, agentInstanceContext);
            }

            var statementAgentInstanceLock =
                agentInstanceContext.EpStatementAgentInstanceHandle.StatementAgentInstanceLock;

            agentInstanceContext.InstrumentationProvider.QContextPartitionAllocate(agentInstanceContext);

            using (statementAgentInstanceLock.AcquireWriteLock()) {
                try {
                    // start
                    var startResult =
                        statement.Lightweight.StatementProvider.StatementAIFactoryProvider.Factory.NewContext(
                            agentInstanceContext,
                            isRecoveringResilient);

                    // hook up with listeners+subscribers
                    startResult.FinalView.Child = statement.ContextMergeView; // hook output to merge view

                    // assign agents for expression-node based strategies
                    var aiResourceRegistry = statementContext.StatementAIResourceRegistry;
                    AIRegistryUtil.AssignFutures(
                        aiResourceRegistry,
                        agentInstanceId,
                        startResult.OptionalAggegationService,
                        startResult.PriorStrategies,
                        startResult.PreviousGetterStrategies,
                        startResult.SubselectStrategies,
                        startResult.TableAccessStrategies,
                        startResult.RowRecogPreviousStrategy);

                    // execute preloads, if any
                    if (startResult.PreloadList != null) {
                        foreach (var preload in startResult.PreloadList) {
                            preload.ExecutePreload();
                        }
                    }
                    
                    // handle any pattern-match-event that was produced during startup, relevant for "timer:interval(0)" in conjunction with contexts
                    startResult.PostContextMergeRunnable?.Invoke();

                    var holder =
                        services.StatementResourceHolderBuilder.Build(agentInstanceContext, startResult);
                    statementContext.StatementCPCacheService.StatementResourceService.SetPartitioned(
                        agentInstanceId,
                        holder);

                    // instantiated
                    return startResult;
                }
                finally {
                    if (agentInstanceContext.StatementContext.EpStatementHandle.HasTableAccess) {
                        agentInstanceContext.TableExprEvaluatorContext.ReleaseAcquiredLocks();
                    }

                    agentInstanceContext.InstrumentationProvider.AContextPartitionAllocate();
                }
            }
        }