Example #1
0
        public void Take(XuLiskovRequest request, EXuLiskovOperation operation)
        {
            List <ServerData>       replicasList = backgroundClientView.ReplicasList;
            CancellationTokenSource tokenSource  = new CancellationTokenSource();

            tokenSource.CancelAfter(timeout);
            CancellationToken cancellationToken = tokenSource.Token;

            Utils.Print($" [*] Waiting servers for <TAKE - PHASE 1> Acknowledge...");

            Task <ReplyData>[] tasksArray = InitiateServerCalls(replicasList, request, cancellationToken);

            if (operation == EXuLiskovOperation.TakeOne)
            {
                TakeOne(tasksArray, request, cancellationToken);
            }
            else if (operation == EXuLiskovOperation.TakeTwo)
            {
                TakeTwo(tasksArray, request, cancellationToken);
            }
            else if (operation == EXuLiskovOperation.Unlock)
            {
                TakeUnlock(tasksArray, request, cancellationToken);
            }
            else
            {
                Utils.Print($" [x] Error: Unable to identify <TAKE> phase...");
            }
        }
Example #2
0
        public void ConsumeRequest(DIDATuple tuple, EXuLiskovOperation operation)
        {
            Utils.Print(" [*] Recieved new request...", verbose: Verbose);
            EOperationType  requestOperation = GetPrimitiveOperationType(operation);
            RequestData     requestData      = new RequestData(++requestCounter, backgroundClientView.ViewId, ClientId, $"tcp://localhost:{ClientPort}", tuple, requestOperation);
            XuLiskovRequest request          = new XuLiskovRequest(requestData, operation);

            ExecuteConsumption(request, operation);
        }
Example #3
0
 private void RepeatOperation(EOperationType operationType, XuLiskovRequest request, string reason = "reason not specified")
 {
     if (operationType == EOperationType.Write)
     {
         Utils.Print($" >> Retrying <WRITE> operation, {reason}...");
         Write(request);
     }
     else if (operationType == EOperationType.Read)
     {
         Utils.Print($" >> Retrying <READ> operation, {reason}...");
         Read(request);
     }
     else
     {
         Utils.Print($" >> Retrying <TAKE> operation, {reason}...");
         EXuLiskovOperation concreteOperation = request.Operation;
         Take(request, concreteOperation);
     }
 }
Example #4
0
        private void ExecuteConsumption(XuLiskovRequest request, EXuLiskovOperation operation)
        {
            if (request == null)
            {
                return;
            }

            Utils.Print($" [*] Consuming operation of type: {operation}...", verbose: Verbose);

            if (operation == EXuLiskovOperation.Write)
            {
                Write(request);
            }
            else if (operation == EXuLiskovOperation.Read)
            {
                Read(request);
            }
            else
            {
                Take(request, operation);
            }
        }
Example #5
0
 private EOperationType GetPrimitiveOperationType(EXuLiskovOperation operation)
 {
     if (operation == EXuLiskovOperation.Write)
     {
         return(EOperationType.Write);
     }
     else if (operation == EXuLiskovOperation.Read)
     {
         return(EOperationType.Read);
     }
     else if (operation == EXuLiskovOperation.TakeOne)
     {
         return(EOperationType.Lock);
     }
     else if (operation == EXuLiskovOperation.TakeTwo)
     {
         return(EOperationType.Take);
     }
     else
     {
         return(EOperationType.Unlock);
     }
 }
Example #6
0
 public XuLiskovRequest(RequestData requestData, EXuLiskovOperation operation) : base(requestData)
 {
     Operation = operation;
 }