/// <summary> /// Handle an incoming message and queue/invoke appropriate handler /// </summary> /// <param name="message"></param> /// <param name="targetActivation"></param> public void HandleIncomingRequest(Message message, ActivationData targetActivation) { lock (targetActivation) { if (targetActivation.Grain.IsGrain && message.IsUsingInterfaceVersions) { var request = ((InvokeMethodRequest)message.GetDeserializedBody(this.serializationManager)); var compatibilityDirector = compatibilityDirectorManager.GetDirector(request.InterfaceId); var currentVersion = catalog.GrainTypeManager.GetLocalSupportedVersion(request.InterfaceId); if (!compatibilityDirector.IsCompatible(request.InterfaceVersion, currentVersion)) { catalog.DeactivateActivationOnIdle(targetActivation); } } if (targetActivation.State == ActivationState.Invalid || targetActivation.State == ActivationState.Deactivating) { ProcessRequestToInvalidActivation(message, targetActivation.Address, targetActivation.ForwardingAddress, "HandleIncomingRequest"); return; } // Now we can actually scheduler processing of this request targetActivation.RecordRunning(message); MessagingProcessingStatisticsGroup.OnDispatcherMessageProcessedOk(message); scheduler.QueueWorkItem(new InvokeWorkItem(targetActivation, message, this, this.invokeWorkItemLogger), targetActivation.SchedulingContext); } }
/// <summary> /// Handle an incoming message and queue/invoke appropriate handler /// </summary> /// <param name="message"></param> /// <param name="targetActivation"></param> public void HandleIncomingRequest(Message message, ActivationData targetActivation) { lock (targetActivation) { if (targetActivation.State == ActivationState.Invalid) { ProcessRequestToInvalidActivation(message, targetActivation.Address, targetActivation.ForwardingAddress, "HandleIncomingRequest"); return; } // Now we can actually scheduler processing of this request targetActivation.RecordRunning(message); MessagingProcessingStatisticsGroup.OnDispatcherMessageProcessedOk(message); scheduler.QueueWorkItem(new InvokeWorkItem(targetActivation, message, this), targetActivation.SchedulingContext); } }
/// <summary> /// Handle an incoming message and queue/invoke appropriate handler /// </summary> /// <param name="message"></param> /// <param name="targetActivation"></param> public void HandleIncomingRequest(Message message, ActivationData targetActivation) { lock (targetActivation) { if (targetActivation.State == ActivationState.Invalid || targetActivation.State == ActivationState.FailedToActivate) { ProcessRequestToInvalidActivation( message, targetActivation.Address, targetActivation.ForwardingAddress, "HandleIncomingRequest", rejectMessages: targetActivation.State == ActivationState.FailedToActivate); return; } if (targetActivation.Grain.IsLegacyGrain() && message.IsUsingInterfaceVersions) { var request = (InvokeMethodRequest)message.BodyObject; var compatibilityDirector = compatibilityDirectorManager.GetDirector(request.InterfaceId); var currentVersion = this.grainTypeManager.GetLocalSupportedVersion(request.InterfaceId); if (!compatibilityDirector.IsCompatible(request.InterfaceVersion, currentVersion)) { catalog.DeactivateActivationOnIdle(targetActivation); ProcessRequestToInvalidActivation( message, targetActivation.Address, targetActivation.ForwardingAddress, "HandleIncomingRequest - Incompatible request"); return; } } // Now we can actually scheduler processing of this request targetActivation.RecordRunning(message, message.IsAlwaysInterleave); MessagingProcessingStatisticsGroup.OnDispatcherMessageProcessedOk(message); this.messagingTrace.OnScheduleMessage(message); scheduler.QueueWorkItem(new InvokeWorkItem(targetActivation, message, this, this.invokeWorkItemLogger)); } }
/// <summary> /// Handle an incoming message and queue/invoke appropriate handler /// </summary> /// <param name="message"></param> /// <param name="targetActivation"></param> public void HandleIncomingRequest(Message message, ActivationData targetActivation) { lock (targetActivation) { if (targetActivation.State == ActivationState.Invalid || targetActivation.State == ActivationState.FailedToActivate) { _dispatcher.ProcessRequestToInvalidActivation( message, targetActivation.Address, targetActivation.ForwardingAddress, "HandleIncomingRequest", rejectMessages: targetActivation.State == ActivationState.FailedToActivate); return; } if (message.InterfaceVersion > 0) { var compatibilityDirector = _compatibilityDirectorManager.GetDirector(message.InterfaceType); var currentVersion = _versionManifest.GetLocalVersion(message.InterfaceType); if (!compatibilityDirector.IsCompatible(message.InterfaceVersion, currentVersion)) { _catalog.DeactivateActivationOnIdle(targetActivation); _dispatcher.ProcessRequestToInvalidActivation( message, targetActivation.Address, targetActivation.ForwardingAddress, "HandleIncomingRequest - Incompatible request"); return; } } // Now we can actually scheduler processing of this request targetActivation.RecordRunning(message, message.IsAlwaysInterleave); MessagingProcessingStatisticsGroup.OnDispatcherMessageProcessedOk(message); _messagingTrace.OnScheduleMessage(message); _scheduler.QueueWorkItem(new InvokeWorkItem(targetActivation, message, _catalog.RuntimeClient, this)); } }
/// <summary> /// Handle an incoming message and queue/invoke appropriate handler /// </summary> /// <param name="message"></param> /// <param name="targetActivation"></param> public void HandleIncomingRequest(Message message, ActivationData targetActivation) { lock (targetActivation) { if (targetActivation.State == ActivationState.Invalid) { ProcessRequestToInvalidActivation(message, targetActivation.Address, targetActivation.ForwardingAddress, "HandleIncomingRequest"); return; } // Now we can actually scheduler processing of this request targetActivation.RecordRunning(message); var context = new SchedulingContext(targetActivation); if (Message.WriteMessagingTraces) { message.AddTimestamp(Message.LifecycleTag.EnqueueWorkItem); } MessagingProcessingStatisticsGroup.OnDispatcherMessageProcessedOk(message); Scheduler.QueueWorkItem(new InvokeWorkItem(targetActivation, message, context), context); } }
/// <summary> /// Handle an incoming message and queue/invoke appropriate handler /// </summary> /// <param name="message"></param> /// <param name="targetActivation"></param> public void HandleIncomingRequest(Message message, ActivationData targetActivation) { lock (targetActivation) { if (targetActivation.State == ActivationState.Invalid) { ProcessRequestToInvalidActivation(message, targetActivation.Address, targetActivation.ForwardingAddress, "HandleIncomingRequest"); return; } // Now we can actually scheduler processing of this request targetActivation.RecordRunning(message); var context = new SchedulingContext(targetActivation); MessagingProcessingStatisticsGroup.OnDispatcherMessageProcessedOk(message); Scheduler.QueueWorkItem(new InvokeWorkItem(targetActivation, message, context), context); } }