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));
        }
Пример #2
0
 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));
        }
Пример #5
0
        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));
        }