Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to enumerate all partitions and aggregate results

I have a multiple partitioned stateful service. How can I enumerate all its partitions and aggregate results, using service remoting for communication between client and service?

like image 711
akrsmv Avatar asked Jun 12 '16 13:06

akrsmv


1 Answers

You can enumerable the partitions using FabricClient:

var serviceName = new Uri("fabric:/MyApp/MyService");
using (var client = new FabricClient())
{
    var partitions = await client.QueryManager.GetPartitionListAsync(serviceName);

    foreach (var partition in partitions)
    {
        Debug.Assert(partition.PartitionInformation.Kind == ServicePartitionKind.Int64Range);
        var partitionInformation = (Int64RangePartitionInformation)partition.PartitionInformation;
        var proxy = ServiceProxy.Create<IMyService>(serviceName, new ServicePartitionKey(partitionInformation.LowKey));
        // TODO: call service
    }
}

Note that you should probably cache the results of GetPartitionListAsync since service partitions cannot be changed without recreating the service (you can just keep a list of the LowKey values).

In addition, FabricClient should also be shared as much as possible (see the documentation).

like image 76
Eli Arbel Avatar answered Nov 04 '22 21:11

Eli Arbel