From 8351a0267e1449269bb1c40b4f612f91007e27b6 Mon Sep 17 00:00:00 2001 From: Gareth Jones Date: Tue, 12 Nov 2019 08:58:45 +1100 Subject: [PATCH] fix: catch unlink errors during cleanup --- lib/RollingFileWriteStream.js | 4 +++- test/RollingFileWriteStream-test.js | 22 ++++++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/lib/RollingFileWriteStream.js b/lib/RollingFileWriteStream.js index 409473c..34e60e4 100644 --- a/lib/RollingFileWriteStream.js +++ b/lib/RollingFileWriteStream.js @@ -259,7 +259,9 @@ class RollingFileWriteStream extends Writable { const deleteFiles = fileNames => { debug(`deleteFiles: files to delete: ${fileNames}`); - return Promise.all(fileNames.map(f => fs.unlink(f))); + return Promise.all(fileNames.map(f => fs.unlink(f).catch((e) => { + debug(`deleteFiles: error when unlinking ${f}, ignoring. Error was ${e}`); + }))); }; module.exports = RollingFileWriteStream; diff --git a/test/RollingFileWriteStream-test.js b/test/RollingFileWriteStream-test.js index 2045839..b90f091 100644 --- a/test/RollingFileWriteStream-test.js +++ b/test/RollingFileWriteStream-test.js @@ -1416,4 +1416,26 @@ describe("RollingFileWriteStream", () => { s.currentFileStream.emit("error", new Error("oh no")); }); }); + + describe("when deleting old files and there is an error", () => { + before(done => { + fs.ensureDir('/tmp/delete-test/logfile.log.2', done); + }); + + it("should not let errors bubble up", done => { + const s = new RollingFileWriteStream("/tmp/delete-test/logfile.log", { + maxSize: 10, + numToKeep: 1 + }); + + s.write("length is 10", "utf8", () => { + // if there's an error during deletion, then done never gets called + s.write("length is 10", "utf8", done); + }); + }); + + after(done => { + fs.remove('/tmp/delete-test', done); + }) + }); });