public override Task <WriteAdvancedResponse> writeAdvanced(WriteAdvancedRequest request, ServerCallContext context) { _freezeUtilities.WaitForUnfreeze(); delayFunction(); return(Task.FromResult(WriteAdvanced(request))); }
private void WriteAdvanced(string partitionId, string objectId, string objectValue) { var request = new WriteAdvancedRequest { PartitionId = partitionId, ObjectId = objectId, ObjectValue = objectValue }; try { var response = _client.writeAdvanced(request); //Console.WriteLine("Am i here?"); switch (response.ResponseCase) { case WriteAdvancedResponse.ResponseOneofCase.Timestamp: Console.WriteLine("Advanced Write Successful"); _previousStorage.WriteToCache(partitionId, objectId, objectValue, response.Timestamp); break; case WriteAdvancedResponse.ResponseOneofCase.MasterServerUrl: Console.WriteLine($"Advanced Write - Changing to server {response.MasterServerUrl.ServerUrl}"); _usedUrl = response.MasterServerUrl.ServerUrl; _client = BuildClientFromServerUrl(response.MasterServerUrl.ServerUrl); WriteAdvanced(partitionId, objectId, objectValue); break; case WriteAdvancedResponse.ResponseOneofCase.None: Console.WriteLine("Unexpected Error"); break; default: throw new ArgumentOutOfRangeException(); } } catch (RpcException) { ConnectToNewServer(partitionId); Write(partitionId, objectId, objectValue); return; } catch (Exception e) { Console.WriteLine("Error Writing"); Console.WriteLine(e.Message); Console.ReadLine(); } }
private WriteAdvancedResponse WriteAdvanced(WriteAdvancedRequest request) { Console.WriteLine("Received Write request. Id - " + request.ObjectId + ". Value" + request.ObjectValue); try { var partitionId = request.PartitionId; var objectId = request.ObjectId; var objectValue = request.ObjectValue; var partition = _storage.GetPartitionOrThrowException(partitionId); if (partition.IsMaster) { Console.WriteLine("I'm the master of this partition"); var timestamp = _storage.WriteAdvancedMaster(partitionId, objectId, objectValue, -1); return(new WriteAdvancedResponse { Timestamp = timestamp }); } Console.WriteLine("I'm not the master of this partition"); var url = _storage.GetMasterUrl(request.PartitionId); return(new WriteAdvancedResponse { MasterServerUrl = new ServerUrlResponse { ServerUrl = url } }); } catch (Exception e) { Console.WriteLine("I don't have the partition"); Console.WriteLine(e.Message); Console.WriteLine(e.StackTrace); Console.WriteLine("End of exception"); return(new WriteAdvancedResponse()); } }