public static async Task <GStoreObject> Execute(ConnectionManager connectionManager, string partitionId, string serverId, string objectId) { Server server = null; try { server = connectionManager.ChooseServerForRead(partitionId, serverId); if (!server.Alive) { server = null; } } catch (ServerBindException) { // nothing } while (true) { if (server == null) { IImmutableSet <Server> replicas = connectionManager.GetPartitionAliveReplicas(partitionId); Random rnd = new Random(); server = replicas.ElementAt(rnd.Next(0, replicas.Count)); } Console.WriteLine($"Trying: {server.Id}"); GStoreReadRequest gStoreReadRequest = new GStoreReadRequest() { ObjectIdentifier = new DataObjectIdentifier { PartitionId = partitionId, ObjectId = objectId } }; try { GStoreReadReply gStoreReadReply = await server.Stub.ReadAsync(gStoreReadRequest); return(CreateObject(gStoreReadReply.Object)); } catch (Grpc.Core.RpcException e) when(e.StatusCode == Grpc.Core.StatusCode.Internal) { await connectionManager.DeclareDead(server.Id); server = null; } } }
private GStoreReadReply ExecuteRead(GStoreReadRequest request) { Console.WriteLine($"Read request -> PartitionId: {request.ObjectIdentifier.PartitionId} ObjectId: {request.ObjectIdentifier.ObjectId}"); GStoreObjectIdentifier gStoreObjectIdentifier = new GStoreObjectIdentifier(request.ObjectIdentifier.PartitionId, request.ObjectIdentifier.ObjectId); string value = gStore.Read(gStoreObjectIdentifier); if (value == null) { value = "N/A"; } return(new GStoreReadReply { Object = DataObjectBuilder.FromObjectIdentifier(request.ObjectIdentifier, value) }); }
public override Task <GStoreReadReply> Read(GStoreReadRequest request, ServerCallContext context) { return(Task.FromResult(ExecuteRead(request))); }