Exemplo n.º 1
0
        //---------------------------------------------------------------------
        // Cadence domain related operations.

        /// <summary>
        /// Registers a Cadence domain using the <see cref="InternalRegisterDomainRequest"/> information passed.
        /// </summary>
        /// <param name="request">The domain properties.</param>
        /// <returns>The tracking <see cref="Task"/>.</returns>
        /// <exception cref="CadenceDomainAlreadyExistsException">Thrown if the domain already exists.</exception>
        /// <exception cref="CadenceBadRequestException">Thrown when the request is invalid.</exception>
        /// <exception cref="CadenceInternalServiceException">Thrown for internal Cadence cluster problems.</exception>
        /// <exception cref="CadenceServiceBusyException">Thrown when Cadence is too busy.</exception>
        private async Task RegisterDomainAsync(InternalRegisterDomainRequest request)
        {
            var domainRegisterRequest =
                new DomainRegisterRequest()
            {
                Name          = request.Name,
                Description   = request.Description,
                OwnerEmail    = request.OwnerEmail,
                RetentionDays = request.RetentionDays,
                SecurityToken = request.SecurityToken
            };

            var reply = await CallProxyAsync(domainRegisterRequest);

            reply.ThrowOnError();
        }
Exemplo n.º 2
0
        /// <summary>
        /// Handles emulated <see cref="DomainRegisterRequest"/> messages.
        /// </summary>
        /// <param name="request">The received message.</param>
        /// <returns>The tracking <see cref="Task"/>.</returns>
        private async Task OnEmulatedDomainRegisterRequestAsync(DomainRegisterRequest request)
        {
            var reply = new DomainRegisterReply();

            if (string.IsNullOrEmpty(request.Name))
            {
                await EmulatedLibraryClient.SendReplyAsync(request,
                                                           new DomainRegisterReply()
                {
                    Error = new CadenceBadRequestException("Invalid name.").ToCadenceError()
                });

                await EmulatedLibraryClient.SendReplyAsync(request, new DomainRegisterReply());

                return;
            }

            using (await emulationMutex.AcquireAsync())
            {
                if (emulatedDomains.ContainsKey(request.Name))
                {
                    reply.Error = new CadenceDomainAlreadyExistsException($"Domain [{request.Name}] already exists.").ToCadenceError();

                    await EmulatedLibraryClient.SendReplyAsync(request, reply);

                    return;
                }

                emulatedDomains.Add(
                    request.Name,
                    new EmulatedCadenceDomain()
                {
                    Name          = request.Name,
                    Description   = request.Description,
                    OwnerEmail    = request.OwnerEmail,
                    Status        = DomainStatus.Registered,
                    Uuid          = Guid.NewGuid().ToString("D"),
                    EmitMetrics   = request.EmitMetrics,
                    RetentionDays = request.RetentionDays
                });

                await EmulatedLibraryClient.SendReplyAsync(request, reply);
            }
        }