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);
     }
 }