Skip to content

Commit

Permalink
world: retry chunk read on OSError too
Browse files Browse the repository at this point in the history
Closes #1790.

If a chunk fails reading due to an underlying operating system
IO error, we can invoke the retry logic too. No clue what could
cause this to happen beyond hardware faults.

Also lower the sleep time to 0.25s down from 0.5s because half a
second of sleeping for each chunk this happens on seems incredibly
overkill.

Making the nbt code raise a CorruptChunkError in this case also means
that failing to read a chunk due to an IOError is not a fatal error
anymore, it'll simply skip it and move on.
  • Loading branch information
CounterPillow committed Jun 25, 2020
1 parent c53268e commit 1355f8c
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 6 deletions.
5 changes: 4 additions & 1 deletion overviewer_core/nbt.py
Original file line number Diff line number Diff line change
Expand Up @@ -292,7 +292,10 @@ def load_chunk(self, x, z):
self._file.seek(offset)

# read in the chunk data header
header = self._file.read(5)
try:
header = self._file.read(5)
except OSError as e:
raise CorruptChunkError("An OSError occurred: {}".format(e.strerror))
if len(header) != 5:
raise CorruptChunkError("chunk header is invalid")
data_length, compression = self._chunk_header_format.unpack(header)
Expand Down
9 changes: 4 additions & 5 deletions overviewer_core/world.py
Original file line number Diff line number Diff line change
Expand Up @@ -1355,12 +1355,11 @@ def get_chunk(self, x, z):
except nbt.CorruptionError as e:
tries -= 1
if tries > 0:
# Flush the region cache to possibly read a new region file
# header
logging.debug("Encountered a corrupt chunk at %s,%s. Flushing cache and retrying", x, z)
#logging.debug("Error was:", exc_info=1)
# Flush the region cache to possibly read a new region file header
logging.debug("Encountered a corrupt chunk or read error at %s,%s. "
"Flushing cache and retrying", x, z)
del self.regioncache[regionfile]
time.sleep(0.5)
time.sleep(0.25)
continue
else:
logging.warning("The following was encountered while reading from %s:", self.regiondir)
Expand Down

0 comments on commit 1355f8c

Please sign in to comment.