internal static unsafe RestartPartitionDescription CreateFromNative(IntPtr nativeRaw)
        {
            NativeTypes.FABRIC_START_PARTITION_RESTART_DESCRIPTION native = *(NativeTypes.FABRIC_START_PARTITION_RESTART_DESCRIPTION *)nativeRaw;

            Guid operationId = native.OperationId;

            NativeTypes.FABRIC_PARTITION_SELECTOR nativePartitionSelector = *(NativeTypes.FABRIC_PARTITION_SELECTOR *)native.PartitionSelector;

            PartitionSelector partitionSelector =
                PartitionSelector.CreateFromNative(nativePartitionSelector);

            return(new RestartPartitionDescription(operationId, partitionSelector, (RestartPartitionMode)native.RestartPartitionMode));
        }
        internal static unsafe InvokeDataLossDescription CreateFromNative(IntPtr nativeRaw)
        {
            NativeTypes.FABRIC_START_PARTITON_DATA_LOSS_DESCRIPTION native = *(NativeTypes.FABRIC_START_PARTITON_DATA_LOSS_DESCRIPTION *)nativeRaw;

            Guid operationId = native.OperationId;

            NativeTypes.FABRIC_PARTITION_SELECTOR nativePartitionSelector = *(NativeTypes.FABRIC_PARTITION_SELECTOR *)native.PartitionSelector;

            PartitionSelector partitionSelector =
                PartitionSelector.CreateFromNative(nativePartitionSelector);

            return(new InvokeDataLossDescription(operationId, partitionSelector, (DataLossMode)native.DataLossMode));
        }
        internal static unsafe InvokeQuorumLossDescription CreateFromNative(IntPtr nativeRaw)
        {
            NativeTypes.FABRIC_START_PARTITION_QUORUM_LOSS_DESCRIPTION native = *(NativeTypes.FABRIC_START_PARTITION_QUORUM_LOSS_DESCRIPTION *)nativeRaw;

            Guid operationId = native.OperationId;

            NativeTypes.FABRIC_PARTITION_SELECTOR nativePartitionSelector = *(NativeTypes.FABRIC_PARTITION_SELECTOR *)native.PartitionSelector;

            PartitionSelector partitionSelector =
                PartitionSelector.CreateFromNative(nativePartitionSelector);

            TimeSpan quorumLossDuration = TimeSpan.FromMilliseconds(native.QuorumLossDurationInMilliSeconds);

            return(new InvokeQuorumLossDescription(operationId, partitionSelector, (QuorumLossMode)native.QuorumLossMode, quorumLossDuration));
        }
Пример #4
0
        internal unsafe IntPtr ToNative(PinCollection pin)
        {
            var nativePartitionSelector = new NativeTypes.FABRIC_PARTITION_SELECTOR();

            nativePartitionSelector.ServiceName = pin.AddObject(this.ServiceName);

            switch (this.selectorType)
            {
            case PartitionSelectorType.Singleton:
                nativePartitionSelector.PartitionSelectorType =
                    NativeTypes.FABRIC_PARTITION_SELECTOR_TYPE.FABRIC_PARTITION_SELECTOR_TYPE_SINGLETON;
                break;

            case PartitionSelectorType.Named:
                nativePartitionSelector.PartitionSelectorType =
                    NativeTypes.FABRIC_PARTITION_SELECTOR_TYPE.FABRIC_PARTITION_SELECTOR_TYPE_NAMED;
                break;

            case PartitionSelectorType.UniformInt64:
                nativePartitionSelector.PartitionSelectorType =
                    NativeTypes.FABRIC_PARTITION_SELECTOR_TYPE.FABRIC_PARTITION_SELECTOR_TYPE_UNIFORM_INT64;
                break;

            case PartitionSelectorType.PartitionId:
                nativePartitionSelector.PartitionSelectorType =
                    NativeTypes.FABRIC_PARTITION_SELECTOR_TYPE.FABRIC_PARTITION_SELECTOR_TYPE_PARTITION_ID;
                break;

            case PartitionSelectorType.Random:
                nativePartitionSelector.PartitionSelectorType =
                    NativeTypes.FABRIC_PARTITION_SELECTOR_TYPE.FABRIC_PARTITION_SELECTOR_TYPE_RANDOM;
                break;

            default:
                this.ThrowInvalidPartitionSelector();
                break;
            }

            nativePartitionSelector.PartitionKey = pin.AddObject(this.partitionKey);

            return(pin.AddBlittable(nativePartitionSelector));
        }
Пример #5
0
        internal static unsafe PartitionSelector CreateFromNative(NativeTypes.FABRIC_PARTITION_SELECTOR nativePartitionSelector)
        {
            Uri serviceName = NativeTypes.FromNativeUri(nativePartitionSelector.ServiceName);

            PartitionSelectorType partitionSelectorType;

            switch (nativePartitionSelector.PartitionSelectorType)
            {
            case NativeTypes.FABRIC_PARTITION_SELECTOR_TYPE.FABRIC_PARTITION_SELECTOR_TYPE_SINGLETON:
                partitionSelectorType = PartitionSelectorType.Singleton;
                break;

            case NativeTypes.FABRIC_PARTITION_SELECTOR_TYPE.FABRIC_PARTITION_SELECTOR_TYPE_NAMED:
                partitionSelectorType = PartitionSelectorType.Named;
                break;

            case NativeTypes.FABRIC_PARTITION_SELECTOR_TYPE.FABRIC_PARTITION_SELECTOR_TYPE_PARTITION_ID:
                partitionSelectorType = PartitionSelectorType.PartitionId;
                break;

            case NativeTypes.FABRIC_PARTITION_SELECTOR_TYPE.FABRIC_PARTITION_SELECTOR_TYPE_UNIFORM_INT64:
                partitionSelectorType = PartitionSelectorType.UniformInt64;
                break;

            case NativeTypes.FABRIC_PARTITION_SELECTOR_TYPE.FABRIC_PARTITION_SELECTOR_TYPE_RANDOM:
                partitionSelectorType = PartitionSelectorType.Random;
                break;

            default:
                AppTrace.TraceSource.WriteError("PartitionSelector.CreateFromNative", "Unknown partition selector type: {0}", nativePartitionSelector.PartitionSelectorType);
                throw new ArgumentException(string.Format(CultureInfo.CurrentCulture, "Error_Unknown_PartitionSelectorType", nativePartitionSelector.PartitionSelectorType));
            }

            string partitionKey = NativeTypes.FromNativeString(nativePartitionSelector.PartitionKey);

            return(new PartitionSelector(serviceName, partitionSelectorType, partitionKey));
        }