aboutsummaryrefslogtreecommitdiff
path: root/src/server/GarbageColletor.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/GarbageColletor.ts')
-rw-r--r--src/server/GarbageColletor.ts51
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();