internal string[] ResolveAssignedEventHubPartitions(string[] EventHubPartitionsIds)
{
string[] orderedEventHubPartitionIds = EventHubPartitionsIds.OrderBy((s) => s).ToArray();
switch (ListenerMode)
{
case EventHubListenerMode.Single:
{
if (!orderedEventHubPartitionIds.Contains(this.AssignedEventHubPartitionId))
throw new InvalidOperationException(string.Format("Assgined Event hub Partition {0} is not found", AssignedEventHubPartitionId));
return new string[] { this.AssignedEventHubPartitionId };
}
case EventHubListenerMode.OneToOne:
{
if (OrderedServicePartitionIds.Length != orderedEventHubPartitionIds.Length)
throw new InvalidOperationException("Event Hub listener is in 1:1 mode yet servie partitions are not equal to event hub partitions");
int servicePartitionRank = Array.IndexOf(OrderedServicePartitionIds, mCurrentSFPartitionId);
return new string[] { orderedEventHubPartitionIds[servicePartitionRank] };
}
case EventHubListenerMode.Distribute:
{
return DistributeOverServicePartitions(orderedEventHubPartitionIds);
}
case EventHubListenerMode.SafeDistribute:
{
// we can work with service partitions < or = Event Hub partitions
// anything else is an error case
if (OrderedServicePartitionIds.Length > orderedEventHubPartitionIds.Length)
throw new InvalidOperationException("Event Hub listener is in fairDistribute mode yet servie partitions greater than event hub partitions");
return DistributeOverServicePartitions(orderedEventHubPartitionIds);
}
default:
{
throw new InvalidOperationException(string.Format("can not resolve event hub partition for {0}", this.ListenerMode.ToString()));
}
}
throw new InvalidOperationException("could not resolve event hub partitions");
}