🚸 #418 do not resolve write result without waiting for s3 putObject

This commit is contained in:
Eric Doughty-Papassideris
2024-03-20 23:29:42 +01:00
committed by Anton Shepilov
parent 7ea7a302ca
commit 1ffb2eb3ea
@@ -24,19 +24,28 @@ export default class S3ConnectorService implements StorageConnectorAPI {
}
write(path: string, stream: Readable): Promise<WriteMetadata> {
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);
});
}