MCPcopy
hub / github.com/HelloZeroNet/ZeroNet / read

Method read

plugins/Bigfile/BigfilePlugin.py:500–542  ·  view source on GitHub ↗
(self, buff=64 * 1024)

Source from the content-addressed store, hash-verified

498 self.read_lock = gevent.lock.Semaphore()
499
500 def read(self, buff=64 * 1024):
501 with self.read_lock:
502 pos = self.f.tell()
503 read_until = min(self.size, pos + buff)
504 requests = []
505 # Request all required blocks
506 while 1:
507 piece_i = int(pos / self.piece_size)
508 if piece_i * self.piece_size >= read_until:
509 break
510 pos_from = piece_i * self.piece_size
511 pos_to = pos_from + self.piece_size
512 if not self.piecefield[piece_i]:
513 requests.append(self.site.needFile("%s|%s-%s" % (self.inner_path, pos_from, pos_to), blocking=False, update=True, priority=10))
514 pos += self.piece_size
515
516 if not all(requests):
517 return None
518
519 # Request prebuffer
520 if self.prebuffer:
521 prebuffer_until = min(self.size, read_until + self.prebuffer)
522 priority = 3
523 while 1:
524 piece_i = int(pos / self.piece_size)
525 if piece_i * self.piece_size >= prebuffer_until:
526 break
527 pos_from = piece_i * self.piece_size
528 pos_to = pos_from + self.piece_size
529 if not self.piecefield[piece_i]:
530 self.site.needFile("%s|%s-%s" % (self.inner_path, pos_from, pos_to), blocking=False, update=True, priority=max(0, priority))
531 priority -= 1
532 pos += self.piece_size
533
534 gevent.joinall(requests)
535 self.read_bytes += buff
536
537 # Increase buffer for long reads
538 if self.read_bytes > 7 * 1024 * 1024 and self.prebuffer < 5 * 1024 * 1024:
539 self.site.log.debug("%s: Increasing bigfile buffer size to 5MB..." % self.inner_path)
540 self.prebuffer = 5 * 1024 * 1024
541
542 return self.f.read(buff)
543
544 def seek(self, pos, whence=0):
545 with self.read_lock:

Callers 13

readFileMethod · 0.45
getPiecemapMethod · 0.45
checkBigfileMethod · 0.45
isReadableMethod · 0.45
testPiecemapCreateMethod · 0.45
testVerifyPieceMethod · 0.45
testSparseFileMethod · 0.45
testOpenBigfileMethod · 0.45
testFileGetMethod · 0.45
testDownloadStatsMethod · 0.45
testPrebufferMethod · 0.45

Calls 2

tellMethod · 0.45
needFileMethod · 0.45

Tested by 9

testPiecemapCreateMethod · 0.36
testVerifyPieceMethod · 0.36
testSparseFileMethod · 0.36
testOpenBigfileMethod · 0.36
testFileGetMethod · 0.36
testDownloadStatsMethod · 0.36
testPrebufferMethod · 0.36
testFileRenameMethod · 0.36