private void AssignAIResourcesForExpressionContextPartitions( int agentInstanceId, StatementResourceHolder holder) { AIRegistryUtil.AssignFutures( statementAgentInstanceRegistry, agentInstanceId, holder.AggregationService, holder.PriorEvalStrategies, holder.PreviousGetterStrategies, holder.SubselectStrategies, holder.TableAccessStrategies, holder.RowRecogPreviousStrategy); }
#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); }
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(); } } }