From 90eb057f86c12d191e4ba1af370c53ea4cf5b099 Mon Sep 17 00:00:00 2001 From: Jordan Eldredge Date: Wed, 30 Dec 2020 02:18:26 -0500 Subject: [PATCH] Improve user uploads --- .../skin-database/api/processUserUploads.ts | 28 +++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/packages/skin-database/api/processUserUploads.ts b/packages/skin-database/api/processUserUploads.ts index 68fbfc7d..6369b48d 100644 --- a/packages/skin-database/api/processUserUploads.ts +++ b/packages/skin-database/api/processUserUploads.ts @@ -4,30 +4,50 @@ import { addSkinFromBuffer } from "../addSkin"; import { EventHandler } from "./app"; async function* reportedUploads() { - const upload = await Skins.getReportedUpload(); - if (upload != null) { + const seen = new Set(); + while (true) { + const upload = await Skins.getReportedUpload(); + if (upload == null) { + return; + } + if (seen.has(upload.id)) { + await Skins.recordUserUploadErrored(upload.id); + console.error("Saw the same upload twice. It didn't get handled?"); + return; + } + seen.add(upload.id); yield upload; } } let processing = false; +function log(...args: any[]) { + console.log(...args); +} + export async function processUserUploads(eventHandler: EventHandler) { + log("process user uploads"); // Ensure we only have one worker processing requests. if (processing) { return; } processing = true; const uploads = reportedUploads(); + log("Uploads to process: ", uploads); for await (const upload of uploads) { + log("Going to try: ", upload); try { const buffer = await S3.getUploadedSkin(upload.id); + log("Got buffer: ", upload); const result = await addSkinFromBuffer( buffer, upload.filename, "Web API" ); + log("Added skin from buffer: ", upload, result); await Skins.recordUserUploadArchived(upload.id); + log("Recorded upload archived: ", upload); if (result.status === "ADDED") { const action = { type: @@ -36,10 +56,14 @@ export async function processUserUploads(eventHandler: EventHandler) { : "MODERN_SKIN_UPLOADED", md5: result.md5, } as const; + log("Skin was added, sending action:", action); eventHandler(action); + log("Action sent:", action); } } catch (e) { + log("Upload errored, going to report it:", upload); await Skins.recordUserUploadErrored(upload.id); + log("Recorded upload errored:", upload); const action = { type: "SKIN_UPLOAD_ERROR", uploadId: upload.id,