コード例 #1
0
        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());
        }
コード例 #2
0
            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);
            }
コード例 #3
0
 public override Task <PartitionSchemaReply> PartitionSchema(PartitionSchemaRequest request, ServerCallContext context)
 {
     return(Task.FromResult(PartitionSchemaMe(request)));
 }