猫鼬挂在断开连接上
Mongoose hanging on disconnect
我有一个 mongoose 应用程序 运行 定期执行计划任务。不幸的是,在第一次 运行 之后,整个任务在关闭前挂起,并且再也不会 运行。
更奇怪的是,几乎没有评论后,它仍然挂起。此时我们的程序看起来是这样的:
var mongoose = require('mongoose');
var config = require('../lib/config');
var log = require('../lib/custom-log');
var db = mongoose.connection;
db.on('error', function(err) {
console.log("Mongoose connection error: " + err);
mongoose.disconnect();
});
db.once('open', function() {
console.log("db is open");
mongoose.disconnect();
});
db.once('close', function() {
console.log("db is closed");
});
mongoose.connect(config.database.uri);
结果:
db is open
db is closed
然后挂起。
我们 运行 Ubuntu 14.10 上的节点 0.10.36,我们通过 MongoDB URI 连接到 3 节点副本集。
因为我参与解决了这个问题,所以,我会回答导致它的原因并向 Mongoose 提交错误报告。
问题是由 3 个节点中的 2 个突然脱离副本集引起的,但它们仍在 MongoDB URI 中。因此,一切正常,没有触发任何错误,但是 Mongoose(或者可能是 MongoDB 驱动程序)在断开连接时挂起,因为这 2 个节点没有引发异常并为开发人员提供有关损坏内容的线索。
我有一个 mongoose 应用程序 运行 定期执行计划任务。不幸的是,在第一次 运行 之后,整个任务在关闭前挂起,并且再也不会 运行。
更奇怪的是,几乎没有评论后,它仍然挂起。此时我们的程序看起来是这样的:
var mongoose = require('mongoose');
var config = require('../lib/config');
var log = require('../lib/custom-log');
var db = mongoose.connection;
db.on('error', function(err) {
console.log("Mongoose connection error: " + err);
mongoose.disconnect();
});
db.once('open', function() {
console.log("db is open");
mongoose.disconnect();
});
db.once('close', function() {
console.log("db is closed");
});
mongoose.connect(config.database.uri);
结果:
db is open
db is closed
然后挂起。
我们 运行 Ubuntu 14.10 上的节点 0.10.36,我们通过 MongoDB URI 连接到 3 节点副本集。
因为我参与解决了这个问题,所以,我会回答导致它的原因并向 Mongoose 提交错误报告。
问题是由 3 个节点中的 2 个突然脱离副本集引起的,但它们仍在 MongoDB URI 中。因此,一切正常,没有触发任何错误,但是 Mongoose(或者可能是 MongoDB 驱动程序)在断开连接时挂起,因为这 2 个节点没有引发异常并为开发人员提供有关损坏内容的线索。