Uploaded image for project: 'MariaDB Connector/node.js'
  1. MariaDB Connector/node.js
  2. CONJS-60

handling pipe error for stream

    XMLWordPrintable

    Details

    • Type: Bug
    • Status: Closed (View Workflow)
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: None
    • Fix Version/s: 2.0.3-GA
    • Component/s: other
    • Labels:
      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
        });
      

        Attachments

          Activity

            People

            Assignee:
            diego dupin Diego Dupin
            Reporter:
            diego dupin Diego Dupin
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

              Dates

              Created:
              Updated:
              Resolved:

                Git Integration