public ReadReply ReadHandler(ReadRequest request) { Partition partition = server.getPartition(request.ObjectKey.PartitionId); int partitionClock = partition.getClock(); Console.WriteLine(">>> PartitionName=" + request.ObjectKey.PartitionId + ", PartitionClock=" + partitionClock); ReadReply reply; try { DataStoreValue value = partition.getData(new DataStoreKey(request.ObjectKey.PartitionId, request.ObjectKey.ObjectId)); reply = new ReadReply { Object = new DataStoreValueDto { Val = value.val }, ObjectExists = true, PartitionClock = partitionClock }; } catch (Exception) { reply = new ReadReply { Object = new DataStoreValueDto { Val = "NA" }, ObjectExists = false, PartitionClock = partitionClock }; } return(reply); }
public void write_new_value_locally(Partition partition, WriteRequest request) { DataStoreKey key = Utilities.ConvertKeyDtoToDomain(request.ObjectKey); DataStoreValue value = Utilities.ConvertValueDtoToDomain(request.Object); partition.addNewOrUpdateExisting(key, value); }
public ReadReply ReadHandler(ReadRequest request) { Partition partition = server.getPartition(request.ObjectKey.PartitionId); ReadReply reply = null; try { DataStoreValue value = partition.getData(new DataStoreKey(request.ObjectKey.PartitionId, request.ObjectKey.ObjectId)); reply = new ReadReply { Object = new DataStoreValueDto { Val = value.val }, ObjectExists = true }; } catch (Exception) { reply = new ReadReply { Object = new DataStoreValueDto { Val = "NA" }, ObjectExists = false }; } return(reply); }
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 })); }
private Task <IEnumerable <DataStoreValue> > Query(string query, object args = null) { return(RawQuery <DataStoreValue>(query, args, (reader) => { var row = new DataStoreValue(); for (int i = 0; i < reader.FieldCount; i++) { var column = reader.GetName(i); if (column == "rowid") { row.Id = reader.GetInt32(i); } else if (column == "key") { row.Key = reader.GetString(i); } else if (column == "value") { row.Value = reader.GetString(i); } } return row; })); }
public void atomicWriteLocallyAndUpdateClock(Partition partition) { try { Monitor.Enter(atomic_lock); // Logs data int incrementedClock = partition.incrementClock(); DataStoreValue value = Utilities.ConvertValueDtoToDomain(request.Object); // --------------- write_new_value_locally(partition, request); Console.WriteLine(">>> Master: Atomic operation Update<clock, value> = <" + incrementedClock + "," + value.val + ">"); } catch { Console.WriteLine(">>> Exception occured during atomic write"); } finally { Monitor.Exit(atomic_lock); } }
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); } }