Example #1
0
        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));
        }
Example #2
0
        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()));
        }
Example #3
0
        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()));
        }
Example #4
0
        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));
        }