Ejemplo n.º 1
0
 /// <summary>
 /// Initializes a new instance of the StatelessServiceInfo class.
 /// </summary>
 /// <param name="id">The identity of the service. This is an encoded representation of the service name. This is used
 /// in the REST APIs to identify the service resource.
 /// Starting in version 6.0, hierarchical names are delimited with the "\~" character. For example, if the service name
 /// is "fabric:/myapp/app1/svc1",
 /// the service identity would be "myapp~app1\~svc1" in 6.0+ and "myapp/app1/svc1" in previous versions.
 /// </param>
 /// <param name="name">The full name of the service with 'fabric:' URI scheme.</param>
 /// <param name="typeName">Name of the service type as specified in the service manifest.</param>
 /// <param name="manifestVersion">The version of the service manifest.</param>
 /// <param name="healthState">The health state of a Service Fabric entity such as Cluster, Node, Application, Service,
 /// Partition, Replica etc. Possible values include: 'Invalid', 'Ok', 'Warning', 'Error', 'Unknown'</param>
 /// <param name="serviceStatus">The status of the application. Possible values include: 'Unknown', 'Active',
 /// 'Upgrading', 'Deleting', 'Creating', 'Failed'</param>
 /// <param name="isServiceGroup">Whether the service is in a service group.</param>
 public StatelessServiceInfo(
     string id                   = default(string),
     ServiceName name            = default(ServiceName),
     string typeName             = default(string),
     string manifestVersion      = default(string),
     HealthState?healthState     = default(HealthState?),
     ServiceStatus?serviceStatus = default(ServiceStatus?),
     bool?isServiceGroup         = default(bool?))
     : base(
         Common.ServiceKind.Stateless,
         id,
         name,
         typeName,
         manifestVersion,
         healthState,
         serviceStatus,
         isServiceGroup)
 {
 }
 /// <summary>
 /// Initializes a new instance of the DeployedStatelessServiceInstanceDetailInfo class.
 /// </summary>
 /// <param name="serviceName">Full hierarchical name of the service in URI format starting with `fabric:`.</param>
 /// <param name="partitionId">An internal ID used by Service Fabric to uniquely identify a partition. This is a
 /// randomly generated GUID when the service was created. The partition ID is unique and does not change for the
 /// lifetime of the service. If the same service was deleted and recreated the IDs of its partitions would be
 /// different.</param>
 /// <param name="currentServiceOperation">Specifies the current active life-cycle operation on a stateful service
 /// replica or stateless service instance. Possible values include: 'Unknown', 'None', 'Open', 'ChangeRole', 'Close',
 /// 'Abort'</param>
 /// <param name="currentServiceOperationStartTimeUtc">The start time of the current service operation in UTC
 /// format.</param>
 /// <param name="reportedLoad">List of load reported by replica.</param>
 /// <param name="instanceId">Id of a stateless service instance. InstanceId is used by Service Fabric to uniquely
 /// identify an instance of a partition of a stateless service. It is unique within a partition and does not change for
 /// the lifetime of the instance. If the instance has failed over on the same or different node, it will get a
 /// different value for the InstanceId.</param>
 /// <param name="deployedServiceReplicaQueryResult">Information about a stateless service instance deployed on a
 /// node.</param>
 public DeployedStatelessServiceInstanceDetailInfo(
     ServiceName serviceName = default(ServiceName),
     PartitionId partitionId = default(PartitionId),
     ServiceOperationName?currentServiceOperation    = default(ServiceOperationName?),
     DateTime?currentServiceOperationStartTimeUtc    = default(DateTime?),
     IEnumerable <LoadMetricReportInfo> reportedLoad = default(IEnumerable <LoadMetricReportInfo>),
     ReplicaId instanceId = default(ReplicaId),
     DeployedStatelessServiceInstanceInfo deployedServiceReplicaQueryResult = default(DeployedStatelessServiceInstanceInfo))
     : base(
         Common.ServiceKind.Stateless,
         serviceName,
         partitionId,
         currentServiceOperation,
         currentServiceOperationStartTimeUtc,
         reportedLoad)
 {
     this.InstanceId = instanceId;
     this.DeployedServiceReplicaQueryResult = deployedServiceReplicaQueryResult;
 }
