Bug 1762839 - SPDY fails in node v12 [rh-nodejs12]
Summary: SPDY fails in node v12 [rh-nodejs12]
Keywords:
Status: CLOSED NOTABUG
Alias: None
Product: Red Hat Software Collections
Classification: Red Hat
Component: rh-nodejs12
Version: rh-nodejs12
Hardware: Unspecified
OS: Unspecified
unspecified
unspecified
Target Milestone: ---
: 3.7
Assignee: Zuzana Svetlikova
QA Contact: Jan Houska
URL:
Whiteboard:
Depends On: 1743558 1875738 1885872 1896454
Blocks: 1896876 1929312
TreeView+ depends on / blocked
 
Reported: 2019-10-17 15:45 UTC by Anna Khaitovich
Modified: 2021-04-14 12:21 UTC (History)
5 users (show)

Fixed In Version:
Doc Type: If docs needed, set a value
Doc Text:
Clone Of: 1743558
: 1896876 (view as bug list)
Environment:
Last Closed: 2021-04-14 12:21:29 UTC
Target Upstream Version:
Embargoed:


Attachments (Terms of Use)

Description Anna Khaitovich 2019-10-17 15:45:57 UTC
+++ This bug was initially created as a clone of Bug #1743558 +++

Description of problem:
Refer to this issue [1] for more info.

[1] https://github.com/spdy-http2/node-spdy/issues/350

Version-Release number of selected component (if applicable):
nodejs-12.4.0-1.module+el8.1.0+3505+d278616f.x86_64

How reproducible:
Always

Steps to Reproduce:
$ rpm -qa nodejs
nodejs-12.4.0-1.module+el8.1.0+3505+d278616f.x86_64

$ npm list
/mnt/tests/CoreOS/nodejs/Sanity/spdy-smoke
└─┬ spdy.1 -> /usr/lib/node_modules/spdy
  ├── debug.1 extraneous
  ├── handle-thing.0 extraneous
  ├── http-deceiver.7 extraneous
  ├── select-hose.0 extraneous
  └── spdy-transport.0 extraneous

$ cat server.js
var spdy = require('spdy'),
    fs = require('fs');

var options = {
  key: fs.readFileSync('./server-key.pem'),
  cert: fs.readFileSync('./server-cert.pem'),

  windowSize: 1024, // Server's window size
};

var server = spdy.createServer(options, function(req, res) {
  res.writeHead(200);

  var is_spdy = "false"
  if (req.isSpdy) { is_spdy = req.isSpdy.toString() }
  console.log("isSpdy: " + is_spdy);

  res.end('ok');
});

server.listen(8000);

$ cat client.js
var spdy = require('spdy'),
    http = require('http'),
    assert = require('assert');

process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";

var port = 8000;

var agent = spdy.createAgent({
  host: 'localhost',
  port: port
});

http.get({
  protocol: 'https:',
  host: 'localhost',
  path: '/',
  port: port,
  agent: agent
}, function(response) {
  assert.equal(response.statusCode, 200);
  response.on('data', function(data) {
    assert.equal(data.toString(), 'ok');
    agent.close();
    process.exit(0);
  });
}).end();

$ nohup node server.js &
$ node client.js
(node:22072) Warning: Setting the NODE_TLS_REJECT_UNAUTHORIZED environment variable to '0' makes TLS connections and HTTPS requests insecure by disabling certificate verification.
(node:22072) [DEP0066] DeprecationWarning: OutgoingMessage.prototype._headers is deprecated
events.js:177
      throw er; // Unhandled 'error' event
      ^

Error: read ECONNRESET
    at TLSWrap.onStreamRead (internal/stream_base_commons.js:183:27)
Emitted 'error' event at:
    at Connection.<anonymous> (/usr/lib/node_modules/spdy/lib/spdy/agent.js:149:12)
    at Connection.emit (events.js:200:13)
    at TLSSocket.onSocketError (/usr/lib/node_modules/spdy/node_modules/spdy-transport/lib/spdy-transport/connection.js:176:10)
    at TLSSocket.emit (events.js:205:15)
    at emitErrorNT (internal/streams/destroy.js:91:8)
    at emitErrorAndCloseNT (internal/streams/destroy.js:59:3)
    at processTicksAndRejections (internal/process/task_queues.js:84:9) {
  errno: 'ECONNRESET',
  code: 'ECONNRESET',
  syscall: 'read'
}
[1]+  Exit 1                  nohup node server.js

Actual results:
$ cat nohup.out 
isSpdy: true
(node:11783) [DEP0066] DeprecationWarning: OutgoingMessage.prototype._headers is deprecated
internal/buffer.js:941
class FastBuffer extends Uint8Array {}
^

RangeError: Invalid typed array length: -4095
    at new Uint8Array (<anonymous>)
    at new FastBuffer (internal/buffer.js:941:1)
    at Handle.onStreamRead [as onread] (internal/stream_base_commons.js:165:17)
    at Stream.<anonymous> (/usr/lib/node_modules/spdy/node_modules/handle-thing/lib/handle.js:88:10)
    at Stream.emit (events.js:205:15)
    at endReadableNT (/usr/lib/node_modules/spdy/node_modules/readable-stream/lib/_stream_readable.js:1077:12)
    at processTicksAndRejections (internal/process/task_queues.js:84:9)


Expected results:
Request is served successfully

Additional info:
It is possible to work this around using the workaround mentioned in the issue [1]. After I've made changes to node_modules/spdy/node_modules/handle-thing/lib/handle.js file, the error's disappeared:

88 - self.onread(uv.UV_EOF, Buffer.alloc(0))
88 + self.onread(Buffer.alloc(0))

94 - self.onread(uv.UV_ECONNRESET, Buffer.alloc(0))
94 + self.onread(Buffer.alloc(0))

Comment 6 Jan Houska 2021-04-14 12:21:29 UTC
I propose to close. The problem was solved by update nodejs-spdy module to 4.0.2 version.  Test was fixed accordingly and it was added to the tier1 testing.


Note You need to log in before you can comment on or make changes to this bug.