internal SystemTarget(LegacyGrainId grainId, SiloAddress silo, bool lowPriority, ILoggerFactory loggerFactory) { this.grainId = grainId; Silo = silo; this.ActivationAddress = ActivationAddress.GetAddress(this.Silo, this.grainId, this.ActivationId); this.IsLowPriority = lowPriority; ActivationId = ActivationId.GetDeterministic(grainId); this.timerLogger = loggerFactory.CreateLogger <GrainTimer>(); }
public Message CreateResponseMessage(Message request) { var response = new Message { Category = request.Category, Direction = Message.Directions.Response, Id = request.Id, IsReadOnly = request.IsReadOnly, IsAlwaysInterleave = request.IsAlwaysInterleave, TargetSilo = request.SendingSilo, TraceContext = request.TraceContext, TransactionInfo = request.TransactionInfo }; if (request.SendingGrain != null) { response.TargetGrain = request.SendingGrain; if (request.SendingActivation != null) { response.TargetActivation = request.SendingActivation; } } response.SendingSilo = request.TargetSilo; if (request.TargetGrain != null) { response.SendingGrain = request.TargetGrain; if (request.TargetActivation != null) { response.SendingActivation = request.TargetActivation; } else if (request.TargetGrain.IsSystemTarget()) { response.SendingActivation = ActivationId.GetDeterministic(request.TargetGrain); } } response.CacheInvalidationHeader = request.CacheInvalidationHeader; response.TimeToLive = request.TimeToLive; var contextData = RequestContextExtensions.Export(this.serializationManager); if (contextData != null) { response.RequestContextData = contextData; } messagingTrace.OnCreateMessage(response); return(response); }
internal void PrepareSystemTargetMessage(Message message) { message.Category = message.TargetGrain.Equals(Constants.MembershipServiceType) ? Message.Categories.Ping : Message.Categories.System; if (message.TargetSilo == null) { message.TargetSilo = messageCenter.MyAddress; } if (message.TargetActivation is null) { message.TargetActivation = ActivationId.GetDeterministic(message.TargetGrain); } }
internal void SendSystemTargetMessage(Message message) { message.Category = message.TargetGrain.Equals(Constants.MembershipOracleType) ? Message.Categories.Ping : Message.Categories.System; if (message.TargetSilo == null) { message.TargetSilo = Transport.MyAddress; } if (message.TargetActivation is null) { message.TargetActivation = ActivationId.GetDeterministic(message.TargetGrain); } TransportMessage(message); }
public void SendRequest( GrainReference target, InvokeMethodRequest request, TaskCompletionSource <object> context, InvokeMethodOptions options) { var message = this.messageFactory.CreateMessage(request, options); message.InterfaceType = target.InterfaceType; message.InterfaceVersion = target.InterfaceVersion; // fill in sender if (message.SendingSilo == null) { message.SendingSilo = MySilo; } IGrainContext sendingActivation = RuntimeContext.CurrentGrainContext; if (sendingActivation == null) { var clientAddress = this.HostedClient.Address; message.SendingGrain = clientAddress.Grain; message.SendingActivation = clientAddress.Activation; } else { message.SendingActivation = sendingActivation.ActivationId; message.SendingGrain = sendingActivation.GrainId; } // fill in destination var targetGrainId = target.GrainId; message.TargetGrain = targetGrainId; SharedCallbackData sharedData; if (SystemTargetGrainId.TryParse(targetGrainId, out var systemTargetGrainId)) { message.TargetSilo = systemTargetGrainId.GetSiloAddress(); message.TargetActivation = ActivationId.GetDeterministic(targetGrainId); message.Category = targetGrainId.Type.Equals(Constants.MembershipOracleType) ? Message.Categories.Ping : Message.Categories.System; sharedData = this.systemSharedCallbackData; } else { sharedData = this.sharedCallbackData; } var oneWay = (options & InvokeMethodOptions.OneWay) != 0; if (context is null && !oneWay) { this.logger.Warn(ErrorCode.IGC_SendRequest_NullContext, "Null context {0}: {1}", message, Utils.GetStackTrace()); } if (message.IsExpirableMessage(this.messagingOptions.DropExpiredMessages)) { message.TimeToLive = sharedData.ResponseTimeout; } if (!oneWay) { var callbackData = new CallbackData(sharedData, context, message); callbacks.TryAdd(message.Id, callbackData); } this.messagingTrace.OnSendRequest(message); this.Dispatcher.SendMessage(message, sendingActivation); }
public void SendRequest( GrainReference target, InvokeMethodRequest request, TaskCompletionSource <object> context, InvokeMethodOptions options, string genericArguments) { var message = this.messageFactory.CreateMessage(request, options); // fill in sender if (message.SendingSilo == null) { message.SendingSilo = MySilo; } if (!String.IsNullOrEmpty(genericArguments)) { message.GenericGrainType = genericArguments; } IGrainContext sendingActivation = RuntimeContext.CurrentGrainContext; if (sendingActivation == null) { var clientAddress = this.HostedClient.ClientAddress; message.SendingGrain = clientAddress.Grain; message.SendingActivation = clientAddress.Activation; } else { message.SendingActivation = sendingActivation.ActivationId; message.SendingGrain = sendingActivation.GrainId; } // fill in destination var targetGrainId = target.GrainId; message.TargetGrain = targetGrainId; SharedCallbackData sharedData; if (targetGrainId.IsSystemTarget()) { SiloAddress targetSilo = (target.SystemTargetSilo ?? MySilo); message.TargetSilo = targetSilo; message.TargetActivation = ActivationId.GetDeterministic(targetGrainId); message.Category = targetGrainId.Equals(Constants.MembershipOracleId) ? Message.Categories.Ping : Message.Categories.System; sharedData = this.systemSharedCallbackData; } else { sharedData = this.sharedCallbackData; } if (target.IsObserverReference) { message.TargetObserverId = target.ObserverId; } var oneWay = (options & InvokeMethodOptions.OneWay) != 0; if (context is null && !oneWay) { this.logger.Warn(ErrorCode.IGC_SendRequest_NullContext, "Null context {0}: {1}", message, Utils.GetStackTrace()); } if (message.IsExpirableMessage(this.messagingOptions.DropExpiredMessages)) { message.TimeToLive = sharedData.ResponseTimeout; } if (!oneWay) { var callbackData = new CallbackData(sharedData, context, message); callbacks.TryAdd(message.Id, callbackData); } this.messagingTrace.OnSendRequest(message); if (targetGrainId.IsSystemTarget()) { // Messages to system targets bypass the task system and get sent "in-line" this.Dispatcher.TransportMessage(message); } else { this.Dispatcher.SendMessage(message, sendingActivation); } }