Skip to content

Warning 'connection claimer looks like it leaked event handlers' does not seem actionable #135

@joshwilsdon

Description

@joshwilsdon

With cloudapi, I had a problem where vmapi was crashing when getting a request. That problem was my fault and not important here. However, when vmapi crashed, the last logs in cloudapi's log were:

[2018-02-09T21:58:58.315Z]  WARN: cueball/CueBallClaimHandle/50928 on f1b8f145-9acf-4717-9bb7-3ba11c9c1808: connection claimer looks like it leaked event handlers (domain=vmapi.emy-6.joyent.us, pool=ae9ca047-48ac-4386-9d3b-9b1e7cd2dbb0, backend=IhA+hxzAYEF+6hJ7OzQ7DGT8FCA=, address=172.25.6.26, port=80, localPort=39906, countBeforeClaim=0, countAfterRelease=1, event=error)
    handlers: [
      "function socketErrorListener(err) {\n  var socket = this;\n  var req = socket._httpMessage;\n  debug('SOCKET ERROR:', err.message, err.stack);\n\n  if (req) {\n    req.emit('error', err);\n    // For Safety. Some additional errors might fire later on\n    // and we need to make sure we don't double-fire the error event.\n    req.socket._hadError = true;\n  }\n\n  // Handle any pending data\n  socket.read();\n\n  var parser = socket.parser;\n  if (parser) {\n    parser.finish();\n    freeParser(parser, req, socket);\n  }\n\n  // Ensure that no further data will come out of the socket\n  socket.removeListener('data', socketOnData);\n  socket.removeListener('end', socketOnEnd);\n  socket.destroy();\n}"
    ]
[2018-02-09T21:58:58.316Z]  WARN: cueball/CueBallClaimHandle/50928 on f1b8f145-9acf-4717-9bb7-3ba11c9c1808: connection claimer looks like it leaked event handlers (domain=vmapi.emy-6.joyent.us, pool=ae9ca047-48ac-4386-9d3b-9b1e7cd2dbb0, backend=IhA+hxzAYEF+6hJ7OzQ7DGT8FCA=, address=172.25.6.26, port=80, localPort=39906, countBeforeClaim=0, countAfterRelease=1, event=data)
    handlers: [
      "function socketOnData(d) {\n  var socket = this;\n  var req = this._httpMessage;\n  var parser = this.parser;\n\n  assert(parser && parser.socket === socket);\n\n  var ret = parser.execute(d);\n  if (ret instanceof Error) {\n    debug('parse error');\n    freeParser(parser, req, socket);\n    socket.destroy();\n    req.emit('error', ret);\n    req.socket._hadError = true;\n  } else if (parser.incoming && parser.incoming.upgrade) {\n    // Upgrade or CONNECT\n    var bytesParsed = ret;\n    var res = parser.incoming;\n    req.res = res;\n\n    socket.removeListener('data', socketOnData);\n    socket.removeListener('end', socketOnEnd);\n    parser.finish();\n\n    var bodyHead = d.slice(bytesParsed, d.length);\n\n    var eventName = req.method === 'CONNECT' ? 'connect' : 'upgrade';\n    if (req.listenerCount(eventName) > 0) {\n      req.upgradeOrConnect = true;\n\n      // detach the socket\n      socket.emit('agentRemove');\n      socket.removeListener('close', socketCloseListener);\n      socket.removeListener('error', socketErrorListener);\n\n      // TODO(isaacs): Need a way to reset a stream to fresh state\n      // IE, not flowing, and not explicitly paused.\n      socket._readableState.flowing = null;\n\n      req.emit(eventName, res, socket, bodyHead);\n      req.emit('close');\n    } else {\n      // Got Upgrade header or CONNECT method, but have no handler.\n      socket.destroy();\n    }\n    freeParser(parser, req, socket);\n  } else if (parser.incoming && parser.incoming.complete &&\n             // When the status code is 100 (Continue), the server will\n             // send a final response after this client sends a request\n             // body. So, we must not free the parser.\n             parser.incoming.statusCode !== 100) {\n    socket.removeListener('data', socketOnData);\n    socket.removeListener('end', socketOnEnd);\n    freeParser(parser, req, socket);\n  }\n}"
    ]

which really weren't that helpful in telling me that vmapi had crashed. When I saw these I thought there was something wrong in cloudapi.

The cueball here is 2.1.1.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions