public async Task ExecuteAsync(CancellationToken cancellationToken)
        {
            try
            {
                var ds = new DeleteServiceDescription(new Uri(_orphan.ServiceName, UriKind.RelativeOrAbsolute))
                {
                    ForceDelete = true
                };
                await _fabricClient.ServiceManager.DeleteServiceAsync(ds).ConfigureAwait(false);

                if (cancellationToken.IsCancellationRequested)
                {
                    return;
                }
                var properties = new Dictionary <string, string>
                {
                    { "EventName", $"{OrphanEventPrefix} successfully removed orphaned service {_orphan}." },
                    { "ServiceName", _orphan.ServiceName },
                    { "ServiceTypeUri", _orphan.ServiceTypeUri }
                };
                _telemetryClient.TrackEvent($"{OrphanEventPrefix} removed orphaned service {_orphan}.", properties);
            }
            catch (Exception ex)
            {
                // Log the exception and continue removing orphans
                var properties = new Dictionary <string, string>
                {
                    { "ServiceName", _orphan.ServiceName },
                    { "ServiceTypeUri", _orphan.ServiceTypeUri }
                };
                _telemetryClient.TrackException(ex, properties);
            }
        }
Example #2
0
        private async Task DeleteActor(int index)
        {
            var description = new DeleteServiceDescription(new Uri($"{this.context.CodePackageActivationContext.ApplicationName}/SimulationActorService{GetSimulationActorNameSuffix(index)}"));

            await this.fabricClient.ServiceManager.DeleteServiceAsync(description);

            poolInfo.pool.Remove(index);
        }
Example #3
0
 public override async Task Execute(TriggerItem triggerItem)
 {
     var serviceDescription = new DeleteServiceDescription(triggerItem.Service.Properties.ServiceName)
     {
         ForceDelete = true
     };
     await _fabricClient.ServiceManager.DeleteServiceAsync(serviceDescription);
 }
        public async Task IncreaseDecreaseServiceInstances(bool increase, string appName, string serviceName, string serviceType)
        {
            //string appName = "fabric:/MyApplication";
            //string serviceName = "fabric:/MyApplication/Stateless1";
            //string serviceType = "Stateless1Type";

            using (var fabricClient = new FabricClient())
            {
                if (increase)
                {
                    // Create the stateless service description.  For stateful services, use a StatefulServiceDescription object.
                    StatelessServiceDescription serviceDescription = new StatelessServiceDescription
                    {
                        ApplicationName            = new Uri(appName),
                        InstanceCount              = 1,
                        PartitionSchemeDescription = new SingletonPartitionSchemeDescription(),
                        ServiceName     = new Uri(serviceName),
                        ServiceTypeName = serviceType
                    };

                    // Create the service instance.
                    try
                    {
                        fabricClient.ServiceManager.CreateServiceAsync(serviceDescription).Wait();
                        ServiceEventSource.Current.ServiceMessage(_serviceContext, "Created service instance {0}", serviceName);
                    }
                    catch (AggregateException ae)
                    {
                        ServiceEventSource.Current.ServiceMessage(_serviceContext, "CreateService failed.");
                        foreach (Exception ex in ae.InnerExceptions)
                        {
                            ServiceEventSource.Current.ServiceMessage(_serviceContext, "HResult: {0} Message: {1}", ex.HResult, ex.Message);
                        }
                    }
                }
                else
                {
                    // Delete a service instance.
                    try
                    {
                        DeleteServiceDescription deleteServiceDescription = new DeleteServiceDescription(new Uri(serviceName));

                        await fabricClient.ServiceManager.DeleteServiceAsync(deleteServiceDescription);

                        ServiceEventSource.Current.ServiceMessage(_serviceContext, "Deleted service instance {0}", serviceName);
                    }
                    catch (AggregateException ae)
                    {
                        ServiceEventSource.Current.ServiceMessage(_serviceContext, "DeleteService failed.");
                        foreach (Exception ex in ae.InnerExceptions)
                        {
                            ServiceEventSource.Current.ServiceMessage(_serviceContext, "HResult: {0} Message: {1}", ex.HResult, ex.Message);
                        }
                    }
                }
            }
        }
Example #5
0
        public DeleteServiceRequest(IFabricClient fabricClient, DeleteServiceDescription deleteServiceDescription, TimeSpan timeout, bool serviceDoesNotExist)
            : base(fabricClient, timeout)
        {
            ThrowIf.Null(deleteServiceDescription, "deleteServiceDescription");

            this.DeleteServiceDescription = deleteServiceDescription;
            this.serviceDoesNotExist      = serviceDoesNotExist;
            this.ConfigureErrorCodes();
        }
Example #6
0
        public async Task <IActionResult> Delete(string name)
        {
            Uri serviceUri = this.CreateTopicUri(name);

            var description = new DeleteServiceDescription(serviceUri);

            await fabric.ServiceManager.DeleteServiceAsync(description);

            return(Ok());
        }
        public void DeleteServiceDescriptionSerializationTest()
        {
            Uri serviceName = new Uri("fabric:/" + "testSvc" + this.random.CreateRandom <string>());
            DeleteServiceDescription deleteServiceDescription = new DeleteServiceDescription(serviceName)
            {
                ForceDelete = this.random.CreateRandom <bool>()
            };

            TestUsingSerializer(this.Serializer, deleteServiceDescription);
        }
