perf(retrieval): make URL fetch and file hash non-blocking with asyncio.to_thread (#25822)
- Wrap get_content_from_url() in asyncio.to_thread() inside get_sources_from_items() to prevent sync requests.get() from blocking the event loop when users attach URL sources to chat messages. The same function was already properly wrapped at retrieval.py:1839. - Wrap hashlib.sha256(contents).hexdigest() in asyncio.to_thread() inside upload_file_handler() to prevent CPU-bound hashing from blocking the event loop during file uploads (44ms/100MB, scales linearly with file size).
This commit is contained in:
@@ -341,7 +341,9 @@ async def upload_file_handler(
|
||||
|
||||
# SHA-256 of raw uploaded bytes for incremental sync diffing.
|
||||
# If the client pre-computed and sent file_hash, use that.
|
||||
file_hash = file_metadata.get('file_hash') or hashlib.sha256(contents).hexdigest()
|
||||
file_hash = file_metadata.get('file_hash') or await asyncio.to_thread(
|
||||
lambda: hashlib.sha256(contents).hexdigest()
|
||||
)
|
||||
|
||||
file_item = await Files.insert_new_file(
|
||||
user.id,
|
||||
|
||||
Reference in New Issue
Block a user