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..."); } }
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); }
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); } }
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); } }
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); } }
public XuLiskovRequest(RequestData requestData, EXuLiskovOperation operation) : base(requestData) { Operation = operation; }