collab: незащищённый workspaceRepo.findById в onStoreDocument может потерять финальное сохранение страницы #76
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Найдено в multi-aspect code review всех изменений с коммита
053a9c0d(ветка develop).Грань: stability · Severity: warning
Где:
apps/server/src/collaboration/extensions/persistence.extension.ts:155-157Проблема
await this.workspaceRepo.findById(...)добавлен в начало onStoreDocument, ВНЕ try/catch транзакции персистенции (начинается на ~строке 198, глотает свои ошибки). Merged ydoc-снапшот уже вычислен в памяти (tiptapJson, строка 123). Если этот lookup упадёт (транзиентная ошибка БД, исчерпание пула, сеть), весь промис onStoreDocument отклонится до записи контента. При unloadImmediately:false + debounce отклонение на финальном unload-store (последний клиент отключился / shutdown) теряет правки этого окна после вытеснения документа из памяти. Подтверждено чтением кода: lookup вне try.Предлагаемый фикс
Обернуть lookup настроек воркспейса в свой try/catch и fail-closed в "feature disabled":
let htmlEmbedEnabled=false; try { htmlEmbedEnabled = isHtmlEmbedFeatureEnabled((await this.workspaceRepo.findById(...))?.settings); } catch (err) { this.logger.warn(...); }— чтобы сбой lookup стрипал embed, а не срывал весь store.