Wrap SyncManager.sync_user in a per-user asyncio.Lock (raising SyncAlreadyRunning on overlap) and add sync_all_enabled() to fan out across all enabled users with per-user failure isolation via asyncio.gather(return_exceptions=True). The prior sync_user body is renamed to _sync_user_locked with no logic changes.
12 KiB
12 KiB