From 14066965fac8b10003a014678b346194cba04077 Mon Sep 17 00:00:00 2001 From: forehalo Date: Mon, 26 Aug 2024 06:11:22 +0000 Subject: [PATCH] fix(server): wrong table used for userspace data (#7969) --- .../server/src/core/doc/adapters/userspace.ts | 12 ++++++++---- packages/backend/server/src/core/sync/gateway.ts | 9 ++------- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/packages/backend/server/src/core/doc/adapters/userspace.ts b/packages/backend/server/src/core/doc/adapters/userspace.ts index 14165ba5c9..b5fd9a2655 100644 --- a/packages/backend/server/src/core/doc/adapters/userspace.ts +++ b/packages/backend/server/src/core/doc/adapters/userspace.ts @@ -37,6 +37,10 @@ export class PgUserspaceDocStorageAdapter extends DocStorageAdapter { return false; } + override async rollbackDoc() { + return; + } + override async getDoc(spaceId: string, docId: string) { return this.getDocSnapshot(spaceId, docId); } @@ -137,10 +141,10 @@ export class PgUserspaceDocStorageAdapter extends DocStorageAdapter { protected async setDocSnapshot(snapshot: DocRecord) { // we always get lock before writing to user snapshot table, // so a simple upsert without testing on updatedAt is safe - await this.db.snapshot.upsert({ + await this.db.userSnapshot.upsert({ where: { - id_workspaceId: { - workspaceId: snapshot.spaceId, + userId_id: { + userId: snapshot.spaceId, id: snapshot.docId, }, }, @@ -149,7 +153,7 @@ export class PgUserspaceDocStorageAdapter extends DocStorageAdapter { updatedAt: new Date(snapshot.timestamp), }, create: { - workspaceId: snapshot.spaceId, + userId: snapshot.spaceId, id: snapshot.docId, blob: Buffer.from(snapshot.bin), createdAt: new Date(snapshot.timestamp), diff --git a/packages/backend/server/src/core/sync/gateway.ts b/packages/backend/server/src/core/sync/gateway.ts index 9f22099449..b026c430ef 100644 --- a/packages/backend/server/src/core/sync/gateway.ts +++ b/packages/backend/server/src/core/sync/gateway.ts @@ -11,6 +11,7 @@ import { Socket } from 'socket.io'; import { diffUpdate, encodeStateVectorFromUpdate } from 'yjs'; import { + AlreadyInSpace, CallTimer, Config, DocNotFound, @@ -579,8 +580,7 @@ abstract class SyncSocketAdapter { assertNotIn(spaceId: string, roomType: RoomType = 'sync') { if (this.client.rooms.has(this.room(spaceId, roomType))) { - // TODO(@forehalo): use new AlreadyInSpace({ spaceId }) instead - throw new NotInSpace({ spaceId }); + throw new AlreadyInSpace({ spaceId }); } } @@ -621,11 +621,6 @@ class WorkspaceSyncAdapter extends SyncSocketAdapter { super(SpaceType.Workspace, client, storage); } - // backward compatibility - override room(spaceId: string, roomType: RoomType = 'sync') { - return Room(spaceId, roomType); - } - override push(spaceId: string, docId: string, updates: Buffer[]) { const id = new DocID(docId, spaceId); return super.push(spaceId, id.guid, updates);