public PartitionSchemaReply PartitionSchemaMe(PartitionSchemaRequest request) { Console.WriteLine("Received Partition Schema from pm"); foreach (var partitionDetails in request.PartitionServers) { if (!ServersByPartition.ContainsKey(partitionDetails.Key)) { if (!ServersByPartition.TryAdd(partitionDetails.Key, partitionDetails.Value.ServerIds.ToList())) { throw new RpcException(new Status(StatusCode.Unknown, "Could not add element")); } } } foreach (var serverUrl in request.ServerUrls) { if (!ServerUrls.ContainsKey(serverUrl.Key)) { ServerUrls[serverUrl.Key] = serverUrl.Value; } } foreach (var masteredPartition in request.MasteredPartitions.PartitionIds) { MasteredPartitions.Add(masteredPartition); } return(new PartitionSchemaReply()); }
public void SendInformationToServer() { var request = new PartitionSchemaRequest(); List <string> mastered = new List <string>(); foreach (var partition in Partitions) { request.PartitionServers[partition.Key] = new PartitionInfo { ServerIds = { partition.Value.ServerIds } }; if (partition.Value.ServerIds[0] == Id) { // server master of this partition mastered.Add(partition.Key); } } foreach (var server in Servers.Values) { request.ServerUrls[server.Id] = server.Url; } request.MasteredPartitions = new MasteredInfo { PartitionIds = { mastered } }; Grpc.PartitionSchema(request); }
public override Task <PartitionSchemaReply> PartitionSchema(PartitionSchemaRequest request, ServerCallContext context) { return(Task.FromResult(PartitionSchemaMe(request))); }