Details
-
Bug
-
Status: Closed (View Workflow)
-
Major
-
Resolution: Fixed
-
None
-
None
Description
see https://github.com/MariaDB/mariadb-connector-nodejs/issues/40
The problem is when "piping", to handle the stream when writable stream fails
How to handle writable that stop for any reason ( for example a ClientRequest that has ended):
stream is then in pause mode, waiting for Writable to consume feed. All subsequent request are stopped until stream finished.
I don't see any other solution but to document piping properly to indicate to resume.
Probably a good solution for pool state is that streaming not consumed must be handled when connection is given back to pool.
example :
pool
|
.getConnection()
|
.then(conn => {
|
const someWriterStream = fs.createWriteStream("./tmp.file") |
.on("error", err => { |
//export has ended, resume stream |
queryStream.resume();
|
});
|
|
const transform = new Transform({ |
transform: function transformer(chunk, encoding, callback) { |
callback(null, JSON.stringify(chunk)); |
},
|
objectMode: true |
});
|
|
const queryStream = conn.queryStream("SELECT seq as val FROM seq_1_to_10000"); |
queryStream
|
.pipe(transform)
|
.pipe(someWriterStream)
|
.on('close', () => { |
conn.end();
|
});
|
|
//forcing a WRITER end to simulate this error |
setTimeout(someWriterStream.destroy.bind(someWriterStream), 2);
|
})
|
.catch(err => { |
//error |
});
|