From 5735123f5060bd4b383a766a3a68a64affb49d85 Mon Sep 17 00:00:00 2001 From: Sven Horvath <226917856+svenhorvath@users.noreply.github.com> Date: Tue, 25 Aug 2026 00:47:43 +0200 Subject: [PATCH] fix: keep the pending note save when an update carries no content snapshot (#28669) stop_item_tasks() ran unconditionally while create_task() only ran when the update carried data, so an update without a content snapshot cancelled the pending save without scheduling a replacement and the edits were never written. --- backend/open_webui/socket/main.py | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/backend/open_webui/socket/main.py b/backend/open_webui/socket/main.py index 58f049dc91..8ffdeeadb3 100644 --- a/backend/open_webui/socket/main.py +++ b/backend/open_webui/socket/main.py @@ -803,11 +803,6 @@ async def yjs_document_update(sid, data): log.warning(f'User {user.get("id")} does not have write access to note {note_id}. Rejecting update.') return - try: - await stop_item_tasks(REDIS, document_id) - except Exception: - pass - user_id = data.get('user_id', sid) update = data['update'] # List of bytes from frontend @@ -835,6 +830,16 @@ async def yjs_document_update(sid, data): await document_save_handler(document_id, data.get('data', {}), user) if data.get('data'): + # Only drop the pending save when a new one takes its place. + # Updates without a content snapshot (the resync a client sends + # after rejoining a document) would otherwise cancel the pending + # save without scheduling a replacement, so the edits made just + # before the resync never reach the database. + try: + await stop_item_tasks(REDIS, document_id) + except Exception: + pass + await create_task(REDIS, debounced_save(), document_id) except Exception as e: