public async Task UpdateServiceDescriptionAsync(Uri serviceName, ServiceRuntimeDescription description, TimeSpan timeout, CancellationToken cancellationToken) { if (serviceName == null || description == null) { return; } var updateDesc = new StatefulServiceUpdateDescription() { MinReplicaSetSize = description.MinReplicaSetSize, TargetReplicaSetSize = description.TargetReplicaSetSize, PlacementConstraints = description.PlacementConstraints }; Trace.WriteInfo( TraceType, "Calling UpdateServiceDescription for {0}. TargetReplicaSetSize={1}, MinReplicaSetSize={2}. PlacementConstraints={3}", serviceName, updateDesc.TargetReplicaSetSize, updateDesc.MinReplicaSetSize, updateDesc.PlacementConstraints ?? "null"); var timeoutHelper = new TimeoutHelper(timeout, Constants.MaxOperationTimeout); await FabricClientRetryHelper.ExecuteFabricActionWithRetryAsync( () => this.FabricClient.ServiceManager.UpdateServiceAsync(serviceName, updateDesc, timeoutHelper.GetOperationTimeout(), cancellationToken), timeoutHelper.GetOperationTimeout(), cancellationToken); }
/// <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!"); }
protected override void ProcessRecord() { ServiceGroupUpdateDescription serviceGroupUpdateDescription = new ServiceGroupUpdateDescription(); if (this.Stateful) { var statefulServiceUpdateDescription = new StatefulServiceUpdateDescription(); if (this.TargetReplicaSetSize.HasValue) { statefulServiceUpdateDescription.TargetReplicaSetSize = this.TargetReplicaSetSize.Value; } if (this.MinReplicaSetSize.HasValue) { statefulServiceUpdateDescription.MinReplicaSetSize = this.MinReplicaSetSize.Value; } if (this.ReplicaRestartWaitDuration.HasValue) { statefulServiceUpdateDescription.ReplicaRestartWaitDuration = this.ReplicaRestartWaitDuration.Value; } if (this.QuorumLossWaitDuration.HasValue) { statefulServiceUpdateDescription.QuorumLossWaitDuration = this.QuorumLossWaitDuration.Value; } serviceGroupUpdateDescription.ServiceUpdateDescription = statefulServiceUpdateDescription; } else { var statelessServiceUpdateDescription = new StatelessServiceUpdateDescription(); if (this.InstanceCount.HasValue) { statelessServiceUpdateDescription.InstanceCount = this.InstanceCount.Value; } serviceGroupUpdateDescription.ServiceUpdateDescription = statelessServiceUpdateDescription; } if (this.ShouldProcess(this.ServiceName.OriginalString)) { if (this.Force || this.ShouldContinue(string.Empty, string.Empty)) { this.UpdateServiceGroup(this.ServiceName, serviceGroupUpdateDescription); } } }
public async Task UpdateServiceDescriptionAsync(Uri serviceName, ReplicaSetSize replicaSetSize, TimeSpan timeout, CancellationToken cancellationToken) { var updateDesc = new StatefulServiceUpdateDescription() { MinReplicaSetSize = replicaSetSize.MinReplicaSetSize, TargetReplicaSetSize = replicaSetSize.TargetReplicaSetSize }; Trace.WriteInfo( TraceType, "Calling UpdateServiceDescription for {0}. Target={1}, Min={2}.", serviceName, updateDesc.TargetReplicaSetSize, updateDesc.MinReplicaSetSize); var timeoutHelper = new TimeoutHelper(timeout, Constants.MaxOperationTimeout); await FabricClientRetryHelper.ExecuteFabricActionWithRetryAsync( () => this.FabricClient.ServiceManager.UpdateServiceAsync(serviceName, updateDesc, timeoutHelper.GetOperationTimeout(), cancellationToken), timeoutHelper.GetOperationTimeout(), cancellationToken); }
/// <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, StatefulServiceUpdateDescription obj) { // Required properties are always serialized, optional properties are serialized when not null. writer.WriteStartObject(); writer.WriteProperty(obj.ServiceKind.ToString(), "ServiceKind", JsonWriterExtensions.WriteStringValue); writer.WriteProperty(obj.DefaultMoveCost, "DefaultMoveCost", MoveCostConverter.Serialize); if (obj.Flags != null) { writer.WriteProperty(obj.Flags, "Flags", JsonWriterExtensions.WriteStringValue); } if (obj.PlacementConstraints != null) { writer.WriteProperty(obj.PlacementConstraints, "PlacementConstraints", JsonWriterExtensions.WriteStringValue); } if (obj.CorrelationScheme != null) { writer.WriteEnumerableProperty(obj.CorrelationScheme, "CorrelationScheme", ServiceCorrelationDescriptionConverter.Serialize); } if (obj.LoadMetrics != null) { writer.WriteEnumerableProperty(obj.LoadMetrics, "LoadMetrics", ServiceLoadMetricDescriptionConverter.Serialize); } if (obj.ServicePlacementPolicies != null) { writer.WriteEnumerableProperty(obj.ServicePlacementPolicies, "ServicePlacementPolicies", ServicePlacementPolicyDescriptionConverter.Serialize); } if (obj.ScalingPolicies != null) { writer.WriteEnumerableProperty(obj.ScalingPolicies, "ScalingPolicies", ScalingPolicyDescriptionConverter.Serialize); } if (obj.TargetReplicaSetSize != null) { writer.WriteProperty(obj.TargetReplicaSetSize, "TargetReplicaSetSize", JsonWriterExtensions.WriteIntValue); } if (obj.MinReplicaSetSize != null) { writer.WriteProperty(obj.MinReplicaSetSize, "MinReplicaSetSize", JsonWriterExtensions.WriteIntValue); } if (obj.ReplicaRestartWaitDurationSeconds != null) { writer.WriteProperty(obj.ReplicaRestartWaitDurationSeconds, "ReplicaRestartWaitDurationSeconds", JsonWriterExtensions.WriteStringValue); } if (obj.QuorumLossWaitDurationSeconds != null) { writer.WriteProperty(obj.QuorumLossWaitDurationSeconds, "QuorumLossWaitDurationSeconds", JsonWriterExtensions.WriteStringValue); } if (obj.StandByReplicaKeepDurationSeconds != null) { writer.WriteProperty(obj.StandByReplicaKeepDurationSeconds, "StandByReplicaKeepDurationSeconds", JsonWriterExtensions.WriteStringValue); } writer.WriteEndObject(); }
/// <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, StatefulServiceUpdateDescription obj) { // Required properties are always serialized, optional properties are serialized when not null. writer.WriteStartObject(); writer.WriteProperty(obj.ServiceKind, "ServiceKind", ServiceKindConverter.Serialize); writer.WriteProperty(obj.DefaultMoveCost, "DefaultMoveCost", MoveCostConverter.Serialize); if (obj.Flags != null) { writer.WriteProperty(obj.Flags, "Flags", JsonWriterExtensions.WriteStringValue); } if (obj.PlacementConstraints != null) { writer.WriteProperty(obj.PlacementConstraints, "PlacementConstraints", JsonWriterExtensions.WriteStringValue); } if (obj.CorrelationScheme != null) { writer.WriteEnumerableProperty(obj.CorrelationScheme, "CorrelationScheme", ServiceCorrelationDescriptionConverter.Serialize); } if (obj.LoadMetrics != null) { writer.WriteEnumerableProperty(obj.LoadMetrics, "LoadMetrics", ServiceLoadMetricDescriptionConverter.Serialize); } if (obj.ServicePlacementPolicies != null) { writer.WriteEnumerableProperty(obj.ServicePlacementPolicies, "ServicePlacementPolicies", ServicePlacementPolicyDescriptionConverter.Serialize); } if (obj.ScalingPolicies != null) { writer.WriteEnumerableProperty(obj.ScalingPolicies, "ScalingPolicies", ScalingPolicyDescriptionConverter.Serialize); } if (obj.ServiceDnsName != null) { writer.WriteProperty(obj.ServiceDnsName, "ServiceDnsName", JsonWriterExtensions.WriteStringValue); } if (obj.TagsForPlacement != null) { writer.WriteProperty(obj.TagsForPlacement, "TagsForPlacement", NodeTagsDescriptionConverter.Serialize); } if (obj.TagsForRunning != null) { writer.WriteProperty(obj.TagsForRunning, "TagsForRunning", NodeTagsDescriptionConverter.Serialize); } if (obj.TargetReplicaSetSize != null) { writer.WriteProperty(obj.TargetReplicaSetSize, "TargetReplicaSetSize", JsonWriterExtensions.WriteIntValue); } if (obj.MinReplicaSetSize != null) { writer.WriteProperty(obj.MinReplicaSetSize, "MinReplicaSetSize", JsonWriterExtensions.WriteIntValue); } if (obj.ReplicaRestartWaitDurationSeconds != null) { writer.WriteProperty(obj.ReplicaRestartWaitDurationSeconds, "ReplicaRestartWaitDurationSeconds", JsonWriterExtensions.WriteStringValue); } if (obj.QuorumLossWaitDurationSeconds != null) { writer.WriteProperty(obj.QuorumLossWaitDurationSeconds, "QuorumLossWaitDurationSeconds", JsonWriterExtensions.WriteStringValue); } if (obj.StandByReplicaKeepDurationSeconds != null) { writer.WriteProperty(obj.StandByReplicaKeepDurationSeconds, "StandByReplicaKeepDurationSeconds", JsonWriterExtensions.WriteStringValue); } if (obj.ServicePlacementTimeLimitSeconds != null) { writer.WriteProperty(obj.ServicePlacementTimeLimitSeconds, "ServicePlacementTimeLimitSeconds", JsonWriterExtensions.WriteStringValue); } if (obj.DropSourceReplicaOnMove != null) { writer.WriteProperty(obj.DropSourceReplicaOnMove, "DropSourceReplicaOnMove", JsonWriterExtensions.WriteBoolValue); } if (obj.ReplicaLifecycleDescription != null) { writer.WriteProperty(obj.ReplicaLifecycleDescription, "ReplicaLifecycleDescription", ReplicaLifecycleDescriptionConverter.Serialize); } if (obj.AuxiliaryReplicaCount != null) { writer.WriteProperty(obj.AuxiliaryReplicaCount, "AuxiliaryReplicaCount", JsonWriterExtensions.WriteIntValue); } writer.WriteEndObject(); }
protected StatefulServiceUpdateDescription GetStatefulServiceUpdateDescription( int?targetReplicaSetSize, int?minReplicaSetSize, TimeSpan?replicaRestartWaitDuration, TimeSpan?quorumLossWaitDuration, TimeSpan?standByReplicaKeepDuration, string[] metrics, string[] correlations, string[] placementPolicies, string placementConstraints, string defaultMoveCost, string[] partitionNamesToAdd, string[] partitionNamesToRemove, List <ScalingPolicyDescription> scalingPolicies) { var statefulServiceUpdateDescription = new StatefulServiceUpdateDescription(); if (targetReplicaSetSize.HasValue) { statefulServiceUpdateDescription.TargetReplicaSetSize = targetReplicaSetSize.Value; } if (minReplicaSetSize.HasValue) { statefulServiceUpdateDescription.MinReplicaSetSize = minReplicaSetSize.Value; } if (replicaRestartWaitDuration.HasValue) { statefulServiceUpdateDescription.ReplicaRestartWaitDuration = replicaRestartWaitDuration.Value; } if (quorumLossWaitDuration.HasValue) { statefulServiceUpdateDescription.QuorumLossWaitDuration = quorumLossWaitDuration.Value; } if (standByReplicaKeepDuration.HasValue) { statefulServiceUpdateDescription.StandByReplicaKeepDuration = standByReplicaKeepDuration.Value; } if (placementConstraints != null) { statefulServiceUpdateDescription.PlacementConstraints = placementConstraints; } if (metrics != null) { statefulServiceUpdateDescription.Metrics = new KeyedItemCollection <string, ServiceLoadMetricDescription>(d => d.Name); foreach (var str in metrics) { statefulServiceUpdateDescription.Metrics.Add(ServiceCmdletBase.ParseStatefulMetric(str)); } } if (defaultMoveCost != null) { statefulServiceUpdateDescription.DefaultMoveCost = ServiceCmdletBase.ParseMoveCost(defaultMoveCost); } if (correlations != null) { statefulServiceUpdateDescription.Correlations = new List <ServiceCorrelationDescription>(); foreach (var str in correlations) { statefulServiceUpdateDescription.Correlations.Add(ServiceCmdletBase.ParseCorrelation(str)); } } if (placementPolicies != null) { statefulServiceUpdateDescription.PlacementPolicies = new List <ServicePlacementPolicyDescription>(); foreach (var str in placementPolicies) { statefulServiceUpdateDescription.PlacementPolicies.Add(ServiceCmdletBase.ParsePlacementPolicy(str)); } } if ((partitionNamesToAdd != null && partitionNamesToAdd.Length > 0) || (partitionNamesToRemove != null && partitionNamesToRemove.Length > 0)) { statefulServiceUpdateDescription.RepartitionDescription = new NamedRepartitionDescription( partitionNamesToAdd, partitionNamesToRemove); } if (scalingPolicies != null) { statefulServiceUpdateDescription.ScalingPolicies = new List <ScalingPolicyDescription>(); foreach (var scale in scalingPolicies) { statefulServiceUpdateDescription.ScalingPolicies.Add(scale); } } return(statefulServiceUpdateDescription); }
private ServiceUpdateDescription CreateServiceUpdateDescription(ServiceOperationDescription serviceOperationDescription) { string errorMessage; ServiceUpdateDescription serviceUpdateDescription; switch (serviceOperationDescription.ServiceKind) { case ArmServiceKind.Stateful: if (!this.ValidObjectType <StatefulServiceOperationDescription>(serviceOperationDescription, out errorMessage)) { throw new InvalidCastException(errorMessage); } var statefulOperation = (StatefulServiceOperationDescription)serviceOperationDescription; serviceUpdateDescription = new StatefulServiceUpdateDescription() { MinReplicaSetSize = statefulOperation.MinReplicaSetSize, QuorumLossWaitDuration = statefulOperation.QuorumLossWaitDuration, ReplicaRestartWaitDuration = statefulOperation.ReplicaRestartWaitDuration, StandByReplicaKeepDuration = statefulOperation.StandByReplicaKeepDuration, TargetReplicaSetSize = statefulOperation.TargetReplicaSetSize }; break; case ArmServiceKind.Stateless: if (!this.ValidObjectType <StatelessServiceOperationDescription>(serviceOperationDescription, out errorMessage)) { throw new InvalidCastException(errorMessage); } var statelessOperation = (StatelessServiceOperationDescription)serviceOperationDescription; serviceUpdateDescription = new StatelessServiceUpdateDescription() { InstanceCount = statelessOperation.InstanceCount }; break; default: throw new ArgumentOutOfRangeException( nameof(serviceOperationDescription.ServiceKind), serviceOperationDescription.ServiceKind, $"{this.TraceType}: Unexpected ArmServiceKind"); } if (serviceOperationDescription.DefaultMoveCost.HasValue) { serviceUpdateDescription.DefaultMoveCost = (MoveCost)Enum.Parse( typeof(MoveCost), serviceOperationDescription.DefaultMoveCost.Value.ToString()); } serviceUpdateDescription.PlacementConstraints = serviceOperationDescription.PlacementConstraints; if (serviceOperationDescription.CorrelationScheme != null) { serviceUpdateDescription.Correlations = new List <ServiceCorrelationDescription>(); foreach (var scheme in serviceOperationDescription.CorrelationScheme) { serviceUpdateDescription.Correlations.Add(this.GetServiceCorrelationDescription(scheme)); } } if (serviceOperationDescription.ServiceLoadMetrics != null) { serviceUpdateDescription.Metrics = new KeyedItemCollection <string, ServiceLoadMetricDescription>(n => n.Name); foreach (var metric in serviceOperationDescription.ServiceLoadMetrics) { serviceUpdateDescription.Metrics.Add(this.GetServiceLoadMetricDescription(metric)); } } if (serviceOperationDescription.ServicePlacementPolicies != null) { serviceUpdateDescription.PlacementPolicies = new List <ServicePlacementPolicyDescription>(); foreach (var policy in serviceOperationDescription.ServicePlacementPolicies) { serviceUpdateDescription.PlacementPolicies.Add(this.GetServicePlacementPolicyDescription(policy)); } } return(serviceUpdateDescription); }