Skip to content

Commit

Permalink
fix free space calculation, test it and give a margin of 10mb before …
Browse files Browse the repository at this point in the history
…starting so it doesnt insist when full
  • Loading branch information
shyba committed Oct 25, 2021
1 parent 94f9377 commit 0a8618f
Show file tree
Hide file tree
Showing 3 changed files with 6 additions and 3 deletions.
4 changes: 2 additions & 2 deletions lbry/blob/disk_space_manager.py
Expand Up @@ -15,9 +15,9 @@ def __init__(self, config, db, blob_manager, cleaning_interval=30 * 60, analytic
self.task = None
self.analytics = analytics

async def get_free_space_bytes(self, is_network_blob=False):
async def get_free_space_mb(self, is_network_blob=False):
limit_mb = self.config.network_storage_limit if is_network_blob else self.config.blob_storage_limit
return max(0, limit_mb*1024*1024 - (await self.get_space_used_mb(is_network_blob)))
return max(0, limit_mb - (await self.get_space_used_mb(is_network_blob)))

async def get_space_used_bytes(self, is_network_blob=False):
return await self.db.get_stored_blob_disk_usage(is_network_blob=is_network_blob)
Expand Down
3 changes: 2 additions & 1 deletion lbry/extras/daemon/components.py
Expand Up @@ -403,11 +403,12 @@ def component(self) -> 'BackgroundDownloaderComponent':

async def get_status(self):
return {'running': self.task is not None and not self.task.done(),
'available_free_space': await self.space_manager.get_free_space_mb(True),
'ongoing_download': self.is_busy}

async def loop(self):
while True:
if not self.is_busy and await self.space_manager.get_free_space_bytes(True) > 0:
if not self.is_busy and await self.space_manager.get_free_space_mb(True) > 10:
blob_hash = self.dht_node.last_requested_blob_hash
if blob_hash:
self.ongoing_download = asyncio.create_task(self.background_downloader.download_blobs(blob_hash))
Expand Down
2 changes: 2 additions & 0 deletions tests/integration/datanetwork/test_file_commands.py
Expand Up @@ -629,6 +629,8 @@ async def test_ensure_download(self):
await self.assertBlobs(content2)
self.assertEqual('0', (await self.status())['disk_space']['space_used'])
self.assertEqual('16', (await self.status())['disk_space']['network_seeding_space_used'])
self.daemon.conf.network_storage_limit = 100
self.assertEqual(84, (await self.status())['background_downloader']['available_free_space'])

# tests that an attempt to download something that isn't a sd blob will download the single blob and stop
blobs = await self.get_blobs_from_sd_blob(self.reflector.blob_manager.get_blob(content1))
Expand Down

0 comments on commit 0a8618f

Please sign in to comment.