Esempio n. 1
0
 public override Task <WriteAdvancedResponse> writeAdvanced(WriteAdvancedRequest request,
                                                            ServerCallContext context)
 {
     _freezeUtilities.WaitForUnfreeze();
     delayFunction();
     return(Task.FromResult(WriteAdvanced(request)));
 }
Esempio n. 2
0
        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();
            }
        }
Esempio n. 3
0
        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());
            }
        }