internal override IntPtr ToNative(PinCollection pin, out NativeTypes.FABRIC_SERVICE_DESCRIPTION_KIND kind) { this.ValidateDefaultMetricValue(); var nativeDescription = new NativeTypes.FABRIC_STATELESS_SERVICE_DESCRIPTION[1]; nativeDescription[0].ApplicationName = pin.AddObject(this.ApplicationName); nativeDescription[0].ServiceName = pin.AddObject(this.ServiceName); nativeDescription[0].ServiceTypeName = pin.AddBlittable(this.ServiceTypeName); nativeDescription[0].PartitionScheme = (NativeTypes.FABRIC_PARTITION_SCHEME) this.PartitionSchemeDescription.Scheme; nativeDescription[0].PartitionSchemeDescription = this.PartitionSchemeDescription.ToNative(pin); nativeDescription[0].PlacementConstraints = pin.AddBlittable(this.PlacementConstraints); nativeDescription[0].InstanceCount = this.InstanceCount; var correlations = this.ToNativeCorrelations(pin); nativeDescription[0].CorrelationCount = correlations.Item1; nativeDescription[0].Correlations = correlations.Item2; var initializationData = NativeTypes.ToNativeBytes(pin, this.InitializationData); nativeDescription[0].InitializationDataSize = initializationData.Item1; nativeDescription[0].InitializationData = initializationData.Item2; var metrics = NativeTypes.ToNativeLoadMetrics(pin, this.Metrics); nativeDescription[0].MetricCount = metrics.Item1; nativeDescription[0].Metrics = metrics.Item2; var ex1 = new NativeTypes.FABRIC_STATELESS_SERVICE_DESCRIPTION_EX1[1]; if (this.PlacementPolicies != null) { var policies = this.ToNativePolicies(pin); var pList = new NativeTypes.FABRIC_SERVICE_PLACEMENT_POLICY_LIST[1]; pList[0].PolicyCount = policies.Item1; pList[0].Policies = policies.Item2; ex1[0].PolicyList = pin.AddBlittable(pList); } var ex2 = new NativeTypes.FABRIC_STATELESS_SERVICE_DESCRIPTION_EX2[1]; ex2[0].DefaultMoveCost = this.ToNativeDefaultMoveCost(); ex2[0].IsDefaultMoveCostSpecified = NativeTypes.ToBOOLEAN(this.IsDefaultMoveCostSpecified); var ex3 = new NativeTypes.FABRIC_STATELESS_SERVICE_DESCRIPTION_EX3[1]; ex3[0].ServicePackageActivationMode = InteropHelpers.ToNativeServicePackageActivationMode(this.ServicePackageActivationMode); ex3[0].ServiceDnsName = pin.AddBlittable(this.ServiceDnsName); var ex4 = new NativeTypes.FABRIC_STATELESS_SERVICE_DESCRIPTION_EX4[1]; if (this.ScalingPolicies != null) { var scalingPolicies = this.ToNativeScalingPolicies(pin); ex4[0].ScalingPolicyCount = scalingPolicies.Item1; ex4[0].ServiceScalingPolicies = scalingPolicies.Item2; } ex3[0].Reserved = pin.AddBlittable(ex4); ex2[0].Reserved = pin.AddBlittable(ex3); ex1[0].Reserved = pin.AddBlittable(ex2); nativeDescription[0].Reserved = pin.AddBlittable(ex1); kind = NativeTypes.FABRIC_SERVICE_DESCRIPTION_KIND.FABRIC_SERVICE_DESCRIPTION_KIND_STATELESS; return(pin.AddBlittable(nativeDescription)); }
internal abstract IntPtr ToNative(PinCollection pin, out NativeTypes.FABRIC_SERVICE_DESCRIPTION_KIND kind);
internal override IntPtr ToNative(PinCollection pin, out NativeTypes.FABRIC_SERVICE_DESCRIPTION_KIND kind) { var nativeUpdateDescription = new NativeTypes.FABRIC_STATEFUL_SERVICE_UPDATE_DESCRIPTION[1]; var nativeUpdateDescriptionEx1 = new NativeTypes.FABRIC_STATEFUL_SERVICE_UPDATE_DESCRIPTION_EX1[1]; var nativeUpdateDescriptionEx2 = new NativeTypes.FABRIC_STATEFUL_SERVICE_UPDATE_DESCRIPTION_EX2[1]; var nativeUpdateDescriptionEx3 = new NativeTypes.FABRIC_STATEFUL_SERVICE_UPDATE_DESCRIPTION_EX3[1]; var nativeUpdateDescriptionEx4 = new NativeTypes.FABRIC_STATEFUL_SERVICE_UPDATE_DESCRIPTION_EX4[1]; var nativeUpdateDescriptionEx5 = new NativeTypes.FABRIC_STATEFUL_SERVICE_UPDATE_DESCRIPTION_EX5[1]; var flags = NativeTypes.FABRIC_STATEFUL_SERVICE_UPDATE_DESCRIPTION_FLAGS.FABRIC_STATEFUL_SERVICE_NONE; if (TargetReplicaSetSize.HasValue) { flags |= NativeTypes.FABRIC_STATEFUL_SERVICE_UPDATE_DESCRIPTION_FLAGS.FABRIC_STATEFUL_SERVICE_TARGET_REPLICA_SET_SIZE; nativeUpdateDescription[0].TargetReplicaSetSize = this.TargetReplicaSetSize.Value; } if (ReplicaRestartWaitDuration.HasValue) { flags |= NativeTypes.FABRIC_STATEFUL_SERVICE_UPDATE_DESCRIPTION_FLAGS.FABRIC_STATEFUL_SERVICE_REPLICA_RESTART_WAIT_DURATION; nativeUpdateDescription[0].ReplicaRestartWaitDurationSeconds = (uint)this.ReplicaRestartWaitDuration.Value.TotalSeconds; } if (QuorumLossWaitDuration.HasValue) { flags |= NativeTypes.FABRIC_STATEFUL_SERVICE_UPDATE_DESCRIPTION_FLAGS.FABRIC_STATEFUL_SERVICE_QUORUM_LOSS_WAIT_DURATION; nativeUpdateDescription[0].QuorumLossWaitDurationSeconds = (uint)this.QuorumLossWaitDuration.Value.TotalSeconds; } if (StandByReplicaKeepDuration.HasValue) { flags |= NativeTypes.FABRIC_STATEFUL_SERVICE_UPDATE_DESCRIPTION_FLAGS.FABRIC_STATEFUL_SERVICE_STANDBY_REPLICA_KEEP_DURATION; nativeUpdateDescriptionEx1[0].StandByReplicaKeepDurationSeconds = (uint)this.StandByReplicaKeepDuration.Value.TotalSeconds; } if (MinReplicaSetSize.HasValue) { flags |= NativeTypes.FABRIC_STATEFUL_SERVICE_UPDATE_DESCRIPTION_FLAGS.FABRIC_STATEFUL_SERVICE_MIN_REPLICA_SET_SIZE; nativeUpdateDescriptionEx2[0].MinReplicaSetSize = this.MinReplicaSetSize.Value; } if (this.PlacementConstraints != null) { flags |= NativeTypes.FABRIC_STATEFUL_SERVICE_UPDATE_DESCRIPTION_FLAGS.FABRIC_STATEFUL_SERVICE_PLACEMENT_CONSTRAINTS; nativeUpdateDescriptionEx3[0].PlacementConstraints = pin.AddBlittable(this.PlacementConstraints); } if (this.Correlations != null) { var correlations = this.ToNativeCorrelations(pin); if (correlations != null) { flags |= NativeTypes.FABRIC_STATEFUL_SERVICE_UPDATE_DESCRIPTION_FLAGS.FABRIC_STATEFUL_SERVICE_CORRELATIONS; nativeUpdateDescriptionEx3[0].CorrelationCount = correlations.Item1; nativeUpdateDescriptionEx3[0].Correlations = correlations.Item2; } } if (this.Metrics != null) { var metrics = NativeTypes.ToNativeLoadMetrics(pin, this.Metrics); if (metrics != null) { flags |= NativeTypes.FABRIC_STATEFUL_SERVICE_UPDATE_DESCRIPTION_FLAGS.FABRIC_STATEFUL_SERVICE_METRICS; nativeUpdateDescriptionEx3[0].MetricCount = metrics.Item1; nativeUpdateDescriptionEx3[0].Metrics = metrics.Item2; } } if (this.PlacementPolicies != null) { flags |= NativeTypes.FABRIC_STATEFUL_SERVICE_UPDATE_DESCRIPTION_FLAGS.FABRIC_STATEFUL_SERVICE_POLICY_LIST; var policies = this.ToNativePolicies(pin); var pList = new NativeTypes.FABRIC_SERVICE_PLACEMENT_POLICY_LIST[1]; pList[0].PolicyCount = policies.Item1; pList[0].Policies = policies.Item2; nativeUpdateDescriptionEx3[0].PolicyList = pin.AddBlittable(pList); } if (this.DefaultMoveCost.HasValue) { flags |= NativeTypes.FABRIC_STATEFUL_SERVICE_UPDATE_DESCRIPTION_FLAGS.FABRIC_STATEFUL_SERVICE_MOVE_COST; nativeUpdateDescriptionEx4[0].DefaultMoveCost = (NativeTypes.FABRIC_MOVE_COST)DefaultMoveCost.Value; } if (this.RepartitionDescription != null) { NativeTypes.FABRIC_SERVICE_PARTITION_KIND partitionKind; nativeUpdateDescriptionEx5[0].RepartitionDescription = this.RepartitionDescription.ToNative(pin, out partitionKind); nativeUpdateDescriptionEx5[0].RepartitionKind = partitionKind; } if (this.ScalingPolicies != null) { flags |= NativeTypes.FABRIC_STATEFUL_SERVICE_UPDATE_DESCRIPTION_FLAGS.FABRIC_STATEFUL_SERVICE_SCALING_POLICY; var scalingPolicies = this.ToNativeScalingPolicies(pin); nativeUpdateDescriptionEx5[0].ScalingPolicyCount = scalingPolicies.Item1; nativeUpdateDescriptionEx5[0].ServiceScalingPolicies = scalingPolicies.Item2; } nativeUpdateDescription[0].Flags = (uint)flags; nativeUpdateDescriptionEx4[0].Reserved = pin.AddBlittable(nativeUpdateDescriptionEx5); nativeUpdateDescriptionEx3[0].Reserved = pin.AddBlittable(nativeUpdateDescriptionEx4); nativeUpdateDescriptionEx2[0].Reserved = pin.AddBlittable(nativeUpdateDescriptionEx3); nativeUpdateDescriptionEx1[0].Reserved = pin.AddBlittable(nativeUpdateDescriptionEx2); nativeUpdateDescription[0].Reserved = pin.AddBlittable(nativeUpdateDescriptionEx1); kind = NativeTypes.FABRIC_SERVICE_DESCRIPTION_KIND.FABRIC_SERVICE_DESCRIPTION_KIND_STATEFUL; return(pin.AddBlittable(nativeUpdateDescription)); }
internal override IntPtr ToNative(PinCollection pin, out NativeTypes.FABRIC_SERVICE_DESCRIPTION_KIND kind) { this.ValidateDefaultMetricValue(); var nativeDescription = new NativeTypes.FABRIC_STATEFUL_SERVICE_DESCRIPTION[1]; nativeDescription[0].ApplicationName = pin.AddObject(this.ApplicationName); nativeDescription[0].ServiceName = pin.AddObject(this.ServiceName); nativeDescription[0].ServiceTypeName = pin.AddBlittable(this.ServiceTypeName); nativeDescription[0].PartitionScheme = (NativeTypes.FABRIC_PARTITION_SCHEME) this.PartitionSchemeDescription.Scheme; nativeDescription[0].PartitionSchemeDescription = this.PartitionSchemeDescription.ToNative(pin); nativeDescription[0].TargetReplicaSetSize = this.TargetReplicaSetSize; nativeDescription[0].MinReplicaSetSize = this.MinReplicaSetSize; nativeDescription[0].PlacementConstraints = pin.AddBlittable(this.PlacementConstraints); nativeDescription[0].HasPersistedState = NativeTypes.ToBOOLEAN(this.HasPersistedState); var correlations = this.ToNativeCorrelations(pin); nativeDescription[0].CorrelationCount = correlations.Item1; nativeDescription[0].Correlations = correlations.Item2; var initializationData = NativeTypes.ToNativeBytes(pin, this.InitializationData); nativeDescription[0].InitializationDataSize = initializationData.Item1; nativeDescription[0].InitializationData = initializationData.Item2; var metrics = NativeTypes.ToNativeLoadMetrics(pin, this.Metrics); nativeDescription[0].MetricCount = metrics.Item1; nativeDescription[0].Metrics = metrics.Item2; var ex1 = new NativeTypes.FABRIC_STATEFUL_SERVICE_DESCRIPTION_EX1[1]; if (this.PlacementPolicies != null) { var policies = this.ToNativePolicies(pin); var pList = new NativeTypes.FABRIC_SERVICE_PLACEMENT_POLICY_LIST[1]; pList[0].PolicyCount = policies.Item1; pList[0].Policies = policies.Item2; ex1[0].PolicyList = pin.AddBlittable(pList); } var failoverSettings = new NativeTypes.FABRIC_STATEFUL_SERVICE_FAILOVER_SETTINGS[1]; var failoverSettingsEx1 = new NativeTypes.FABRIC_STATEFUL_SERVICE_FAILOVER_SETTINGS_EX1[1]; var flags = NativeTypes.FABRIC_STATEFUL_SERVICE_FAILOVER_SETTINGS_FLAGS.FABRIC_STATEFUL_SERVICE_SETTINGS_NONE; if (ReplicaRestartWaitDuration.HasValue) { flags |= NativeTypes.FABRIC_STATEFUL_SERVICE_FAILOVER_SETTINGS_FLAGS.FABRIC_STATEFUL_SERVICE_SETTINGS_REPLICA_RESTART_WAIT_DURATION; failoverSettings[0].ReplicaRestartWaitDurationSeconds = (uint)this.ReplicaRestartWaitDuration.Value.TotalSeconds; } if (QuorumLossWaitDuration.HasValue) { flags |= NativeTypes.FABRIC_STATEFUL_SERVICE_FAILOVER_SETTINGS_FLAGS.FABRIC_STATEFUL_SERVICE_SETTINGS_QUORUM_LOSS_WAIT_DURATION; failoverSettings[0].QuorumLossWaitDurationSeconds = (uint)this.QuorumLossWaitDuration.Value.TotalSeconds; } if (StandByReplicaKeepDuration.HasValue) { flags |= NativeTypes.FABRIC_STATEFUL_SERVICE_FAILOVER_SETTINGS_FLAGS.FABRIC_STATEFUL_SERVICE_SETTINGS_STANDBY_REPLICA_KEEP_DURATION; failoverSettingsEx1[0].StandByReplicaKeepDurationSeconds = (uint)this.StandByReplicaKeepDuration.Value.TotalSeconds; } if (flags != NativeTypes.FABRIC_STATEFUL_SERVICE_FAILOVER_SETTINGS_FLAGS.FABRIC_STATEFUL_SERVICE_SETTINGS_NONE) { failoverSettings[0].Flags = (uint)flags; if ((flags & NativeTypes.FABRIC_STATEFUL_SERVICE_FAILOVER_SETTINGS_FLAGS.FABRIC_STATEFUL_SERVICE_SETTINGS_STANDBY_REPLICA_KEEP_DURATION) != 0) { failoverSettings[0].Reserved = pin.AddBlittable(failoverSettingsEx1); } ex1[0].FailoverSettings = pin.AddBlittable(failoverSettings); } var ex2 = new NativeTypes.FABRIC_STATEFUL_SERVICE_DESCRIPTION_EX2[1]; ex2[0].DefaultMoveCost = this.ToNativeDefaultMoveCost(); ex2[0].IsDefaultMoveCostSpecified = NativeTypes.ToBOOLEAN(this.IsDefaultMoveCostSpecified); var ex3 = new NativeTypes.FABRIC_STATEFUL_SERVICE_DESCRIPTION_EX3[1]; ex3[0].ServicePackageActivationMode = InteropHelpers.ToNativeServicePackageActivationMode(ServicePackageActivationMode); ex3[0].ServiceDnsName = pin.AddBlittable(this.ServiceDnsName); ex2[0].Reserved = pin.AddBlittable(ex3); ex1[0].Reserved = pin.AddBlittable(ex2); var ex4 = new NativeTypes.FABRIC_STATEFUL_SERVICE_DESCRIPTION_EX4[1]; if (ScalingPolicies != null) { var scalingPolicies = this.ToNativeScalingPolicies(pin); ex4[0].ScalingPolicyCount = scalingPolicies.Item1; ex4[0].ServiceScalingPolicies = scalingPolicies.Item2; } ex3[0].Reserved = pin.AddBlittable(ex4); nativeDescription[0].Reserved = pin.AddBlittable(ex1); kind = NativeTypes.FABRIC_SERVICE_DESCRIPTION_KIND.FABRIC_SERVICE_DESCRIPTION_KIND_STATEFUL; return(pin.AddBlittable(nativeDescription)); }
internal override IntPtr ToNative(PinCollection pin, out NativeTypes.FABRIC_SERVICE_DESCRIPTION_KIND kind) { var nativeUpdateDescription = new NativeTypes.FABRIC_STATELESS_SERVICE_UPDATE_DESCRIPTION[1]; var nativeUpdateDescriptionEx1 = new NativeTypes.FABRIC_STATELESS_SERVICE_UPDATE_DESCRIPTION_EX1[1]; var nativeUpdateDescriptionEx2 = new NativeTypes.FABRIC_STATELESS_SERVICE_UPDATE_DESCRIPTION_EX2[1]; var nativeUpdateDescriptionEx3 = new NativeTypes.FABRIC_STATELESS_SERVICE_UPDATE_DESCRIPTION_EX3[1]; var flags = NativeTypes.FABRIC_STATELESS_SERVICE_UPDATE_DESCRIPTION_FLAGS.FABRIC_STATELESS_SERVICE_NONE; if (InstanceCount.HasValue) { flags |= NativeTypes.FABRIC_STATELESS_SERVICE_UPDATE_DESCRIPTION_FLAGS.FABRIC_STATELESS_SERVICE_INSTANCE_COUNT; nativeUpdateDescription[0].InstanceCount = this.InstanceCount.Value; } if (this.PlacementConstraints != null) { flags |= NativeTypes.FABRIC_STATELESS_SERVICE_UPDATE_DESCRIPTION_FLAGS.FABRIC_STATELESS_SERVICE_PLACEMENT_CONSTRAINTS; nativeUpdateDescriptionEx1[0].PlacementConstraints = pin.AddBlittable(this.PlacementConstraints); } if (this.Correlations != null) { var correlations = this.ToNativeCorrelations(pin); if (correlations != null) { flags |= NativeTypes.FABRIC_STATELESS_SERVICE_UPDATE_DESCRIPTION_FLAGS.FABRIC_STATELESS_SERVICE_CORRELATIONS; nativeUpdateDescriptionEx1[0].CorrelationCount = correlations.Item1; nativeUpdateDescriptionEx1[0].Correlations = correlations.Item2; } } if (this.Metrics != null) { var metrics = NativeTypes.ToNativeLoadMetrics(pin, this.Metrics); if (metrics != null) { flags |= NativeTypes.FABRIC_STATELESS_SERVICE_UPDATE_DESCRIPTION_FLAGS.FABRIC_STATELESS_SERVICE_METRICS; nativeUpdateDescriptionEx1[0].MetricCount = metrics.Item1; nativeUpdateDescriptionEx1[0].Metrics = metrics.Item2; } } if (this.PlacementPolicies != null) { flags |= NativeTypes.FABRIC_STATELESS_SERVICE_UPDATE_DESCRIPTION_FLAGS.FABRIC_STATELESS_SERVICE_POLICY_LIST; var policies = this.ToNativePolicies(pin); var pList = new NativeTypes.FABRIC_SERVICE_PLACEMENT_POLICY_LIST[1]; pList[0].PolicyCount = policies.Item1; pList[0].Policies = policies.Item2; nativeUpdateDescriptionEx1[0].PolicyList = pin.AddBlittable(pList); } if (this.DefaultMoveCost.HasValue) { flags |= NativeTypes.FABRIC_STATELESS_SERVICE_UPDATE_DESCRIPTION_FLAGS.FABRIC_STATELESS_SERVICE_MOVE_COST; nativeUpdateDescriptionEx2[0].DefaultMoveCost = (NativeTypes.FABRIC_MOVE_COST)DefaultMoveCost.Value; } if (this.RepartitionDescription != null) { NativeTypes.FABRIC_SERVICE_PARTITION_KIND partitionKind; nativeUpdateDescriptionEx3[0].RepartitionDescription = this.RepartitionDescription.ToNative(pin, out partitionKind); nativeUpdateDescriptionEx3[0].RepartitionKind = partitionKind; } if (this.ScalingPolicies != null) { flags |= NativeTypes.FABRIC_STATELESS_SERVICE_UPDATE_DESCRIPTION_FLAGS.FABRIC_STATELESS_SERVICE_SCALING_POLICY; var scalingPolicies = this.ToNativeScalingPolicies(pin); nativeUpdateDescriptionEx3[0].ScalingPolicyCount = scalingPolicies.Item1; nativeUpdateDescriptionEx3[0].ServiceScalingPolicies = scalingPolicies.Item2; } nativeUpdateDescription[0].Flags = (uint)flags; nativeUpdateDescriptionEx2[0].Reserved = pin.AddBlittable(nativeUpdateDescriptionEx3); nativeUpdateDescriptionEx1[0].Reserved = pin.AddBlittable(nativeUpdateDescriptionEx2); nativeUpdateDescription[0].Reserved = pin.AddBlittable(nativeUpdateDescriptionEx1); kind = NativeTypes.FABRIC_SERVICE_DESCRIPTION_KIND.FABRIC_SERVICE_DESCRIPTION_KIND_STATELESS; return(pin.AddBlittable(nativeUpdateDescription)); }