public override Task <NewValueReply> WriteNewValue(NewValueRequest request, ServerCallContext context) { Partition partition = server.getPartition(current_key.partition_id); DataStoreValue value = new DataStoreValue(); value.val = request.Val; partition.addNewOrUpdateExisting(current_key, value); partition.lockObject(current_key, false); return(Task.FromResult(new NewValueReply { Ok = true })); }
public void AtomicWriteAndUpdateClock(NewValueRequest request, Partition partition, DataStoreValue value) { try { // the server shouldn't respond to client queries during this atomic operation Monitor.Enter(atomic_lock); Console.WriteLine(">>> Replica: Atomic operation Update<Value, Clock> = <" + value.val + "," + request.Clock + ">"); partition.addNewOrUpdateExisting(current_key, value); partition.setClock(request.Clock); } catch { Console.WriteLine(">>> Exception occured during atomic write"); } finally { Monitor.Exit(atomic_lock); } }