Improve saveRows method to handle backpressure and errors in file writing

This commit is contained in:
Stela Augustinova
2026-04-14 09:49:14 +02:00
parent 1d350a3a29
commit c51dad39e0

View File

@@ -279,11 +279,18 @@ module.exports = {
async saveRows({ folder, file, rows }) { async saveRows({ folder, file, rows }) {
assertSafeArchiveName(folder, 'folder'); assertSafeArchiveName(folder, 'folder');
assertSafeArchiveName(file, 'file'); assertSafeArchiveName(file, 'file');
const fileStream = fs.createWriteStream(path.join(resolveArchiveFolder(folder), `${file}.jsonl`)); const filePath = path.join(resolveArchiveFolder(folder), `${file}.jsonl`);
const fileStream = fs.createWriteStream(filePath);
for (const row of rows) { for (const row of rows) {
await fileStream.write(JSON.stringify(row) + '\n'); const ok = fileStream.write(JSON.stringify(row) + '\n');
if (!ok) {
await new Promise(resolve => fileStream.once('drain', resolve));
}
} }
await fileStream.close(); await new Promise((resolve, reject) => {
fileStream.end(() => resolve());
fileStream.on('error', reject);
});
socket.emitChanged(`archive-files-changed`, { folder }); socket.emitChanged(`archive-files-changed`, { folder });
return true; return true;
}, },