diff options
Diffstat (limited to 'src/server/GarbageColletor.ts')
-rw-r--r-- | src/server/GarbageColletor.ts | 51 |
1 files changed, 0 insertions, 51 deletions
diff --git a/src/server/GarbageColletor.ts b/src/server/GarbageColletor.ts deleted file mode 100644 index f26b0cec6..000000000 --- a/src/server/GarbageColletor.ts +++ /dev/null @@ -1,51 +0,0 @@ -import { Database } from './database'; - -function addDoc(doc: any, ids: string[]) { - for (const key in doc) { - if (!doc.hasOwnProperty(key)) { - continue; - } - const field = doc[key]; - if (!(field instanceof Object)) { - continue; - } - if (field.__type === "proxy") { - ids.push(field.fieldId); - } else if (field.__type === "list") { - addDoc(field.fields, ids); - } - } -} - -async function GarbageCollect() { - // await new Promise(res => setTimeout(res, 3000)); - const cursor = await Database.Instance.query({}, 'users'); - const users = await cursor.toArray(); - const ids: string[] = users.map(user => user.userDocumentId); - const visited = new Set<string>(); - - while (ids.length) { - const id = ids.pop()!; - if (visited.has(id)) continue; - const doc = await new Promise<{ [key: string]: any }>(res => Database.Instance.getDocument(id, res, "newDocuments")); - if (doc === undefined) { - console.log(`Couldn't find field with Id ${id}`); - continue; - } - visited.add(id); - addDoc(doc.fields, ids); - console.log(`To Go: ${ids.length}, visited: ${visited.size}`); - } - - console.log(`Done: ${visited.size}`); - - cursor.close(); - - const toDeleteCursor = await Database.Instance.query({ _id: { $nin: Array.from(visited) } }); - const toDelete = (await toDeleteCursor.toArray()).map(doc => doc._id); - toDeleteCursor.close(); - const result = await Database.Instance.delete({ _id: { $in: toDelete } }, "newDocuments"); - console.log(`${result.deletedCount} documents deleted`); -} - -GarbageCollect(); |