public override Task <AppendEntriesReply> AppendEntries(AppendEntriesRequest req, ServerCallContext _) { man.CheckFreeze(); var sInfo = new ServerInfo(req.Mid, req.Tag, req.Term); var entries = new List <KeyValuePair <string, string> >(); foreach (var e in req.Entries) { entries.Add(new KeyValuePair <string, string>(e.IdObj, e.Val)); } var mySInfo = man.RcvAppendEntries(req.IdPart, sInfo, entries); if (mySInfo.Term <= sInfo.Term) { foreach (var e in entries) { store.Write(req.IdPart, e.Key, e.Value); } } var res = new AppendEntriesReply { Term = mySInfo.Term, Tag = mySInfo.Tag, Mid = mySInfo.Mid }; Lib.Sleep(new Random().Next(minDelay, maxDelay)); return(Task.FromResult(res)); }
public override Task <UpdateReply> Update(UpdateRequest req, ServerCallContext _) { man.CheckFreeze(); store.Write(req.IdPart, req.IdObj, req.Val); Lib.Sleep(new Random().Next(minDelay, maxDelay)); return(Task.FromResult(new UpdateReply())); }
public override Task <WriteReply> Write(WriteRequest req, ServerCallContext _) { man.CheckFreeze(); if (!man.WritePermission(req.IdPart)) { throw new GRPCException(StatusCode.PermissionDenied, ErrorMessage.W_DENIED, req.IdPart); } store.Lock(req.IdPart, req.IdObj); man.Lock(req.IdPart, req.IdObj); store.Write(req.IdPart, req.IdObj, req.Val); man.Update(req.IdPart, req.IdObj, req.Val); Lib.Sleep(new Random().Next(minDelay, maxDelay)); return(Task.FromResult(new WriteReply())); }
public override Task <WriteReply> Write(WriteRequest req, ServerCallContext _) { man.CheckFreeze(); if (ServerManager.RInfos[req.IdPart].IsMaster()) { if (man.Write(req.IdPart, req.IdObj, req.Val)) { store.Write(req.IdPart, req.IdObj, req.Val); } } var res = new WriteReply() { Mid = ServerManager.SParts[req.IdPart].Mid }; Lib.Sleep(new Random().Next(minDelay, maxDelay)); return(Task.FromResult(res)); }