public void OnInvoke(InvokeMethodRequest request, IGrain grain) { // (NOT YET AVAILABLE) Interface name is available from: <c>grainReference.InterfaceName</c> // (NOT YET AVAILABLE) Method name is available from: <c>grainReference.GetMethodName(request.InterfaceId, request.MethodId)</c> // GrainId is available from: <c>grainReference.GrainId</c> // PrimaryKey is availabe from: <c>grainReference.GrainId.GetPrimaryKeyLong()</c> or <c>grainReference.GrainId.GetPrimaryKey()</c> depending on key type. // Call arguments are available from: <c>request.Arguments</c> array TotalCalls++; output.WriteLine("OnInvoke TotalCalls={0}", TotalCalls); try { output.WriteLine("OnInvoke called for Grain={0} PrimaryKey={1} GrainId={2} with {3} arguments", grain.GetType().FullName, ((GrainReference)grain).GrainId.GetPrimaryKeyLong(), ((GrainReference)grain).GrainId, request.Arguments != null ? request.Arguments.Length : 0); } catch (Exception exc) { output.WriteLine("**** Error OnInvoke for Grain={0} GrainId={1} with {2} arguments. Exception = {3}", grain.GetType().FullName, ((GrainReference)grain).GrainId, request.Arguments != null ? request.Arguments.Length : 0, exc); } if (setActivityId != Guid.Empty) { RequestContextTestUtils.SetActivityId(setActivityId); output.WriteLine("OnInvoke Set ActivityId={0}", setActivityId); } output.WriteLine("OnInvoke Current ActivityId={0}", RequestContextTestUtils.GetActivityId()); }
public void RequestContext_ActivityId_ExportToMessage() { Guid activityId = Guid.NewGuid(); Guid activityId2 = Guid.NewGuid(); Guid nullActivityId = Guid.Empty; Message msg = new Message(); msg.RequestContextData = RequestContextExtensions.Export(this.fixture.SerializationManager); if (msg.RequestContextData != null) { foreach (var kvp in msg.RequestContextData) { headers.Add(kvp.Key, kvp.Value); } } ; Assert.False(headers.ContainsKey(RequestContext.E2_E_TRACING_ACTIVITY_ID_HEADER), "ActivityId should not be be present " + headers.ToStrings(separator: ",")); TestCleanup(); RequestContextTestUtils.SetActivityId(activityId); msg = new Message(); msg.RequestContextData = RequestContextExtensions.Export(this.fixture.SerializationManager); if (msg.RequestContextData != null) { foreach (var kvp in msg.RequestContextData) { headers.Add(kvp.Key, kvp.Value); } } ; Assert.True(headers.ContainsKey(RequestContext.E2_E_TRACING_ACTIVITY_ID_HEADER), "ActivityId #1 should be present " + headers.ToStrings(separator: ",")); object result = headers[RequestContext.E2_E_TRACING_ACTIVITY_ID_HEADER]; Assert.NotNull(result); // ActivityId #1 should not be null Assert.Equal(activityId, result); // "E2E ActivityId #1 not propagated correctly" Assert.Equal(activityId, RequestContextTestUtils.GetActivityId()); // "Original E2E ActivityId #1 should not have changed" TestCleanup(); RequestContextTestUtils.SetActivityId(nullActivityId); msg = new Message(); msg.RequestContextData = RequestContextExtensions.Export(this.fixture.SerializationManager); if (msg.RequestContextData != null) { foreach (var kvp in msg.RequestContextData) { headers.Add(kvp.Key, kvp.Value); } } ; Assert.False(headers.ContainsKey(RequestContext.E2_E_TRACING_ACTIVITY_ID_HEADER), "Null ActivityId should not be present " + headers.ToStrings(separator: ",")); TestCleanup(); RequestContextTestUtils.SetActivityId(activityId2); msg = new Message(); msg.RequestContextData = RequestContextExtensions.Export(this.fixture.SerializationManager); foreach (var kvp in msg.RequestContextData) { headers.Add(kvp.Key, kvp.Value); } ; Assert.True(headers.ContainsKey(RequestContext.E2_E_TRACING_ACTIVITY_ID_HEADER), "ActivityId #2 should be present " + headers.ToStrings(separator: ",")); result = headers[RequestContext.E2_E_TRACING_ACTIVITY_ID_HEADER]; Assert.NotNull(result); // ActivityId #2 should not be null Assert.Equal(activityId2, result); // "E2E ActivityId #2 not propagated correctly" Assert.Equal(activityId2, RequestContextTestUtils.GetActivityId()); // "Original E2E ActivityId #2 should not have changed" TestCleanup(); }
public void RequestContext_ActivityId_ExportImport() { Guid activityId = Guid.NewGuid(); Guid activityId2 = Guid.NewGuid(); Guid nullActivityId = Guid.Empty; Message msg = new Message(); msg.RequestContextData = RequestContextExtensions.Export(this.fixture.DeepCopier); RequestContext.Clear(); RequestContextExtensions.Import(msg.RequestContextData); var actId = RequestContext.Get(RequestContext.E2_E_TRACING_ACTIVITY_ID_HEADER); Assert.Null(actId); TestCleanup(); RequestContextTestUtils.SetActivityId(activityId); msg = new Message(); msg.RequestContextData = RequestContextExtensions.Export(this.fixture.DeepCopier); RequestContext.Clear(); RequestContextExtensions.Import(msg.RequestContextData); actId = RequestContext.Get(RequestContext.E2_E_TRACING_ACTIVITY_ID_HEADER); if (msg.RequestContextData != null) { foreach (var kvp in msg.RequestContextData) { headers.Add(kvp.Key, kvp.Value); } } ; Assert.NotNull(actId); // "ActivityId #1 should be present " + headers.ToStrings(separator: ",") object result = headers[RequestContext.E2_E_TRACING_ACTIVITY_ID_HEADER]; Assert.NotNull(result); // "ActivityId #1 should not be null" Assert.Equal(activityId, result); // "E2E ActivityId #1 not propagated correctly" Assert.Equal(activityId, RequestContextTestUtils.GetActivityId()); // "Original E2E ActivityId #1 should not have changed" TestCleanup(); RequestContextTestUtils.SetActivityId(nullActivityId); msg = new Message(); msg.RequestContextData = RequestContextExtensions.Export(this.fixture.DeepCopier); RequestContext.Clear(); RequestContextExtensions.Import(msg.RequestContextData); actId = RequestContext.Get(RequestContext.E2_E_TRACING_ACTIVITY_ID_HEADER); Assert.Null(actId); TestCleanup(); RequestContextTestUtils.SetActivityId(activityId2); msg = new Message(); msg.RequestContextData = RequestContextExtensions.Export(this.fixture.DeepCopier); RequestContext.Clear(); RequestContextExtensions.Import(msg.RequestContextData); actId = RequestContext.Get(RequestContext.E2_E_TRACING_ACTIVITY_ID_HEADER); if (msg.RequestContextData != null) { foreach (var kvp in msg.RequestContextData) { headers.Add(kvp.Key, kvp.Value); } } ; Assert.NotNull(actId); // "ActivityId #2 should be present " + headers.ToStrings(separator: ",") result = headers[RequestContext.E2_E_TRACING_ACTIVITY_ID_HEADER]; Assert.NotNull(result); // "ActivityId #2 should not be null" Assert.Equal(activityId2, result); // "E2E ActivityId #2 not propagated correctly Assert.Equal(activityId2, RequestContextTestUtils.GetActivityId()); // "Original E2E ActivityId #2 should not have changed" TestCleanup(); }