diff options
author | Steve Slaven <bpk@hoopajoo.net> | 2009-08-07 22:48:45 (GMT) |
---|---|---|
committer | Steve Slaven <bpk@hoopajoo.net> | 2009-08-07 22:48:45 (GMT) |
commit | b99008d2a0a097fd2d07a78b3a9052b83489736c (patch) | |
tree | 52a5ea8946c04a42ace3fdac86b3204bc9f45804 /FuseArchive | |
parent | bc30ead661de95b2bba2a6e0f0187ff84e1af06a (diff) | |
download | fusearchive-b99008d2a0a097fd2d07a78b3a9052b83489736c.zip fusearchive-b99008d2a0a097fd2d07a78b3a9052b83489736c.tar.gz fusearchive-b99008d2a0a097fd2d07a78b3a9052b83489736c.tar.bz2 |
Don't re-read the entire file in case we are extending it when we don't
have enough blocks, just start from the last block. This increases
performace significantly for large files
Diffstat (limited to 'FuseArchive')
-rw-r--r-- | FuseArchive/ChunkFile.py | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/FuseArchive/ChunkFile.py b/FuseArchive/ChunkFile.py index e19a9fb..b9f114f 100644 --- a/FuseArchive/ChunkFile.py +++ b/FuseArchive/ChunkFile.py @@ -217,7 +217,7 @@ class ChunkFile(object): self.chunks[ self.chunk_index ] = self.chunk # Flush if we have too many dirty chunks - if self.dirty_chunks > dirty_flush: + if self.dirty_chunks >= dirty_flush: self._flush_chunks() # This flushes any cached chunks @@ -288,7 +288,12 @@ class ChunkFile(object): if len( self.chunks ) - 1 < index: logging.debug( "Not enough chunks %d, need %d, extending" % ( len( self.chunks ), index + 1 ) ) - this_index = 0 + + # Start with our last block, in case we need to null pad it out + this_index = len( self.chunks ) - 1 + if this_index < 0: + this_index = 0 + while this_index < index: self._load_chunk( this_index ) fill_null = self.chunk_size - len(self.chunk) |