From 9efefe36930bfbef13ca0a9799c3056caa906f76 Mon Sep 17 00:00:00 2001 From: Alexander Onnikov Date: Mon, 28 Apr 2025 09:24:35 +0700 Subject: [PATCH] fix: add more logs do collaborator doc saving (#8721) --- .../src/extensions/authentication.ts | 7 +++- server/collaborator/src/extensions/storage.ts | 36 +++++++++++++------ server/collaborator/src/storage/platform.ts | 2 ++ 3 files changed, 33 insertions(+), 12 deletions(-) diff --git a/server/collaborator/src/extensions/authentication.ts b/server/collaborator/src/extensions/authentication.ts index 58d0d52b19..cea8d66336 100644 --- a/server/collaborator/src/extensions/authentication.ts +++ b/server/collaborator/src/extensions/authentication.ts @@ -40,7 +40,12 @@ export class AuthenticationExtension implements Extension { const token = decodeToken(data.token) const readonly = isGuest(token) - ctx.info('authenticate', { workspaceId, mode: token.extra?.mode ?? '', readonly }) + ctx.info('authenticate', { + workspaceId, + account: token.account, + mode: token.extra?.mode ?? '', + readonly + }) if (readonly) { data.connection.readOnly = true diff --git a/server/collaborator/src/extensions/storage.ts b/server/collaborator/src/extensions/storage.ts index ae87465bbc..d216027e5b 100644 --- a/server/collaborator/src/extensions/storage.ts +++ b/server/collaborator/src/extensions/storage.ts @@ -43,7 +43,7 @@ type ConnectionId = string interface DocumentUpdates { context: Context - collaborators: Set + collaborators: Map } export class StorageExtension implements Extension { @@ -55,16 +55,21 @@ export class StorageExtension implements Extension { this.configuration = configuration } - async onChange ({ context, documentName }: withContext): Promise { + async onChange ({ context, document, documentName }: withContext): Promise { const { connectionId } = context + if (document.isLoading) { + console.warn('document changed while is loading', { documentName, connectionId }) + return + } + const updates = this.updates.get(documentName) if (updates === undefined) { - const collaborators = new Set([connectionId]) + const collaborators = new Map([[connectionId, Date.now()]]) this.updates.set(documentName, { context, collaborators }) } else { updates.context = context - updates.collaborators.add(connectionId) + updates.collaborators.set(connectionId, Date.now()) } } @@ -92,15 +97,17 @@ export class StorageExtension implements Extension { const { ctx } = this.configuration const { connectionId } = context - ctx.info('store document', { documentName, connectionId }) - const updates = this.updates.get(documentName) + const connections = document.getConnectionsCount() + const collaborators = updates?.collaborators.size ?? 0 + ctx.info('store document', { documentName, connectionId, connections, collaborators }) + if (updates === undefined || updates.collaborators.size === 0) { ctx.info('no changes for document', { documentName, connectionId }) return } - updates.collaborators = new Set() + updates.collaborators.clear() await this.storeDocument(documentName, document, updates.context) } @@ -114,16 +121,23 @@ export class StorageExtension implements Extension { const { ctx } = this.configuration const { connectionId } = context - const params = { documentName, connectionId, connections: document.getConnectionsCount() } - ctx.info('disconnect from document', params) - const updates = this.updates.get(documentName) + const connections = document.getConnectionsCount() + const collaborators = updates?.collaborators.size ?? 0 + const updatedAt = updates?.collaborators.get(connectionId) + ctx.info('disconnect from document', { documentName, connectionId, connections, collaborators, updatedAt }) + if (updates === undefined || !updates.collaborators.has(connectionId)) { ctx.info('no changes for document', { documentName, connectionId }) return } - updates.collaborators = new Set() + if (document.isLoading) { + ctx.warn('document is loading', { documentName, connectionId }) + return + } + + updates.collaborators.clear() await this.storeDocument(documentName, document, context) } diff --git a/server/collaborator/src/storage/platform.ts b/server/collaborator/src/storage/platform.ts index 2b90d59bd9..3321052dd2 100644 --- a/server/collaborator/src/storage/platform.ts +++ b/server/collaborator/src/storage/platform.ts @@ -44,6 +44,7 @@ export class PlatformStorageAdapter implements CollabStorageAdapter { }) if (ydoc !== undefined) { + ctx.info('loaded from storage', { documentName }) return ydoc } } catch (err: any) { @@ -69,6 +70,7 @@ export class PlatformStorageAdapter implements CollabStorageAdapter { // it to ensure the next time we load it from the ydoc document await saveCollabYdoc(ctx, this.storage, wsIds, documentId, ydoc) + ctx.info('loaded from initial content', { documentName, content }) return ydoc } } catch (err: any) {