From 229bef9651be4ad8c96cde9ff599b459ea4ce59e Mon Sep 17 00:00:00 2001 From: Csaba Kiraly Date: Tue, 28 Feb 2023 10:06:39 +0100 Subject: [PATCH] add send/receive abstaction Signed-off-by: Csaba Kiraly --- DAS/simulator.py | 12 ++++++------ DAS/validator.py | 12 ++++++++---- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/DAS/simulator.py b/DAS/simulator.py index dbd1b37..95a9644 100644 --- a/DAS/simulator.py +++ b/DAS/simulator.py @@ -67,8 +67,8 @@ class Simulator: for u, v in G.edges: val1=rowChannels[id][u] val2=rowChannels[id][v] - val1.rowNeighbors[id].update({val2.ID : Neighbor(val2, 0, self.shape.blockSize)}) - val2.rowNeighbors[id].update({val1.ID : Neighbor(val1, 0, self.shape.blockSize)}) + val1.rowNeighbors[id].update({val2.ID : Neighbor(val1, val2, 0, self.shape.blockSize)}) + val2.rowNeighbors[id].update({val1.ID : Neighbor(val2, val1, 0, self.shape.blockSize)}) if (len(columnChannels[id]) <= self.shape.netDegree): self.logger.debug("Graph fully connected with degree %d !" % (len(columnChannels[id]) - 1), extra=self.format) @@ -80,8 +80,8 @@ class Simulator: for u, v in G.edges: val1=columnChannels[id][u] val2=columnChannels[id][v] - val1.columnNeighbors[id].update({val2.ID : Neighbor(val2, 1, self.shape.blockSize)}) - val2.columnNeighbors[id].update({val1.ID : Neighbor(val1, 1, self.shape.blockSize)}) + val1.columnNeighbors[id].update({val2.ID : Neighbor(val1, val2, 1, self.shape.blockSize)}) + val2.columnNeighbors[id].update({val1.ID : Neighbor(val2, val1, 1, self.shape.blockSize)}) for v in self.validators: if (self.proposerPublishOnly and v.amIproposer): @@ -89,12 +89,12 @@ class Simulator: count = min(self.proposerPublishTo, len(rowChannels[id])) publishTo = random.sample(rowChannels[id], count) for vi in publishTo: - v.rowNeighbors[id].update({vi.ID : Neighbor(vi, 0, self.shape.blockSize)}) + v.rowNeighbors[id].update({vi.ID : Neighbor(v, vi, 0, self.shape.blockSize)}) for id in v.columnIDs: count = min(self.proposerPublishTo, len(columnChannels[id])) publishTo = random.sample(columnChannels[id], count) for vi in publishTo: - v.columnNeighbors[id].update({vi.ID : Neighbor(vi, 1, self.shape.blockSize)}) + v.columnNeighbors[id].update({vi.ID : Neighbor(v, vi, 1, self.shape.blockSize)}) if self.logger.isEnabledFor(logging.DEBUG): for i in range(0, self.shape.numberValidators): diff --git a/DAS/validator.py b/DAS/validator.py index 7b52e58..72cca90 100644 --- a/DAS/validator.py +++ b/DAS/validator.py @@ -21,15 +21,19 @@ class Neighbor: """It returns the amount of sent and received data.""" return "%d:%d/%d, q:%d" % (self.node.ID, self.sent.count(1), self.received.count(1), len(self.sendQueue)) - def __init__(self, v, dim, blockSize): + def __init__(self, src, dst, dim, blockSize): """It initializes the neighbor with the node and sets counters to zero.""" - self.node = v + self.src = src + self.dst = dst self.dim = dim # 0:row 1:col self.receiving = zeros(blockSize) self.received = zeros(blockSize) self.sent = zeros(blockSize) self.sendQueue = deque() + def sendSegment(self, lineId, id): + self.dst.receiveSegment(lineId, id, self.src.ID) + class Validator: """This class implements a validator/node in the network.""" @@ -210,10 +214,10 @@ class Validator: def sendSegmentToNeigh(self, rID, cID, neigh): """Send segment to a neighbor (without checks).""" - self.logger.debug("sending %d/%d to %d", rID, cID, neigh.node.ID, extra=self.format) + self.logger.debug("sending %d/%d to %d", rID, cID, neigh.dst.ID, extra=self.format) i = rID if neigh.dim else cID neigh.sent[i] = 1 - neigh.node.receiveSegment(rID, cID, self.ID) + neigh.sendSegment(rID, cID) self.statsTxInSlot += 1 def checkSendSegmentToNeigh(self, rID, cID, neigh):