public override void SetCurrentAccess(Object groupByKey, int agentInstanceId, AggregationGroupByRollupLevel rollupLevel) { AggregationMethodRowAged row = _aggregatorsPerGroup.Get(groupByKey); if (row != null) { _currentAggregatorMethods = row.Methods; _currentAggregatorStates = row.States; } else { _currentAggregatorMethods = null; } if (_currentAggregatorMethods == null) { _currentAggregatorMethods = _methodResolutionService.NewAggregators(Aggregators, agentInstanceId, groupByKey, GroupKeyBinding, null); _currentAggregatorStates = _methodResolutionService.NewAccesses(agentInstanceId, _isJoin, _accessAggregations, groupByKey, GroupKeyBinding, null); } _currentGroupKey = groupByKey; }
public override void ApplyEnter(EventBean[] eventsPerStream, Object groupByKey, ExprEvaluatorContext exprEvaluatorContext) { if (InstrumentationHelper.ENABLED) { InstrumentationHelper.Get().QAggregationGroupedApplyEnterLeave(true, Aggregators.Length, _accessAggregations.Length, groupByKey); } long currentTime = exprEvaluatorContext.TimeProvider.Time; if ((_nextSweepTime == null) || (_nextSweepTime <= currentTime)) { _currentMaxAge = GetMaxAge(_currentMaxAge); _currentReclaimFrequency = GetReclaimFrequency(_currentReclaimFrequency); if ((ExecutionPathDebugLog.IsEnabled) && (Log.IsDebugEnabled)) { Log.Debug("Reclaiming groups older then " + _currentMaxAge + " msec and every " + _currentReclaimFrequency + "msec in frequency"); } _nextSweepTime = currentTime + _currentReclaimFrequency; Sweep(currentTime, _currentMaxAge); } HandleRemovedKeys(); // we collect removed keys lazily on the next enter to reduce the chance of empty-group queries creating empty aggregators temporarily AggregationMethodRowAged row = _aggregatorsPerGroup.Get(groupByKey); // The aggregators for this group do not exist, need to create them from the prototypes AggregationMethod[] groupAggregators; AggregationState[] groupStates; if (row == null) { groupAggregators = _methodResolutionService.NewAggregators(Aggregators, exprEvaluatorContext.AgentInstanceId, groupByKey, GroupKeyBinding, null); groupStates = _methodResolutionService.NewAccesses(exprEvaluatorContext.AgentInstanceId, _isJoin, _accessAggregations, groupByKey, GroupKeyBinding, null); row = new AggregationMethodRowAged(_methodResolutionService.GetCurrentRowCount(groupAggregators, groupStates) + 1, currentTime, groupAggregators, groupStates); _aggregatorsPerGroup.Put(groupByKey, row); } else { groupAggregators = row.Methods; groupStates = row.States; row.IncreaseRefcount(); row.LastUpdateTime = currentTime; } var evaluateParams = new EvaluateParams(eventsPerStream, true, exprEvaluatorContext); // For this row, evaluate sub-expressions, enter result _currentAggregatorMethods = groupAggregators; _currentAggregatorStates = groupStates; for (int i = 0; i < Evaluators.Length; i++) { if (InstrumentationHelper.ENABLED) { InstrumentationHelper.Get().QAggNoAccessEnterLeave(true, i, _currentAggregatorMethods[i], Aggregators[i].AggregationExpression); } Object columnResult = Evaluators[i].Evaluate(evaluateParams); groupAggregators[i].Enter(columnResult); if (InstrumentationHelper.ENABLED) { InstrumentationHelper.Get().AAggNoAccessEnterLeave(true, i, _currentAggregatorMethods[i]); } } for (int i = 0; i < _currentAggregatorStates.Length; i++) { if (InstrumentationHelper.ENABLED) { InstrumentationHelper.Get().QAggAccessEnterLeave(true, i, _currentAggregatorStates[i], _accessAggregations[i].AggregationExpression); } _currentAggregatorStates[i].ApplyEnter(eventsPerStream, exprEvaluatorContext); if (InstrumentationHelper.ENABLED) { InstrumentationHelper.Get().AAggAccessEnterLeave(true, i, _currentAggregatorStates[i]); } } InternalHandleUpdated(groupByKey, row); if (InstrumentationHelper.ENABLED) { InstrumentationHelper.Get().AAggregationGroupedApplyEnterLeave(true); } }
public void InternalHandleUpdated(Object groupByKey, AggregationMethodRowAged row) { // no action required }
public override void ApplyLeave(EventBean[] eventsPerStream, Object groupByKey, ExprEvaluatorContext exprEvaluatorContext) { if (InstrumentationHelper.ENABLED) { InstrumentationHelper.Get().QAggregationGroupedApplyEnterLeave(false, Aggregators.Length, _accessAggregations.Length, groupByKey); } AggregationMethodRowAged row = _aggregatorsPerGroup.Get(groupByKey); long currentTime = exprEvaluatorContext.TimeProvider.Time; // The aggregators for this group do not exist, need to create them from the prototypes AggregationMethod[] groupAggregators; AggregationState[] groupStates; if (row != null) { groupAggregators = row.Methods; groupStates = row.States; } else { groupAggregators = _methodResolutionService.NewAggregators(Aggregators, exprEvaluatorContext.AgentInstanceId, groupByKey, GroupKeyBinding, null); groupStates = _methodResolutionService.NewAccesses(exprEvaluatorContext.AgentInstanceId, _isJoin, _accessAggregations, groupByKey, GroupKeyBinding, null); row = new AggregationMethodRowAged(_methodResolutionService.GetCurrentRowCount(groupAggregators, groupStates) + 1, currentTime, groupAggregators, groupStates); _aggregatorsPerGroup.Put(groupByKey, row); } // For this row, evaluate sub-expressions, enter result var evaluateParams = new EvaluateParams(eventsPerStream, false, exprEvaluatorContext); _currentAggregatorMethods = groupAggregators; _currentAggregatorStates = groupStates; for (int i = 0; i < Evaluators.Length; i++) { if (InstrumentationHelper.ENABLED) { InstrumentationHelper.Get().QAggNoAccessEnterLeave(false, i, _currentAggregatorMethods[i], Aggregators[i].AggregationExpression); } Object columnResult = Evaluators[i].Evaluate(evaluateParams); groupAggregators[i].Leave(columnResult); if (InstrumentationHelper.ENABLED) { InstrumentationHelper.Get().AAggNoAccessEnterLeave(false, i, _currentAggregatorMethods[i]); } } for (int i = 0; i < _currentAggregatorStates.Length; i++) { if (InstrumentationHelper.ENABLED) { InstrumentationHelper.Get().QAggAccessEnterLeave(false, i, _currentAggregatorStates[i], _accessAggregations[i].AggregationExpression); } _currentAggregatorStates[i].ApplyLeave(eventsPerStream, exprEvaluatorContext); if (InstrumentationHelper.ENABLED) { InstrumentationHelper.Get().AAggAccessEnterLeave(false, i, _currentAggregatorStates[i]); } } row.DecreaseRefcount(); row.LastUpdateTime = currentTime; if (row.Refcount <= 0) { _removedKeys.Add(groupByKey); _methodResolutionService.RemoveAggregators(exprEvaluatorContext.AgentInstanceId, groupByKey, GroupKeyBinding, null); // allow persistence to remove keys already } InternalHandleUpdated(groupByKey, row); if (InstrumentationHelper.ENABLED) { InstrumentationHelper.Get().AAggregationGroupedApplyEnterLeave(false); } }
public override void ApplyLeave( EventBean[] eventsPerStream, Object groupByKey, ExprEvaluatorContext exprEvaluatorContext) { if (InstrumentationHelper.ENABLED) { InstrumentationHelper.Get().QAggregationGroupedApplyEnterLeave(false, base.Aggregators.Length, _accessAggregations.Length, groupByKey); } var row = _aggregatorsPerGroup.Get(groupByKey); var currentTime = exprEvaluatorContext.TimeProvider.Time; // The aggregators for this group do not exist, need to create them from the prototypes AggregationMethod[] groupAggregators; AggregationState[] groupStates; if (row != null) { groupAggregators = row.Methods; groupStates = row.States; } else { groupAggregators = AggSvcGroupByUtil.NewAggregators(base.Aggregators); groupStates = AggSvcGroupByUtil.NewAccesses( exprEvaluatorContext.AgentInstanceId, _isJoin, _accessAggregations, groupByKey, null); row = new AggregationMethodRowAged(1, currentTime, groupAggregators, groupStates); _aggregatorsPerGroup.Put(groupByKey, row); } // For this row, evaluate sub-expressions, enter result _currentAggregatorMethods = groupAggregators; _currentAggregatorStates = groupStates; var evaluateParams = new EvaluateParams(eventsPerStream, false, exprEvaluatorContext); for (var i = 0; i < base.Evaluators.Length; i++) { if (InstrumentationHelper.ENABLED) { InstrumentationHelper.Get().QAggNoAccessEnterLeave(false, i, _currentAggregatorMethods[i], base.Aggregators[i].AggregationExpression); } var columnResult = base.Evaluators[i].Evaluate(evaluateParams); groupAggregators[i].Leave(columnResult); if (InstrumentationHelper.ENABLED) { InstrumentationHelper.Get().AAggNoAccessEnterLeave(false, i, _currentAggregatorMethods[i]); } } for (var i = 0; i < _currentAggregatorStates.Length; i++) { if (InstrumentationHelper.ENABLED) { InstrumentationHelper.Get().QAggAccessEnterLeave(false, i, _currentAggregatorStates[i], _accessAggregations[i].AggregationExpression); } _currentAggregatorStates[i].ApplyLeave(eventsPerStream, exprEvaluatorContext); if (InstrumentationHelper.ENABLED) { InstrumentationHelper.Get().AAggAccessEnterLeave(false, i, _currentAggregatorStates[i]); } } row.DecreaseRefcount(); row.LastUpdateTime = currentTime; if (row.Refcount <= 0) { _removedKeys.Add(groupByKey); } InternalHandleUpdated(groupByKey, row); if (InstrumentationHelper.ENABLED) { InstrumentationHelper.Get().AAggregationGroupedApplyEnterLeave(false); } }