Ejemplo n.º 3
0
 /// <summary>
 /// Initializes a new instance of the ServiceInfo class.
 /// </summary>
 /// <param name="serviceKind">The kind of service (Stateless or Stateful).</param>
 /// <param name="id">The identity of the service. This is an encoded representation of the service name. This is used
 /// in the REST APIs to identify the service resource.
 /// Starting in version 6.0, hierarchical names are delimited with the "\~" character. For example, if the service name
 /// is "fabric:/myapp/app1/svc1",
 /// the service identity would be "myapp~app1\~svc1" in 6.0+ and "myapp/app1/svc1" in previous versions.
 /// </param>
 /// <param name="name">The full name of the service with 'fabric:' URI scheme.</param>
 /// <param name="typeName">Name of the service type as specified in the service manifest.</param>
 /// <param name="manifestVersion">The version of the service manifest.</param>
 /// <param name="healthState">The health state of a Service Fabric entity such as Cluster, Node, Application, Service,
 /// Partition, Replica etc. Possible values include: 'Invalid', 'Ok', 'Warning', 'Error', 'Unknown'</param>
 /// <param name="serviceStatus">The status of the application. Possible values include: 'Unknown', 'Active',
 /// 'Upgrading', 'Deleting', 'Creating', 'Failed'</param>
 /// <param name="isServiceGroup">Whether the service is in a service group.</param>
 protected ServiceInfo(
     ServiceKind?serviceKind,
     string id                   = default(string),
     ServiceName name            = default(ServiceName),
     string typeName             = default(string),
     string manifestVersion      = default(string),
     HealthState?healthState     = default(HealthState?),
     ServiceStatus?serviceStatus = default(ServiceStatus?),
     bool?isServiceGroup         = default(bool?))
 {
     serviceKind.ThrowIfNull(nameof(serviceKind));
     this.ServiceKind     = serviceKind;
     this.Id              = id;
     this.Name            = name;
     this.TypeName        = typeName;
     this.ManifestVersion = manifestVersion;
     this.HealthState     = healthState;
     this.ServiceStatus   = serviceStatus;
     this.IsServiceGroup  = isServiceGroup;
 }
 /// <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 StatefulServiceInfo class.
 /// </summary>
 /// <param name="id">The identity of the service. This ID is an encoded representation of the service name. This is
 /// used in the REST APIs to identify the service resource.
 /// Starting in version 6.0, hierarchical names are delimited with the "\~" character. For example, if the service name
 /// is "fabric:/myapp/app1/svc1",
 /// the service identity would be "myapp~app1\~svc1" in 6.0+ and "myapp/app1/svc1" in previous versions.
 /// </param>
 /// <param name="name">The full name of the service with 'fabric:' URI scheme.</param>
 /// <param name="typeName">Name of the service type as specified in the service manifest.</param>
 /// <param name="manifestVersion">The version of the service manifest.</param>
 /// <param name="healthState">The health state of a Service Fabric entity such as Cluster, Node, Application, Service,
 /// Partition, Replica etc. Possible values include: 'Invalid', 'Ok', 'Warning', 'Error', 'Unknown'</param>
 /// <param name="serviceStatus">The status of the application. Possible values include: 'Unknown', 'Active',
 /// 'Upgrading', 'Deleting', 'Creating', 'Failed'</param>
 /// <param name="isServiceGroup">Whether the service is in a service group.</param>
 /// <param name="serviceMetadata">Metadata associated with a specific service.</param>
 /// <param name="hasPersistedState">Whether the service has persisted state.</param>
 public StatefulServiceInfo(
     string id                       = default(string),
     ServiceName name                = default(ServiceName),
     string typeName                 = default(string),
     string manifestVersion          = default(string),
     HealthState?healthState         = default(HealthState?),
     ServiceStatus?serviceStatus     = default(ServiceStatus?),
     bool?isServiceGroup             = default(bool?),
     ServiceMetadata serviceMetadata = default(ServiceMetadata),
     bool?hasPersistedState          = default(bool?))
     : base(
         Common.ServiceKind.Stateful,
         id,
         name,
         typeName,
         manifestVersion,
         healthState,
         serviceStatus,
         isServiceGroup,
         serviceMetadata)
 {
     this.HasPersistedState = hasPersistedState;
 }
 /// <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;
 }
 /// <summary>
 /// Initializes a new instance of the DeployedServiceReplicaInfo class.
 /// </summary>
 /// <param name="serviceKind">The kind of service (Stateless or Stateful).</param>
 /// <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="serviceManifestName">The name of the service manifest in which this service type is defined.</param>
 /// <param name="codePackageName">The name of the code package that hosts this replica.</param>
 /// <param name="partitionId">An internal ID used by Service Fabric to uniquely identify a partition. This is a
 /// randomly generated GUID when the service was created. The partition ID is unique and does not change for the
 /// lifetime of the service. If the same service was deleted and recreated the IDs of its partitions would be
 /// different.</param>
 /// <param name="replicaStatus">The status of a replica of a service. Possible values include: 'Invalid', 'InBuild',
 /// 'Standby', 'Ready', 'Down', 'Dropped'</param>
 /// <param name="address">The last address returned by the replica in Open or ChangeRole.</param>
 /// <param name="servicePackageActivationId">The ActivationId of a deployed service package. If
 /// ServicePackageActivationMode specified at the time of creating the service
 /// is 'SharedProcess' (or if it is not specified, in which case it defaults to 'SharedProcess'), then value of
 /// ServicePackageActivationId
 /// is always an empty string.
 /// </param>
 /// <param name="hostProcessId">Host process ID of the process that is hosting the replica. This will be zero if the
 /// replica is down. In hyper-v containers this host process ID will be from different kernel.</param>
 protected DeployedServiceReplicaInfo(
     ServiceKind?serviceKind,
     ServiceName serviceName     = default(ServiceName),
     string serviceTypeName      = default(string),
     string serviceManifestName  = default(string),
     string codePackageName      = default(string),
     PartitionId partitionId     = default(PartitionId),
     ReplicaStatus?replicaStatus = default(ReplicaStatus?),
     string address = default(string),
     string servicePackageActivationId = default(string),
     string hostProcessId = default(string))
 {
     serviceKind.ThrowIfNull(nameof(serviceKind));
     this.ServiceKind                = serviceKind;
     this.ServiceName                = serviceName;
     this.ServiceTypeName            = serviceTypeName;
     this.ServiceManifestName        = serviceManifestName;
     this.CodePackageName            = codePackageName;
     this.PartitionId                = partitionId;
     this.ReplicaStatus              = replicaStatus;
     this.Address                    = address;
     this.ServicePackageActivationId = servicePackageActivationId;
     this.HostProcessId              = hostProcessId;
 }
 /// <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="tagsRequiredToPlace">Tags for placement of this service.</param>
 /// <param name="tagsRequiredToRun">Tags for running of 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>
 /// <param name="replicaLifecycleDescription">Defines how replicas of this service will behave during ther
 /// lifecycle.</param>
 /// <param name="auxiliaryReplicaCount">The auxiliary replica count as a number. To use Auxiliary replicas, the
 /// following must be true: AuxiliaryReplicaCount &lt; (TargetReplicaSetSize+1)/2 and TargetReplicaSetSize >=3.</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>),
     NodeTagsDescription tagsRequiredToPlace = default(NodeTagsDescription),
     NodeTagsDescription tagsRequiredToRun   = default(NodeTagsDescription),
     int?flags = default(int?),
     long?replicaRestartWaitDurationSeconds = default(long?),
     long?quorumLossWaitDurationSeconds     = default(long?),
     long?standByReplicaKeepDurationSeconds = default(long?),
     long?servicePlacementTimeLimitSeconds  = default(long?),
     bool?dropSourceReplicaOnMove           = default(bool?),
     ReplicaLifecycleDescription replicaLifecycleDescription = default(ReplicaLifecycleDescription),
     int?auxiliaryReplicaCount = default(int?))
     : base(
         serviceName,
         serviceTypeName,
         partitionDescription,
         Common.ServiceKind.Stateful,
         applicationName,
         initializationData,
         placementConstraints,
         correlationScheme,
         serviceLoadMetrics,
         servicePlacementPolicies,
         defaultMoveCost,
         isDefaultMoveCostSpecified,
         servicePackageActivationMode,
         serviceDnsName,
         scalingPolicies,
         tagsRequiredToPlace,
         tagsRequiredToRun)
 {
     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);
     auxiliaryReplicaCount?.ThrowIfLessThan("auxiliaryReplicaCount", 0);
     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;
     this.ReplicaLifecycleDescription       = replicaLifecycleDescription;
     this.AuxiliaryReplicaCount             = auxiliaryReplicaCount;
 }