public override void Update(EventBean[] newData, EventBean[] oldData) { // handle remove stream: post oldData to all views if (oldData != null && oldData.Length != 0) { try { _ignoreViewIrStream = true; for (int i = 0; i < _views.Length; i++) { _views[i].Update(newData, oldData); } } finally { _ignoreViewIrStream = false; } } if (newData != null) { // post to all non-batch views first to let them decide the remove stream, if any try { _captureIrNonBatch = true; for (int i = 0; i < _views.Length; i++) { if (i != _batchViewIndex) { _views[i].Update(newData, oldData); } } } finally { _captureIrNonBatch = false; } // if there is any data removed from non-batch views, remove from all views // collect removed events _removedEvents.Clear(); for (int i = 0; i < _views.Length; i++) { if (_oldEventsPerView[i] != null) { for (int j = 0; j < _views.Length; j++) { if (i == j) { continue; } _views[j].Update(null, _oldEventsPerView[i]); for (int k = 0; k < _oldEventsPerView[i].Length; k++) { _removedEvents.Add(_oldEventsPerView[i][k]); } } _oldEventsPerView[i] = null; } } // post only new events to the batch view that have not been removed EventBean[] newDataNonRemoved; if (_hasAsymetric) { newDataNonRemoved = EventBeanUtility.GetNewDataNonRemoved(newData, _removedEvents, _newEventsPerView); } else { newDataNonRemoved = EventBeanUtility.GetNewDataNonRemoved(newData, _removedEvents); } if (newDataNonRemoved != null) { _views[_batchViewIndex].Update(newDataNonRemoved, null); } } }
public override void Update( EventBean[] newData, EventBean[] oldData) { agentInstanceContext.AuditProvider.View(newData, oldData, agentInstanceContext, factory); agentInstanceContext.InstrumentationProvider.QViewProcessIRStream(factory, newData, oldData); var localState = factory.BatchViewLocalStatePerThread; // handle remove stream: post oldData to all views if (oldData != null && oldData.Length != 0) { try { localState.IsIgnoreViewIRStream = true; for (var i = 0; i < views.Length; i++) { var view = views[i]; agentInstanceContext.InstrumentationProvider.QViewIndicate(factory, newData, oldData); view.Update(newData, oldData); agentInstanceContext.InstrumentationProvider.AViewIndicate(); } } finally { localState.IsIgnoreViewIRStream = false; } } if (newData != null) { // post to all non-batch views first to let them decide the remove stream, if any try { localState.IsCaptureIRNonBatch = true; for (var i = 0; i < views.Length; i++) { if (i != factory.BatchViewIndex) { var view = views[i]; agentInstanceContext.InstrumentationProvider.QViewIndicate(factory, newData, oldData); view.Update(newData, oldData); agentInstanceContext.InstrumentationProvider.AViewIndicate(); } } } finally { localState.IsCaptureIRNonBatch = false; } // if there is any data removed from non-batch views, remove from all views // collect removed events localState.RemovedEvents.Clear(); for (var i = 0; i < views.Length; i++) { if (localState.OldEventsPerView[i] != null) { for (var j = 0; j < views.Length; j++) { if (i == j) { continue; } var view = views[j]; var oldEvents = localState.OldEventsPerView[i]; agentInstanceContext.InstrumentationProvider.QViewIndicate(factory, null, oldEvents); view.Update(null, oldEvents); agentInstanceContext.InstrumentationProvider.AViewIndicate(); for (var k = 0; k < localState.OldEventsPerView[i].Length; k++) { localState.RemovedEvents.Add(localState.OldEventsPerView[i][k]); } } localState.OldEventsPerView[i] = null; } } // post only new events to the batch view that have not been removed EventBean[] newDataNonRemoved; if (factory.IsAsymetric) { newDataNonRemoved = EventBeanUtility.GetNewDataNonRemoved( newData, localState.RemovedEvents, localState.NewEventsPerView); } else { newDataNonRemoved = EventBeanUtility.GetNewDataNonRemoved(newData, localState.RemovedEvents); } if (newDataNonRemoved != null) { var view = views[factory.BatchViewIndex]; agentInstanceContext.InstrumentationProvider.QViewIndicate(factory, newDataNonRemoved, null); view.Update(newDataNonRemoved, null); agentInstanceContext.InstrumentationProvider.AViewIndicate(); } } agentInstanceContext.InstrumentationProvider.AViewProcessIRStream(); }
public override void Update(EventBean[] newData, EventBean[] oldData) { IntersectBatchViewLocalState localState = _factory.GetBatchViewLocalStatePerThread(); // handle remove stream: post oldData to all views if (oldData != null && oldData.Length != 0) { try { localState.IsIgnoreViewIRStream = true; for (int i = 0; i < _views.Length; i++) { _views[i].Update(newData, oldData); } } finally { localState.IsIgnoreViewIRStream = false; } } if (newData != null) { // post to all non-batch views first to let them decide the remove stream, if any try { localState.IsCaptureIRNonBatch = true; for (int i = 0; i < _views.Length; i++) { if (i != _factory.BatchViewIndex) { _views[i].Update(newData, oldData); } } } finally { localState.IsCaptureIRNonBatch = false; } // if there is any data removed from non-batch views, remove from all views // collect removed events localState.RemovedEvents.Clear(); for (int i = 0; i < _views.Length; i++) { if (localState.OldEventsPerView[i] != null) { for (int j = 0; j < _views.Length; j++) { if (i == j) { continue; } _views[j].Update(null, localState.OldEventsPerView[i]); for (int k = 0; k < localState.OldEventsPerView[i].Length; k++) { localState.RemovedEvents.Add(localState.OldEventsPerView[i][k]); } } localState.OldEventsPerView[i] = null; } } // post only new events to the batch view that have not been removed EventBean[] newDataNonRemoved; if (_factory.IsAsymmetric()) { newDataNonRemoved = EventBeanUtility.GetNewDataNonRemoved( newData, localState.RemovedEvents, localState.NewEventsPerView); } else { newDataNonRemoved = EventBeanUtility.GetNewDataNonRemoved(newData, localState.RemovedEvents); } if (newDataNonRemoved != null) { _views[_factory.BatchViewIndex].Update(newDataNonRemoved, null); } } }