/// <inheritdoc/> public override async Task <Contracts.SubscriptionResponse> Subscribe(Contracts.Subscription subscriptionRequest, ServerCallContext context) { var createExecutionContext = _executionContextCreator.TryCreateUsing(subscriptionRequest.CallContext.ExecutionContext); if (!createExecutionContext.Success) { return(new Contracts.SubscriptionResponse { Failure = new Dolittle.Protobuf.Contracts.Failure { Id = FailureId.Other.ToProtobuf(), Reason = $"Failed to create event horizon subscription because execution context was invalid: {createExecutionContext.Exception.Message}", } }); } var executionContext = createExecutionContext.Result; var subscription = new SubscriptionId( executionContext.Tenant, subscriptionRequest.MicroserviceId.ToGuid(), subscriptionRequest.TenantId.ToGuid(), subscriptionRequest.ScopeId.ToGuid(), subscriptionRequest.StreamId.ToGuid(), subscriptionRequest.PartitionId); try { _metrics.IncrementTotalSubscriptionsInitiatedFromHead(); _logger.IncomingSubscripton(subscription); var subscriptionResponse = await _getSubscriptionsFor(executionContext.Tenant).Subscribe(subscription, executionContext).ConfigureAwait(false); return(subscriptionResponse switch { { Success : false } => new Contracts.SubscriptionResponse { Failure = subscriptionResponse.Failure }, _ => new Contracts.SubscriptionResponse { ConsentId = subscriptionResponse.ConsentId.ToProtobuf() }, });
/// <inheritdoc/> public override async Task <Contracts.SubscriptionResponse> Subscribe(Contracts.Subscription subscriptionRequest, ServerCallContext context) { _executionContextManager.CurrentFor(subscriptionRequest.CallContext.ExecutionContext); var consumerTenant = _executionContextManager.Current.Tenant; var subscriptionId = new SubscriptionId( consumerTenant, subscriptionRequest.MicroserviceId.To <Microservice>(), subscriptionRequest.TenantId.To <TenantId>(), subscriptionRequest.ScopeId.To <ScopeId>(), subscriptionRequest.StreamId.To <StreamId>(), subscriptionRequest.PartitionId.To <PartitionId>()); try { _logger.Information("Incoming event horizon subscription request from head to runtime. {SubscriptionId}", subscriptionId); var subscriptionResponse = await _getConsumerClient().HandleSubscription(subscriptionId).ConfigureAwait(false); return(subscriptionResponse switch { { Success : false } => new Contracts.SubscriptionResponse { Failure = subscriptionResponse.Failure }, _ => new Contracts.SubscriptionResponse(), });