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.
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:
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.