예제 #1
0
        protected void UpdateService(
            Uri serviceName,
            ServiceUpdateDescription updateDescription)
        {
            var clusterConnection = this.GetClusterConnection();

            try
            {
                clusterConnection.UpdateServiceAsync(
                    serviceName,
                    updateDescription,
                    this.GetTimeout(),
                    this.GetCancellationToken()).Wait();
                this.WriteObject(StringResources.Info_UpdateServiceSucceeded);
            }
            catch (AggregateException aggregateException)
            {
                aggregateException.Handle((ae) =>
                {
                    this.ThrowTerminatingError(
                        ae,
                        Constants.UpdateServiceErrorId,
                        clusterConnection);
                    return(true);
                });
            }
        }
예제 #2
0
        /// <summary>
        /// Gets the object from Json properties.
        /// </summary>
        /// <param name="reader">The <see cref="T: Newtonsoft.Json.JsonReader" /> to read from.</param>
        /// <returns>The object Value.</returns>
        internal static ServiceUpdateDescription GetFromJsonProperties(JsonReader reader)
        {
            ServiceUpdateDescription obj = null;
            var propName = reader.ReadPropertyName();

            if (!propName.Equals("ServiceKind", StringComparison.Ordinal))
            {
                throw new JsonReaderException($"Incorrect discriminator property name {propName}, Expected discriminator property name is ServiceKind.");
            }

            var propValue = reader.ReadValueAsString();

            if (propValue.Equals("Stateful", StringComparison.Ordinal))
            {
                obj = StatefulServiceUpdateDescriptionConverter.GetFromJsonProperties(reader);
            }
            else if (propValue.Equals("Stateless", StringComparison.Ordinal))
            {
                obj = StatelessServiceUpdateDescriptionConverter.GetFromJsonProperties(reader);
            }
            else
            {
                throw new InvalidOperationException("Unknown ServiceKind.");
            }

            return(obj);
        }
예제 #3
0
        public UpdateServiceRequest(IFabricClient fabricClient, Uri serviceName, ServiceUpdateDescription updateDescription, TimeSpan timeout)
            : base(fabricClient, timeout)
        {
            ThrowIf.Null(serviceName, "serviceName");
            ThrowIf.Null(updateDescription, "updateDescription");

            this.ServiceName       = serviceName;
            this.UpdateDescription = updateDescription;
        }