Example #8
0
        private async Task DeleteService(Uri targetUri)
        {
            var description = new DeleteServiceDescription(targetUri);

            try
            {
                await fabric.ServiceManager.DeleteServiceAsync(description);
            }
            catch (FabricElementNotFoundException)
            {
                // service doesn't exist; nothing to delete
            }
        }
        public async Task Handle(PeriodEndStartedEvent message, IMessageHandlerContext context)
        {
            logger.LogDebug($"Received period end started event. Details: {message.ToJson()}");

            var fabricClient       = new FabricClient();
            var serviceDescription = new DeleteServiceDescription(new Uri(ServiceNames.DatalockApprovalsService))
            {
                ForceDelete = true,
            };

            await fabricClient.ServiceManager.DeleteServiceAsync(serviceDescription);

            logger.LogInfo($"Finished period end started handler. Details: {message.ToJson()}");
        }
Example #10
0
        private async Task FinishRemovalOfSubscriptions(IReliableDictionary <string, string> subscriptions)
        {
            using (ITransaction tx = this.StateManager.CreateTransaction())
            {
                var unregisteredServices = new List <string>();

                IAsyncEnumerable <KeyValuePair <string, string> > asyncEnumerable = await subscriptions.CreateEnumerableAsync(tx).ConfigureAwait(false);

                using (IAsyncEnumerator <KeyValuePair <string, string> > asyncEnumerator = asyncEnumerable.GetAsyncEnumerator())
                {
                    while (await asyncEnumerator.MoveNextAsync(CancellationToken.None).ConfigureAwait(false))
                    {
                        string subscriber = asyncEnumerator.Current.Key;
                        string topic      = asyncEnumerator.Current.Value;

                        try
                        {
                            // https://social.msdn.microsoft.com/Forums/en-US/ce8aff1d-6246-4b53-9075-13b738a24b13/best-way-to-determine-if-a-service-already-exists?forum=AzureServiceFabric
                            // treat as "Desired state management"
                            // "Instead treat this more like desired state management - create the service until you are told it already exists."
                            Uri serviceUri  = this.Context.CreateSubscriptionUri(topic, subscriber);
                            var description = new DeleteServiceDescription(serviceUri);

                            using (var fabric = new FabricClient())
                            {
                                await fabric.ServiceManager.DeleteServiceAsync(description);
                            }
                        }
                        catch (FabricElementNotFoundException)
                        {
                            await UnregisterSubscriberFromTopic(subscriber, topic);

                            unregisteredServices.Add(subscriber);
                        }
                    }
                }

                // do after enumerator is complete.
                foreach (var sub in unregisteredServices)
                {
                    await subscriptions.TryRemoveAsync(tx, sub);
                }

                await tx.CommitAsync();
            }
        }
Example #11
0
        public async Task DeleteServiceAsync(Uri serviceInstanceUri, bool force = false)
        {
            var ds = new DeleteServiceDescription(serviceInstanceUri)
            {
                ForceDelete = force
            };

            try { await _fabricClient.ServiceManager.DeleteServiceAsync(ds); }
            catch (TimeoutException ex)
            {
                var properties = new Dictionary <string, string>
                {
                    { "ServiceName", ds.ServiceName?.ToString() }, { "ForceDelete", ds.ForceDelete.ToString() },
                    { "ExceptionMessage", ex.Message }, { "ExceptionStack", ex.StackTrace }
                };
                _telemetryClient.TrackTrace("Remove instance timed out", properties);
            }
        }
Example #12
0
        public async Task <IActionResult> Delete(string topicName, string name)
        {
            var subscriptions = await this.stateManager.GetRemoveSubscriptionsDictionary();

            using (var tx = this.stateManager.CreateTransaction())
            {
                var subAlreadyDeleting = await subscriptions.ContainsKeyAsync(tx, name);

                if (subAlreadyDeleting)
                {
                    tx.Abort(); // explicity close transaction
                    return(Accepted("Subscription has been registered for deletion and is processing."));
                }
                tx.Abort(); // explicity close transaction
            }

            Uri serviceUri  = this.serviceContext.CreateSubscriptionUri(topicName, name);
            var description = new DeleteServiceDescription(serviceUri);

            using (var tx = this.stateManager.CreateTransaction())
            {
                // save id so can deregister with topic service once the service is gone.
                // this is done in RunAsync on this service
                await subscriptions.SetAsync(tx, name, topicName);

                try
                {
                    await fabric.ServiceManager.DeleteServiceAsync(description);
                }
                catch (FabricElementNotFoundException)
                {
                    // service doesn't exist; nothing to delete
                }

                await tx.CommitAsync();
            }

            return(Ok());
        }
Example #13
0
        protected void RemoveService(DeleteServiceDescription deleteDescription)
        {
            var clusterConnection = this.GetClusterConnection();

            try
            {
                clusterConnection.DeleteServiceAsync(
                    deleteDescription,
                    this.GetTimeout(),
                    this.GetCancellationToken()).Wait();
                this.WriteObject(StringResources.Info_RemoveServiceSucceeded);
            }
            catch (AggregateException aggregateException)
            {
                aggregateException.Handle((ae) =>
                {
                    this.ThrowTerminatingError(
                        ae,
                        Constants.RemoveServiceErrorId,
                        clusterConnection);
                    return(true);
                });
            }
        }
Example #14
0
 public DeleteServiceRequest(IFabricClient fabricClient, DeleteServiceDescription deleteServiceDescription, TimeSpan timeout)
     : this(fabricClient, deleteServiceDescription, timeout, false)
 {
 }