From 1ffb2eb3ea506bac566b6eeb1cc21d86d728013c Mon Sep 17 00:00:00 2001 From: Eric Doughty-Papassideris Date: Wed, 20 Mar 2024 23:29:42 +0100 Subject: [PATCH] =?UTF-8?q?=F0=9F=9A=B8=20#418=20do=20not=20resolve=20writ?= =?UTF-8?q?e=20result=20without=20waiting=20for=20s3=20putObject?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../storage/connectors/S3/s3-service.ts | 23 +++++++++++++------ 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/tdrive/backend/node/src/core/platform/services/storage/connectors/S3/s3-service.ts b/tdrive/backend/node/src/core/platform/services/storage/connectors/S3/s3-service.ts index 11182817..5dd2637e 100644 --- a/tdrive/backend/node/src/core/platform/services/storage/connectors/S3/s3-service.ts +++ b/tdrive/backend/node/src/core/platform/services/storage/connectors/S3/s3-service.ts @@ -24,19 +24,28 @@ export default class S3ConnectorService implements StorageConnectorAPI { } write(path: string, stream: Readable): Promise { - let totalSize = 0; return new Promise((resolve, reject) => { + let totalSize = 0; + let didCompletePutObject = false; + let didCompleteCalculateSize = false; + const doResolve = () => + didCompletePutObject && + didCompleteCalculateSize && + resolve({ + size: totalSize, + }); stream .on("data", function (chunk) { totalSize += chunk.length; }) - .on("end", () => { - resolve({ - size: totalSize, - }); + .on('end', () => { // TODO: this could be bad practice as it puts the stream in flow mode before putObject gets to it + didCompleteCalculateSize = true; + doResolve(); }); - - this.client.putObject(this.minioConfiguration.bucket, path, stream).catch(e => reject(e)); + this.client.putObject(this.minioConfiguration.bucket, path, stream).then(_x => { + didCompletePutObject = true; + doResolve(); + }).catch(reject); }); }