Пример #1
0
 /// <summary>
 /// Initializes a new instance of the StatefulServiceDescription class.
 /// </summary>
 /// <param name="serviceName">The full name of the service with 'fabric:' URI scheme.</param>
 /// <param name="serviceTypeName">Name of the service type as specified in the service manifest.</param>
 /// <param name="partitionDescription">The partition description as an object.</param>
 /// <param name="targetReplicaSetSize">The target replica set size as a number.</param>
 /// <param name="minReplicaSetSize">The minimum replica set size as a number.</param>
 /// <param name="hasPersistedState">A flag indicating whether this is a persistent service which stores states on the
 /// local disk. If it is then the value of this property is true, if not it is false.</param>
 /// <param name="applicationName">The name of the application, including the 'fabric:' URI scheme.</param>
 /// <param name="initializationData">The initialization data as an array of bytes. Initialization data is passed to
 /// service instances or replicas when they are created.</param>
 /// <param name="placementConstraints">The placement constraints as a string. Placement constraints are boolean
 /// expressions on node properties and allow for restricting a service to particular nodes based on the service
 /// requirements. For example, to place a service on nodes where NodeType is blue specify the following: "NodeColor ==
 /// blue)".</param>
 /// <param name="correlationScheme">The correlation scheme.</param>
 /// <param name="serviceLoadMetrics">The service load metrics.</param>
 /// <param name="servicePlacementPolicies">The service placement policies.</param>
 /// <param name="defaultMoveCost">The move cost for the service. Possible values include: 'Zero', 'Low', 'Medium',
 /// 'High', 'VeryHigh'
 ///
 /// Specifies the move cost for the service.
 /// </param>
 /// <param name="isDefaultMoveCostSpecified">Indicates if the DefaultMoveCost property is specified.</param>
 /// <param name="servicePackageActivationMode">The activation mode of service package to be used for a service.
 /// Possible values include: 'SharedProcess', 'ExclusiveProcess'
 ///
 /// The activation mode of service package to be used for a Service Fabric service. This is specified at the time of
 /// creating the Service.
 /// </param>
 /// <param name="serviceDnsName">The DNS name of the service. It requires the DNS system service to be enabled in
 /// Service Fabric cluster.</param>
 /// <param name="scalingPolicies">Scaling policies for this service.</param>
 /// <param name="flags">Flags indicating whether other properties are set. Each of the associated properties
 /// corresponds to a flag, specified below, which, if set, indicate that the property is specified.
 /// This property can be a combination of those flags obtained using bitwise 'OR' operator.
 /// For example, if the provided value is 6 then the flags for QuorumLossWaitDuration (2) and
 /// StandByReplicaKeepDuration(4) are set.
 ///
 /// - None - Does not indicate any other properties are set. The value is zero.
 /// - ReplicaRestartWaitDuration - Indicates the ReplicaRestartWaitDuration property is set. The value is 1.
 /// - QuorumLossWaitDuration - Indicates the QuorumLossWaitDuration property is set. The value is 2.
 /// - StandByReplicaKeepDuration - Indicates the StandByReplicaKeepDuration property is set. The value is 4.
 /// - ServicePlacementTimeLimit - Indicates the ServicePlacementTimeLimit property is set. The value is 8.
 /// - DropSourceReplicaOnMove - Indicates the DropSourceReplicaOnMove property is set. The value is 16.
 /// </param>
 /// <param name="replicaRestartWaitDurationSeconds">The duration, in seconds, between when a replica goes down and when
 /// a new replica is created.</param>
 /// <param name="quorumLossWaitDurationSeconds">The maximum duration, in seconds, for which a partition is allowed to
 /// be in a state of quorum loss.</param>
 /// <param name="standByReplicaKeepDurationSeconds">The definition on how long StandBy replicas should be maintained
 /// before being removed.</param>
 /// <param name="servicePlacementTimeLimitSeconds">The duration for which replicas can stay InBuild before reporting
 /// that build is stuck.</param>
 /// <param name="dropSourceReplicaOnMove">Indicates whether to drop source Secondary replica even if the target replica
 /// has not finished build. If desired behavior is to drop it as soon as possible the value of this property is true,
 /// if not it is false.</param>
 public StatefulServiceDescription(
     ServiceName serviceName,
     string serviceTypeName,
     PartitionSchemeDescription partitionDescription,
     int?targetReplicaSetSize,
     int?minReplicaSetSize,
     bool?hasPersistedState,
     ApplicationName applicationName = default(ApplicationName),
     byte[] initializationData       = default(byte[]),
     string placementConstraints     = default(string),
     IEnumerable <ServiceCorrelationDescription> correlationScheme            = default(IEnumerable <ServiceCorrelationDescription>),
     IEnumerable <ServiceLoadMetricDescription> serviceLoadMetrics            = default(IEnumerable <ServiceLoadMetricDescription>),
     IEnumerable <ServicePlacementPolicyDescription> servicePlacementPolicies = default(IEnumerable <ServicePlacementPolicyDescription>),
     MoveCost?defaultMoveCost        = default(MoveCost?),
     bool?isDefaultMoveCostSpecified = default(bool?),
     ServicePackageActivationMode?servicePackageActivationMode = default(ServicePackageActivationMode?),
     string serviceDnsName = default(string),
     IEnumerable <ScalingPolicyDescription> scalingPolicies = default(IEnumerable <ScalingPolicyDescription>),
     int?flags = default(int?),
     long?replicaRestartWaitDurationSeconds = default(long?),
     long?quorumLossWaitDurationSeconds     = default(long?),
     long?standByReplicaKeepDurationSeconds = default(long?),
     long?servicePlacementTimeLimitSeconds  = default(long?),
     bool?dropSourceReplicaOnMove           = default(bool?))
     : base(
         serviceName,
         serviceTypeName,
         partitionDescription,
         Common.ServiceKind.Stateful,
         applicationName,
         initializationData,
         placementConstraints,
         correlationScheme,
         serviceLoadMetrics,
         servicePlacementPolicies,
         defaultMoveCost,
         isDefaultMoveCostSpecified,
         servicePackageActivationMode,
         serviceDnsName,
         scalingPolicies)
 {
     targetReplicaSetSize.ThrowIfNull(nameof(targetReplicaSetSize));
     minReplicaSetSize.ThrowIfNull(nameof(minReplicaSetSize));
     hasPersistedState.ThrowIfNull(nameof(hasPersistedState));
     targetReplicaSetSize?.ThrowIfLessThan("targetReplicaSetSize", 1);
     minReplicaSetSize?.ThrowIfLessThan("minReplicaSetSize", 1);
     replicaRestartWaitDurationSeconds?.ThrowIfOutOfInclusiveRange("replicaRestartWaitDurationSeconds", 0, 4294967295);
     quorumLossWaitDurationSeconds?.ThrowIfOutOfInclusiveRange("quorumLossWaitDurationSeconds", 0, 4294967295);
     standByReplicaKeepDurationSeconds?.ThrowIfOutOfInclusiveRange("standByReplicaKeepDurationSeconds", 0, 4294967295);
     servicePlacementTimeLimitSeconds?.ThrowIfOutOfInclusiveRange("servicePlacementTimeLimitSeconds", 0, 4294967295);
     this.TargetReplicaSetSize = targetReplicaSetSize;
     this.MinReplicaSetSize    = minReplicaSetSize;
     this.HasPersistedState    = hasPersistedState;
     this.Flags = flags;
     this.ReplicaRestartWaitDurationSeconds = replicaRestartWaitDurationSeconds;
     this.QuorumLossWaitDurationSeconds     = quorumLossWaitDurationSeconds;
     this.StandByReplicaKeepDurationSeconds = standByReplicaKeepDurationSeconds;
     this.ServicePlacementTimeLimitSeconds  = servicePlacementTimeLimitSeconds;
     this.DropSourceReplicaOnMove           = dropSourceReplicaOnMove;
 }
 /// <summary>
 /// Initializes a new instance of the StatelessServiceDescription class.
 /// </summary>
 /// <param name="serviceName">The full name of the service with 'fabric:' URI scheme.</param>
 /// <param name="serviceTypeName">Name of the service type as specified in the service manifest.</param>
 /// <param name="partitionDescription">The partition description as an object.</param>
 /// <param name="instanceCount">The instance count.</param>
 /// <param name="applicationName">The name of the application, including the 'fabric:' URI scheme.</param>
 /// <param name="initializationData">The initialization data as an array of bytes. Initialization data is passed to
 /// service instances or replicas when they are created.</param>
 /// <param name="placementConstraints">The placement constraints as a string. Placement constraints are boolean
 /// expressions on node properties and allow for restricting a service to particular nodes based on the service
 /// requirements. For example, to place a service on nodes where NodeType is blue specify the following: "NodeColor ==
 /// blue)".</param>
 /// <param name="correlationScheme">The correlation scheme.</param>
 /// <param name="serviceLoadMetrics">The service load metrics.</param>
 /// <param name="servicePlacementPolicies">The service placement policies.</param>
 /// <param name="defaultMoveCost">The move cost for the service. Possible values include: 'Zero', 'Low', 'Medium',
 /// 'High', 'VeryHigh'
 ///
 /// Specifies the move cost for the service.
 /// </param>
 /// <param name="isDefaultMoveCostSpecified">Indicates if the DefaultMoveCost property is specified.</param>
 /// <param name="servicePackageActivationMode">The activation mode of service package to be used for a service.
 /// Possible values include: 'SharedProcess', 'ExclusiveProcess'
 ///
 /// The activation mode of service package to be used for a Service Fabric service. This is specified at the time of
 /// creating the Service.
 /// </param>
 /// <param name="serviceDnsName">The DNS name of the service. It requires the DNS system service to be enabled in
 /// Service Fabric cluster.</param>
 /// <param name="scalingPolicies">Scaling policies for this service.</param>
 /// <param name="tagsRequiredToPlace">Tags for placement of this service.</param>
 /// <param name="tagsRequiredToRun">Tags for running of this service.</param>
 /// <param name="minInstanceCount">MinInstanceCount is the minimum number of instances that must be up to meet the
 /// EnsureAvailability safety check during operations like upgrade or deactivate node.
 /// The actual number that is used is max( MinInstanceCount, ceil( MinInstancePercentage/100.0 * InstanceCount) ).
 /// Note, if InstanceCount is set to -1, during MinInstanceCount computation -1 is first converted into the number of
 /// nodes on which the instances are allowed to be placed according to the placement constraints on the service.
 /// </param>
 /// <param name="minInstancePercentage">MinInstancePercentage is the minimum percentage of InstanceCount that must be
 /// up to meet the EnsureAvailability safety check during operations like upgrade or deactivate node.
 /// The actual number that is used is max( MinInstanceCount, ceil( MinInstancePercentage/100.0 * InstanceCount) ).
 /// Note, if InstanceCount is set to -1, during MinInstancePercentage computation, -1 is first converted into the
 /// number of nodes on which the instances are allowed to be placed according to the placement constraints on the
 /// service.
 /// </param>
 /// <param name="flags">Flags indicating whether other properties are set. Each of the associated properties
 /// corresponds to a flag, specified below, which, if set, indicate that the property is specified.
 /// This property can be a combination of those flags obtained using bitwise 'OR' operator.
 /// For example, if the provided value is 1 then the flags for InstanceCloseDelayDuration is set.
 ///
 /// - None - Does not indicate any other properties are set. The value is zero.
 /// - InstanceCloseDelayDuration - Indicates the InstanceCloseDelayDuration property is set. The value is 1.
 /// - InstanceRestartWaitDuration - Indicates the InstanceRestartWaitDurationSeconds property is set. The value is 2.
 /// </param>
 /// <param name="instanceCloseDelayDurationSeconds">Duration in seconds, to wait before a stateless instance is closed,
 /// to allow the active requests to drain gracefully. This would be effective when the instance is closing during the
 /// application/cluster upgrade and disabling node.
 /// The endpoint exposed on this instance is removed prior to starting the delay, which prevents new connections to
 /// this instance.
 /// In addition, clients that have subscribed to service endpoint change
 /// events(https://docs.microsoft.com/dotnet/api/system.fabric.fabricclient.servicemanagementclient.registerservicenotificationfilterasync),
 /// can do
 /// the following upon receiving the endpoint removal notification:
 /// - Stop sending new requests to this instance.
 /// - Close existing connections after in-flight requests have completed.
 /// - Connect to a different instance of the service partition for future requests.
 /// Note, the default value of InstanceCloseDelayDuration is 0, which indicates that there won't be any delay or
 /// removal of the endpoint prior to closing the instance.
 /// </param>
 /// <param name="instanceLifecycleDescription">Defines how instances of this service will behave during their
 /// lifecycle.</param>
 /// <param name="instanceRestartWaitDurationSeconds">When a stateless instance goes down, this timer starts. When it
 /// expires Service Fabric will create a new instance on any node in the cluster.
 /// This configuration is to reduce unnecessary creation of a new instance in situations where the instance going down
 /// is likely to recover in a short time. For example, during an upgrade.
 /// The default value is 0, which indicates that when stateless instance goes down, Service Fabric will immediately
 /// start building its replacement.
 /// </param>
 public StatelessServiceDescription(
     ServiceName serviceName,
     string serviceTypeName,
     PartitionSchemeDescription partitionDescription,
     int?instanceCount,
     ApplicationName applicationName = default(ApplicationName),
     byte[] initializationData       = default(byte[]),
     string placementConstraints     = default(string),
     IEnumerable <ServiceCorrelationDescription> correlationScheme            = default(IEnumerable <ServiceCorrelationDescription>),
     IEnumerable <ServiceLoadMetricDescription> serviceLoadMetrics            = default(IEnumerable <ServiceLoadMetricDescription>),
     IEnumerable <ServicePlacementPolicyDescription> servicePlacementPolicies = default(IEnumerable <ServicePlacementPolicyDescription>),
     MoveCost?defaultMoveCost        = default(MoveCost?),
     bool?isDefaultMoveCostSpecified = default(bool?),
     ServicePackageActivationMode?servicePackageActivationMode = default(ServicePackageActivationMode?),
     string serviceDnsName = default(string),
     IEnumerable <ScalingPolicyDescription> scalingPolicies = default(IEnumerable <ScalingPolicyDescription>),
     NodeTagsDescription tagsRequiredToPlace = default(NodeTagsDescription),
     NodeTagsDescription tagsRequiredToRun   = default(NodeTagsDescription),
     int?minInstanceCount      = default(int?),
     int?minInstancePercentage = default(int?),
     int?flags = default(int?),
     long?instanceCloseDelayDurationSeconds = default(long?),
     InstanceLifecycleDescription instanceLifecycleDescription = default(InstanceLifecycleDescription),
     long?instanceRestartWaitDurationSeconds = default(long?))
     : base(
         serviceName,
         serviceTypeName,
         partitionDescription,
         Common.ServiceKind.Stateless,
         applicationName,
         initializationData,
         placementConstraints,
         correlationScheme,
         serviceLoadMetrics,
         servicePlacementPolicies,
         defaultMoveCost,
         isDefaultMoveCostSpecified,
         servicePackageActivationMode,
         serviceDnsName,
         scalingPolicies,
         tagsRequiredToPlace,
         tagsRequiredToRun)
 {
     instanceCount.ThrowIfNull(nameof(instanceCount));
     instanceCount?.ThrowIfLessThan("instanceCount", -1);
     instanceCloseDelayDurationSeconds?.ThrowIfOutOfInclusiveRange("instanceCloseDelayDurationSeconds", 0, 4294967295);
     instanceRestartWaitDurationSeconds?.ThrowIfOutOfInclusiveRange("instanceRestartWaitDurationSeconds", 0, 4294967295);
     this.InstanceCount         = instanceCount;
     this.MinInstanceCount      = minInstanceCount;
     this.MinInstancePercentage = minInstancePercentage;
     this.Flags = flags;
     this.InstanceCloseDelayDurationSeconds  = instanceCloseDelayDurationSeconds;
     this.InstanceLifecycleDescription       = instanceLifecycleDescription;
     this.InstanceRestartWaitDurationSeconds = instanceRestartWaitDurationSeconds;
 }
 /// <summary>
 /// Initializes a new instance of the ServiceDescription class.
 /// </summary>
 /// <param name="serviceName">The full name of the service with 'fabric:' URI scheme.</param>
 /// <param name="serviceTypeName">Name of the service type as specified in the service manifest.</param>
 /// <param name="partitionDescription">The partition description as an object.</param>
 /// <param name="serviceKind">The kind of service (Stateless or Stateful).</param>
 /// <param name="applicationName">The name of the application, including the 'fabric:' URI scheme.</param>
 /// <param name="initializationData">The initialization data as an array of bytes. Initialization data is passed to
 /// service instances or replicas when they are created.</param>
 /// <param name="placementConstraints">The placement constraints as a string. Placement constraints are boolean
 /// expressions on node properties and allow for restricting a service to particular nodes based on the service
 /// requirements. For example, to place a service on nodes where NodeType is blue specify the following: "NodeColor ==
 /// blue)".</param>
 /// <param name="correlationScheme">The correlation scheme.</param>
 /// <param name="serviceLoadMetrics">The service load metrics.</param>
 /// <param name="servicePlacementPolicies">The service placement policies.</param>
 /// <param name="defaultMoveCost">The move cost for the service. Possible values include: 'Zero', 'Low', 'Medium',
 /// 'High', 'VeryHigh'
 ///
 /// Specifies the move cost for the service.
 /// </param>
 /// <param name="isDefaultMoveCostSpecified">Indicates if the DefaultMoveCost property is specified.</param>
 /// <param name="servicePackageActivationMode">The activation mode of service package to be used for a service.
 /// Possible values include: 'SharedProcess', 'ExclusiveProcess'
 ///
 /// The activation mode of service package to be used for a Service Fabric service. This is specified at the time of
 /// creating the Service.
 /// </param>
 /// <param name="serviceDnsName">The DNS name of the service. It requires the DNS system service to be enabled in
 /// Service Fabric cluster.</param>
 /// <param name="scalingPolicies">Scaling policies for this service.</param>
 /// <param name="tagsRequiredToPlace">Tags for placement of this service.</param>
 /// <param name="tagsRequiredToRun">Tags for running of this service.</param>
 protected ServiceDescription(
     ServiceName serviceName,
     string serviceTypeName,
     PartitionSchemeDescription partitionDescription,
     ServiceKind?serviceKind,
     ApplicationName applicationName = default(ApplicationName),
     byte[] initializationData       = default(byte[]),
     string placementConstraints     = default(string),
     IEnumerable <ServiceCorrelationDescription> correlationScheme            = default(IEnumerable <ServiceCorrelationDescription>),
     IEnumerable <ServiceLoadMetricDescription> serviceLoadMetrics            = default(IEnumerable <ServiceLoadMetricDescription>),
     IEnumerable <ServicePlacementPolicyDescription> servicePlacementPolicies = default(IEnumerable <ServicePlacementPolicyDescription>),
     MoveCost?defaultMoveCost        = default(MoveCost?),
     bool?isDefaultMoveCostSpecified = default(bool?),
     ServicePackageActivationMode?servicePackageActivationMode = default(ServicePackageActivationMode?),
     string serviceDnsName = default(string),
     IEnumerable <ScalingPolicyDescription> scalingPolicies = default(IEnumerable <ScalingPolicyDescription>),
     NodeTagsDescription tagsRequiredToPlace = default(NodeTagsDescription),
     NodeTagsDescription tagsRequiredToRun   = default(NodeTagsDescription))
 {
     serviceName.ThrowIfNull(nameof(serviceName));
     serviceTypeName.ThrowIfNull(nameof(serviceTypeName));
     partitionDescription.ThrowIfNull(nameof(partitionDescription));
     serviceKind.ThrowIfNull(nameof(serviceKind));
     this.ServiceName                  = serviceName;
     this.ServiceTypeName              = serviceTypeName;
     this.PartitionDescription         = partitionDescription;
     this.ServiceKind                  = serviceKind;
     this.ApplicationName              = applicationName;
     this.InitializationData           = initializationData;
     this.PlacementConstraints         = placementConstraints;
     this.CorrelationScheme            = correlationScheme;
     this.ServiceLoadMetrics           = serviceLoadMetrics;
     this.ServicePlacementPolicies     = servicePlacementPolicies;
     this.DefaultMoveCost              = defaultMoveCost;
     this.IsDefaultMoveCostSpecified   = isDefaultMoveCostSpecified;
     this.ServicePackageActivationMode = servicePackageActivationMode;
     this.ServiceDnsName               = serviceDnsName;
     this.ScalingPolicies              = scalingPolicies;
     this.TagsRequiredToPlace          = tagsRequiredToPlace;
     this.TagsRequiredToRun            = tagsRequiredToRun;
 }
 /// <summary>
 /// Initializes a new instance of the StatelessServiceDescription class.
 /// </summary>
 /// <param name="serviceName">The full name of the service with 'fabric:' URI scheme.</param>
 /// <param name="serviceTypeName">Name of the service type as specified in the service manifest.</param>
 /// <param name="partitionDescription">The partition description as an object.</param>
 /// <param name="instanceCount">The instance count.</param>
 /// <param name="applicationName">The name of the application, including the 'fabric:' URI scheme.</param>
 /// <param name="initializationData">The initialization data as an array of bytes. Initialization data is passed to
 /// service instances or replicas when they are created.</param>
 /// <param name="placementConstraints">The placement constraints as a string. Placement constraints are boolean
 /// expressions on node properties and allow for restricting a service to particular nodes based on the service
 /// requirements. For example, to place a service on nodes where NodeType is blue specify the following: "NodeColor ==
 /// blue)".</param>
 /// <param name="correlationScheme">The correlation scheme.</param>
 /// <param name="serviceLoadMetrics">The service load metrics.</param>
 /// <param name="servicePlacementPolicies">The service placement policies.</param>
 /// <param name="defaultMoveCost">Specifies the move cost for the service. Possible values include: 'Zero', 'Low',
 /// 'Medium', 'High'</param>
 /// <param name="isDefaultMoveCostSpecified">Indicates if the DefaultMoveCost property is specified.</param>
 /// <param name="servicePackageActivationMode">The activation mode of service package to be used for a Service Fabric
 /// service. This is specified at the time of creating the Service. Possible values include: 'SharedProcess',
 /// 'ExclusiveProcess'</param>
 /// <param name="serviceDnsName">The DNS name of the service. It requires the DNS system service to be enabled in
 /// Service Fabric cluster.</param>
 /// <param name="scalingPolicies">Scaling policies for this service.</param>
 public StatelessServiceDescription(
     ServiceName serviceName,
     string serviceTypeName,
     PartitionSchemeDescription partitionDescription,
     int?instanceCount,
     ApplicationName applicationName = default(ApplicationName),
     byte[] initializationData       = default(byte[]),
     string placementConstraints     = default(string),
     IEnumerable <ServiceCorrelationDescription> correlationScheme            = default(IEnumerable <ServiceCorrelationDescription>),
     IEnumerable <ServiceLoadMetricDescription> serviceLoadMetrics            = default(IEnumerable <ServiceLoadMetricDescription>),
     IEnumerable <ServicePlacementPolicyDescription> servicePlacementPolicies = default(IEnumerable <ServicePlacementPolicyDescription>),
     MoveCost?defaultMoveCost        = default(MoveCost?),
     bool?isDefaultMoveCostSpecified = default(bool?),
     ServicePackageActivationMode?servicePackageActivationMode = default(ServicePackageActivationMode?),
     string serviceDnsName = default(string),
     IEnumerable <ScalingPolicyDescription> scalingPolicies = default(IEnumerable <ScalingPolicyDescription>))
     : base(
         serviceName,
         serviceTypeName,
         partitionDescription,
         Common.ServiceKind.Stateless,
         applicationName,
         initializationData,
         placementConstraints,
         correlationScheme,
         serviceLoadMetrics,
         servicePlacementPolicies,
         defaultMoveCost,
         isDefaultMoveCostSpecified,
         servicePackageActivationMode,
         serviceDnsName,
         scalingPolicies)
 {
     instanceCount.ThrowIfNull(nameof(instanceCount));
     instanceCount?.ThrowIfLessThan("instanceCount", -1);
     this.InstanceCount = instanceCount;
 }