예제 #4
0
        /// <inheritdoc/>
        protected override void ProcessRecordInternal()
        {
            ServiceUpdateDescription serviceUpdateDescription = null;

            if (this.Stateful.IsPresent)
            {
                serviceUpdateDescription = new StatefulServiceUpdateDescription(
                    flags: this.Flags,
                    placementConstraints: this.PlacementConstraints,
                    correlationScheme: this.CorrelationScheme,
                    loadMetrics: this.LoadMetrics,
                    servicePlacementPolicies: this.ServicePlacementPolicies,
                    defaultMoveCost: this.DefaultMoveCost,
                    scalingPolicies: this.ScalingPolicies,
                    serviceDnsName: this.ServiceDnsName,
                    tagsForPlacement: this.TagsForPlacement,
                    tagsForRunning: this.TagsForRunning,
                    targetReplicaSetSize: this.TargetReplicaSetSize,
                    minReplicaSetSize: this.MinReplicaSetSize,
                    replicaRestartWaitDurationSeconds: this.ReplicaRestartWaitDurationSeconds,
                    quorumLossWaitDurationSeconds: this.QuorumLossWaitDurationSeconds,
                    standByReplicaKeepDurationSeconds: this.StandByReplicaKeepDurationSeconds,
                    servicePlacementTimeLimitSeconds: this.ServicePlacementTimeLimitSeconds,
                    dropSourceReplicaOnMove: this.DropSourceReplicaOnMove,
                    replicaLifecycleDescription: this.ReplicaLifecycleDescription,
                    auxiliaryReplicaCount: this.AuxiliaryReplicaCount);
            }
            else if (this.Stateless.IsPresent)
            {
                serviceUpdateDescription = new StatelessServiceUpdateDescription(
                    flags: this.Flags,
                    placementConstraints: this.PlacementConstraints,
                    correlationScheme: this.CorrelationScheme,
                    loadMetrics: this.LoadMetrics,
                    servicePlacementPolicies: this.ServicePlacementPolicies,
                    defaultMoveCost: this.DefaultMoveCost,
                    scalingPolicies: this.ScalingPolicies,
                    serviceDnsName: this.ServiceDnsName,
                    tagsForPlacement: this.TagsForPlacement,
                    tagsForRunning: this.TagsForRunning,
                    instanceCount: this.InstanceCount,
                    minInstanceCount: this.MinInstanceCount,
                    minInstancePercentage: this.MinInstancePercentage,
                    instanceCloseDelayDurationSeconds: this.InstanceCloseDelayDurationSeconds,
                    instanceLifecycleDescription: this.InstanceLifecycleDescription,
                    instanceRestartWaitDurationSeconds: this.InstanceRestartWaitDurationSeconds);
            }

            this.ServiceFabricClient.Services.UpdateServiceAsync(
                serviceId: this.ServiceId,
                serviceUpdateDescription: serviceUpdateDescription,
                serverTimeout: this.ServerTimeout,
                cancellationToken: this.CancellationToken).GetAwaiter().GetResult();

            Console.WriteLine("Success!");
        }
        /// <summary>
        /// Serializes the object to JSON.
        /// </summary>
        /// <param name="writer">The <see cref="T: Newtonsoft.Json.JsonWriter" /> to write to.</param>
        /// <param name="obj">The object to serialize to JSON.</param>
        internal static void Serialize(JsonWriter writer, ServiceUpdateDescription obj)
        {
            var kind = obj.ServiceKind;

            if (kind.Equals(ServiceKind.Stateful))
            {
                StatefulServiceUpdateDescriptionConverter.Serialize(writer, (StatefulServiceUpdateDescription)obj);
            }
            else if (kind.Equals(ServiceKind.Stateless))
            {
                StatelessServiceUpdateDescriptionConverter.Serialize(writer, (StatelessServiceUpdateDescription)obj);
            }
            else
            {
                throw new InvalidOperationException("Unknown ServiceKind.");
            }
        }
        /// <inheritdoc />
        public Task UpdateServiceAsync(
            string serviceId,
            ServiceUpdateDescription serviceUpdateDescription,
            long?serverTimeout = 60,
            CancellationToken cancellationToken = default(CancellationToken))
        {
            serviceId.ThrowIfNull(nameof(serviceId));
            serviceUpdateDescription.ThrowIfNull(nameof(serviceUpdateDescription));
            serverTimeout?.ThrowIfOutOfInclusiveRange("serverTimeout", 1, 4294967295);
            var requestId = Guid.NewGuid().ToString();
            var url       = "Services/{serviceId}/$/Update";

            url = url.Replace("{serviceId}", serviceId);
            var queryParams = new List <string>();

            // Append to queryParams if not null.
            serverTimeout?.AddToQueryParameters(queryParams, $"timeout={serverTimeout}");
            queryParams.Add("api-version=6.0");
            url += "?" + string.Join("&", queryParams);

            string content;

            using (var sw = new StringWriter())
            {
                ServiceUpdateDescriptionConverter.Serialize(new JsonTextWriter(sw), serviceUpdateDescription);
                content = sw.ToString();
            }

            HttpRequestMessage RequestFunc()
            {
                var request = new HttpRequestMessage()
                {
                    Method  = HttpMethod.Post,
                    Content = new StringContent(content, Encoding.UTF8),
                };

                request.Content.Headers.ContentType = System.Net.Http.Headers.MediaTypeHeaderValue.Parse("application/json; charset=utf-8");
                return(request);
            }

            return(this.httpClient.SendAsync(RequestFunc, url, requestId, cancellationToken));
        }
예제 #7
0
 protected ServiceGroupUpdateDescription GetServiceGroupUpdateDescription(
     ServiceUpdateDescription updateDescription)
 {
     return(new ServiceGroupUpdateDescription(updateDescription));
 }
예제 #8
0
 /// <summary>
 /// <para>Initializes a new instance of the <see cref="System.Fabric.Description.ServiceGroupUpdateDescription" /> class from the specified
 /// <see cref="System.Fabric.Description.ServiceUpdateDescription" />.</para>
 /// </summary>
 /// <param name="updateDescription">
 /// <para>The <see cref="System.Fabric.Description.ServiceUpdateDescription" /> that will be used to create the
 /// <see cref="System.Fabric.Description.ServiceGroupUpdateDescription" /></para>
 /// </param>
 public ServiceGroupUpdateDescription(ServiceUpdateDescription updateDescription)
 {
     this.ServiceUpdateDescription = updateDescription;
 }