protected PartitionSelector GetPartitionSelector()
        {
            if (this.ParameterSetName == "PartitionId")
            {
                return(PartitionSelector.PartitionIdOf(this.ServiceName, this.PartitionId));
            }
            else
            {
                switch (this.ParameterSetName)
                {
                case "ServiceNameRandomPartition":
                    return(PartitionSelector.RandomOf(this.ServiceName));

                case "ServiceNamePartitionSingleton":
                    return(PartitionSelector.SingletonOf(this.ServiceName));

                case "ServiceNamePartitionNamed":
                    return(PartitionSelector.PartitionKeyOf(this.ServiceName, this.PartitionKey));

                case "ServiceNamePartitionUniformedInt":
                    long partitionKeyLong;
                    if (!long.TryParse(this.PartitionKey, out partitionKeyLong))
                    {
                        throw new ArgumentException(StringResources.Error_InvalidPartitionKey);
                    }

                    return(PartitionSelector.PartitionKeyOf(this.ServiceName, partitionKeyLong));

                default:
                    throw new ArgumentException(StringResources.Error_CouldNotParsePartitionSelector);
                }
            }
        }
Beispiel #2
0
        public static PartitionSelector GetExpectedPartitionSelector(PartitionCase partitionCase)
        {
            PartitionSelector result = null;

            switch (partitionCase)
            {
            case PartitionCase.PartitionId:
            {
                result = PartitionSelector.PartitionIdOf(ServiceName, PartitionID);
                break;
            }

            case PartitionCase.ServiceNameRandomPartition:
            {
                result = PartitionSelector.RandomOf(ServiceName);
                break;
            }

            case PartitionCase.ServiceNamePartitionSingleton:
            {
                result = PartitionSelector.SingletonOf(ServiceName);
                break;
            }

            case PartitionCase.ServiceNamePartitionNamed:
            {
                result = PartitionSelector.PartitionKeyOf(ServiceName, PartitionKey);
                break;
            }

            case PartitionCase.ServiceNamePartitionUniformedInt:
            {
                result = PartitionSelector.PartitionKeyOf(ServiceName, PartitionKeyLong);
                break;
            }
            }

            return(result);
        }
        internal static ReplicaSelector GetReplicaSelector(string partitionSetName, Guid partitionId, Uri serviceName, string partitionKey, long?replicaOrInstanceId)
        {
            ReplicaSelector   replicaSelector   = null;
            PartitionSelector partitionSelector = null;

            if (partitionSetName.Contains("PartitionId"))
            {
                partitionSelector = PartitionSelector.PartitionIdOf(serviceName, partitionId);
            }
            else
            {
                if (partitionSetName.Contains("PartitionSingleton"))
                {
                    partitionSelector = PartitionSelector.SingletonOf(serviceName);
                }
                else if (partitionSetName.Contains("PartitionNamed"))
                {
                    partitionSelector = PartitionSelector.PartitionKeyOf(serviceName, partitionKey);
                }
                else if (partitionSetName.Contains("PartitionUniformedInt"))
                {
                    long partitionKeyLong;
                    if (!long.TryParse(partitionKey, out partitionKeyLong))
                    {
                        throw new ArgumentException(StringResources.Error_InvalidPartitionKey);
                    }

                    partitionSelector = PartitionSelector.PartitionKeyOf(serviceName, partitionKeyLong);
                }
                else if (!partitionSetName.Contains("Partition"))
                {
                    partitionSelector = PartitionSelector.RandomOf(serviceName);
                }
            }

            if (partitionSelector == null)
            {
                throw new ArgumentException(StringResources.Error_CouldNotParsePartitionSelector);
            }

            if (partitionSetName.Contains("ReplicaPrimary"))
            {
                replicaSelector = ReplicaSelector.PrimaryOf(partitionSelector);
            }
            else if (partitionSetName.Contains("ReplicaRandomSecondary"))
            {
                replicaSelector = ReplicaSelector.RandomSecondaryOf(partitionSelector);
            }
            else if (partitionSetName.Contains("ReplicaId"))
            {
                replicaSelector = ReplicaSelector.ReplicaIdOf(partitionSelector, replicaOrInstanceId ?? 0);
            }
            else if (!partitionSetName.Contains("Replica"))
            {
                replicaSelector = ReplicaSelector.RandomOf(partitionSelector);
            }

            if (replicaSelector == null)
            {
                throw new ArgumentException(StringResources.Error_CouldNotParseReplicaSelector);
            }

            return(replicaSelector);
        }