mirror of
https://github.com/codex-storage/das-research.git
synced 2025-02-23 16:28:27 +00:00
fix queuing: should queue after repair
If operation is based on send queues, segments should be queued after successful repair. Signed-off-by: Csaba Kiraly <csaba.kiraly@gmail.com>
This commit is contained in:
parent
dff0e5523a
commit
f05c3cd233
22
DAS/block.py
22
DAS/block.py
@ -35,10 +35,17 @@ class Block:
|
|||||||
self.data[columnID::self.blockSize] |= column
|
self.data[columnID::self.blockSize] |= column
|
||||||
|
|
||||||
def repairColumn(self, id):
|
def repairColumn(self, id):
|
||||||
"""It repairs the entire column if it has at least blockSize/2 ones."""
|
"""It repairs the entire column if it has at least blockSize/2 ones.
|
||||||
success = self.data[id::self.blockSize].count(1)
|
Returns: list of repaired segments
|
||||||
|
"""
|
||||||
|
line = self.data[id::self.blockSize]
|
||||||
|
success = line.count(1)
|
||||||
if success >= self.blockSize/2:
|
if success >= self.blockSize/2:
|
||||||
|
ret = ~line
|
||||||
self.data[id::self.blockSize] = 1
|
self.data[id::self.blockSize] = 1
|
||||||
|
else:
|
||||||
|
ret = zeros(self.blockSize)
|
||||||
|
return ret
|
||||||
|
|
||||||
def getRow(self, rowID):
|
def getRow(self, rowID):
|
||||||
"""It returns the block row corresponding to rowID."""
|
"""It returns the block row corresponding to rowID."""
|
||||||
@ -49,10 +56,17 @@ class Block:
|
|||||||
self.data[rowID*self.blockSize:(rowID+1)*self.blockSize] |= row
|
self.data[rowID*self.blockSize:(rowID+1)*self.blockSize] |= row
|
||||||
|
|
||||||
def repairRow(self, id):
|
def repairRow(self, id):
|
||||||
"""It repairs the entire row if it has at least blockSize/2 ones."""
|
"""It repairs the entire row if it has at least blockSize/2 ones.
|
||||||
success = self.data[id*self.blockSize:(id+1)*self.blockSize].count(1)
|
Returns: list of repaired segments
|
||||||
|
"""
|
||||||
|
line = self.data[id*self.blockSize:(id+1)*self.blockSize]
|
||||||
|
success = line.count(1)
|
||||||
if success >= self.blockSize/2:
|
if success >= self.blockSize/2:
|
||||||
|
ret = ~line
|
||||||
self.data[id*self.blockSize:(id+1)*self.blockSize] = 1
|
self.data[id*self.blockSize:(id+1)*self.blockSize] = 1
|
||||||
|
else:
|
||||||
|
ret = zeros(self.blockSize)
|
||||||
|
return ret
|
||||||
|
|
||||||
def print(self):
|
def print(self):
|
||||||
"""It prints the block in the terminal (outside of the logger rules))."""
|
"""It prints the block in the terminal (outside of the logger rules))."""
|
||||||
|
@ -446,12 +446,28 @@ class Validator:
|
|||||||
def restoreRows(self):
|
def restoreRows(self):
|
||||||
"""It restores the rows assigned to the validator, that can be repaired."""
|
"""It restores the rows assigned to the validator, that can be repaired."""
|
||||||
for id in self.rowIDs:
|
for id in self.rowIDs:
|
||||||
self.block.repairRow(id)
|
rep = self.block.repairRow(id)
|
||||||
|
if (rep.any()):
|
||||||
|
# If operation is based on send queues, segments should
|
||||||
|
# be queued after successful repair.
|
||||||
|
for i in range(len(rep)):
|
||||||
|
if rep[i]:
|
||||||
|
self.logger.debug("Rep: %d,%d", id, i, extra=self.format)
|
||||||
|
self.addToSendQueue(id, i)
|
||||||
|
# self.statsRepairInSlot += rep.count(1)
|
||||||
|
|
||||||
def restoreColumns(self):
|
def restoreColumns(self):
|
||||||
"""It restores the columns assigned to the validator, that can be repaired."""
|
"""It restores the columns assigned to the validator, that can be repaired."""
|
||||||
for id in self.columnIDs:
|
for id in self.columnIDs:
|
||||||
self.block.repairColumn(id)
|
rep = self.block.repairColumn(id)
|
||||||
|
if (rep.any()):
|
||||||
|
# If operation is based on send queues, segments should
|
||||||
|
# be queued after successful repair.
|
||||||
|
for i in range(len(rep)):
|
||||||
|
if rep[i]:
|
||||||
|
self.logger.debug("Rep: %d,%d", i, id, extra=self.format)
|
||||||
|
self.addToSendQueue(i, id)
|
||||||
|
# self.statsRepairInSlot += rep.count(1)
|
||||||
|
|
||||||
def checkStatus(self):
|
def checkStatus(self):
|
||||||
"""It checks how many expected/arrived samples are for each assigned row/column."""
|
"""It checks how many expected/arrived samples are for each assigned row/column."""
|
||||||
|
Loading…
x
Reference in New Issue
Block a user