From 3fdb3edb74d2d29435789be9d0038ba860986d7e Mon Sep 17 00:00:00 2001 From: "Benoit A." Date: Thu, 12 Oct 2023 14:24:35 +0200 Subject: [PATCH] HD-3340 drain stream when receiving an error on a PUT --- lib/hdcontroller.js | 5 ++++- src/hdcontroller.ts | 7 +++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/lib/hdcontroller.js b/lib/hdcontroller.js index d9123b7f..b0f274eb 100644 --- a/lib/hdcontroller.js +++ b/lib/hdcontroller.js @@ -29,6 +29,7 @@ function _createRequest(req, log, callback) { error.code = response.statusCode; error.isExpected = true; log.debug('got expected response code:', { statusCode: response.statusCode }); + response.resume(); // Drain the response stream return callback(error); } return callback(undefined, response); @@ -267,6 +268,9 @@ class HDProxydClient { put(stream, size, params, reqUids, callback) { const log = this.createLogger(reqUids); this._failover('POST', stream, size, '', 0, log, (err, response) => { + if (response) { + response.resume(); + } if (err || !response) { return callback(err); } @@ -274,7 +278,6 @@ class HDProxydClient { return callback(new HDProxydError('no key returned')); } const key = response.headers['scal-key']; - response.resume(); // drain the stream response.on('end', () => { return callback(undefined, key); }); diff --git a/src/hdcontroller.ts b/src/hdcontroller.ts index c3a044bb..70e3d213 100644 --- a/src/hdcontroller.ts +++ b/src/hdcontroller.ts @@ -17,7 +17,7 @@ export class HDProxydError extends Error { type HDProxydCallback = (error?: HDProxydError, res?: http.IncomingMessage) => void; -type HDProxydClientPutCallback = (error?: HDProxydError, key?: string) => void; +type HDProxydClientPutCallback = (error?: HDProxydError, key?: string) => void; type HDProxydClientGetCallback = (error?: HDProxydError, res?: Stream) => void; type HDProxydClientDeleteCallback = (error?: HDProxydError) => void; @@ -37,6 +37,7 @@ function _createRequest(req: http.RequestOptions, log: RequestLogger, callback: error.isExpected = true; log.debug('got expected response code:', { statusCode: response.statusCode }); + response.resume(); // Drain the response stream return callback(error); } return callback(undefined, response); @@ -311,6 +312,9 @@ export class HDProxydClient { public put(stream: Stream, size: number, params: any, reqUids: string, callback: HDProxydClientPutCallback): void { const log = this.createLogger(reqUids); this._failover('POST', stream, size, '', 0, log, (err?: HDProxydError, response?: http.IncomingMessage) => { + if (response) { + response.resume(); + } if (err || !response) { return callback(err); } @@ -318,7 +322,6 @@ export class HDProxydClient { return callback(new HDProxydError('no key returned')); } const key = response.headers['scal-key'] as string; - response.resume(); // drain the stream response.on('end', () => { return callback(undefined, key); });