MongoError: connection 0 to localhost:27017 timed out —> Topology was destroyed
gordongli opened this issue · 9 comments
Many errors of this kind appear after node makedash.js
runs for a while, and the script fails to generate many pages/assets.
err { MongoError: Topology was destroyed
at nextFunction (/home/gordonl/Measure/node_modules/mongodb/node_modules/mongodb-core/lib/cursor.js:547:27)
at Cursor.next [as _next] (/home/gordonl/Measure/node_modules/mongodb/node_modules/mongodb-core/lib/cursor.js:701:3)
at fetchDocs (/home/gordonl/Measure/node_modules/mongodb/lib/cursor.js:857:10)
at toArray (/home/gordonl/Measure/node_modules/mongodb/lib/cursor.js:884:3)
at /home/gordonl/Measure/node_modules/mongodb/lib/cursor.js:841:5
at Cursor.toArray (/home/gordonl/Measure/node_modules/mongodb/lib/cursor.js:840:10)
at Object.module.exports.dateDiffsByTimePeriods (/home/gordonl/Measure/widgets/widgetUtils.js:84:28)
at Object.module.exports [as module] (/home/gordonl/Measure/widgets/repo/34_prTimeStatsChart.js:5:17)
at async.mapSeries.results.filter.h (/home/gordonl/Measure/lib/dashboards.js:96:28)
at /home/gordonl/Measure/node_modules/async/dist/async.js:1121:9 name: 'MongoError', message: 'Topology was destroyed' }
One of the dashboard widgets ("prTimeStatsChart", running against
the "sanjayy" contributor had a problem, so I've skipped over it.
This is really an internal error, and should be reported.
(The error is described like this, which will help in the report:
Topology was destroyed,
node_modules/mongodb/node_modules/mongodb-core/lib/cursor.js:547)
@gordongli Out of curiosity, how much memory does the instance you're running mongo on have?
GHCrawler with Docker is running on a Linux box with 24GB memory. docker ps -s
shows that the docker_mongo_1's size is 0B (virtual 366MB). Connecting to mongo
from remote, show dbs
shows ghcrawler 0.845GB
.
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES SIZE
0a9356050aa6 docker_dashboard "npm start" 3 days ago Up 3 days 0.0.0.0:4000->4000/tcp, 5858/tcp docker_dashboard_1 0B (virtual 840MB)
078fe325891b docker_crawler "npm start" 3 days ago Up 3 days 0.0.0.0:3000->3000/tcp, 5858/tcp docker_crawler_1 0B (virtual 812MB)
35cfed5c7969 metabase/metabase:latest "/app/run_metabase.sh" 3 days ago Up 3 days 0.0.0.0:5000->3000/tcp docker_metabase_1 554kB (virtual 245MB)
5ade5270fc42 rabbitmq:management "docker-entrypoint.s…" 3 days ago Up 3 days 4369/tcp, 5671/tcp, 0.0.0.0:5672->5672/tcp, 15671/tcp, 25672/tcp, 0.0.0.0:15672->15672/tcp docker_rabbitmq_1 144B (virtual 151MB)
5279e526c7d8 mongo:latest "docker-entrypoint.s…" 3 days ago Up 3 days 0.0.0.0:27017->27017/tcp, 0.0.0.0:28017->28017/tcp docker_mongo_1 0B (virtual 366MB)
21b4d6dfe9c0 redis:latest "docker-entrypoint.s…" 3 days ago Up 3 days 0.0.0.0:6379->6379/tcp docker_redis_1 0B (virtual 107MB)
While we were seeing this with very small instances during early build, I've not been able to reproduce it recently. We're looking into it further now.
@gordongli I've made some changes to the error reporting. "Topology was destroyed" is a cascade error; it happens when something else goes wrong, and then our control flow has a problem and causes all the widgets to throw an error. If you're still experiencing the problem, then before all the "topology" errors there should be another error reported which is the thing that's the actual problem; if you could follow up with that error, we can fix it.
I tried it again, and it was mongo timing out:
connection 0 to localhost:27017 timed out
MongoError: connection 0 to localhost:27017 timed out
at Function.MongoError.create (/home/gordonl/Measure/node_modules/mongodb/node_modules/mongodb-core/lib/error.js:29:11)
at Socket.<anonymous> (/home/gordonl/Measure/node_modules/mongodb/node_modules/mongodb-core/lib/connection/connection.js:200:20)
at Socket.g (events.js:291:16)
at emitNone (events.js:86:13)
at Socket.emit (events.js:185:7)
at Socket._onTimeout (net.js:339:8)
at ontimeout (timers.js:365:14)
at tryOnTimeout (timers.js:237:5)
at Timer.listOnTimeout (timers.js:207:5)
I see you've made a fix in the most recent commit to execute the calls in batches, which seems to prevent that. I've run into another issue, however, which is the node running out of heap memory (I believe this has occurred before as well), and it still relates to mongo. I've made a new issue here: #76
<--- Last few GCs --->
5382881 ms: Mark-sweep 1303.3 (1404.6) -> 1303.2 (1406.6) MB, 1540.7 / 0.0 ms [allocation failure] [GC in old space requested].
5384277 ms: Mark-sweep 1303.2 (1406.6) -> 1303.2 (1406.6) MB, 1395.6 / 0.0 ms [allocation failure] [GC in old space requested].
5385622 ms: Mark-sweep 1303.2 (1406.6) -> 1305.1 (1404.6) MB, 1345.0 / 0.0 ms [last resort gc].
5386890 ms: Mark-sweep 1305.1 (1404.6) -> 1307.1 (1404.6) MB, 1267.4 / 0.0 ms [last resort gc].
<--- JS stacktrace --->
==== JS stack trace =========================================
Security context: 0x3ff7c8cfb51 <JS Object>
2: _next [/home/gordonl/Measure/node_modules/mongodb/node_modules/mongodb-core/lib/cursor.js:~700] [pc=0x51e82082034] (this=0xe9c5a8d3859 <a Cursor with map 0x3a49d2873cd1>,callback=0x3b7e7ca24ec9 <JS Function (SharedFunctionInfo 0x265f061c5641)>)
3: fetchDocs(aka fetchDocs) [/home/gordonl/Measure/node_modules/mongodb/lib/cursor.js:857] [pc=0x51e822cbcc3] (this=0x3ff7c804381 <undefined>)...
FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory
1: node::Abort() [node]
2: 0x101167c [node]
3: v8::Utils::ReportApiFailure(char const*, char const*) [node]
4: v8::internal::V8::FatalProcessOutOfMemory(char const*, bool) [node]
5: v8::internal::Factory::NewFixedArray(int, v8::internal::PretenureFlag) [node]
6: v8::internal::TypeFeedbackVector::New(v8::internal::Isolate*, v8::internal::Handle<v8::internal::TypeFeedbackMetadata>) [node]
7: 0xafa2e0 [node]
8: 0xafa493 [node]
9: 0xafac08 [node]
10: 0xafb86e [node]
11: 0xb03dbb [node]
12: v8::internal::Compiler::Compile(v8::internal::Handle<v8::internal::JSFunction>, v8::internal::Compiler::ClearExceptionFlag) [node]
13: v8::internal::Runtime_CompileLazy(int, v8::internal::Object**, v8::internal::Isolate*) [node]
14: 0x51e80e092a7
Aborted
Hi,
I'm also getting the same connection timeout error in my server when i deployed my application in my local machine everything is working as expected but only for few bigger database queries i'm getting this error :
{ result: { result: { MongoNetworkError: connection 4 to localhost:27017 timed out at Socket.<anonymous> (/var/www/.../../node_modules/mongodb-core/lib/connection/connection.js:259:7) at Object.onceWrapper (events.js:277:13) at Socket.emit (events.js:189:13) at Socket._onTimeout (net.js:443:8) at ontimeout (timers.js:436:11) at tryOnTimeout (timers.js:300:5) at listOnTimeout (timers.js:263:5) at Timer.processTimers (timers.js:223:10) name: 'MongoNetworkError', errorLabels: [Array], [Symbol(mongoErrorContextSymbol)]: {} } } }
Please guide me how to fix this issue. thanks in advance.
@jogendra-yadav just to confirm: are you using Measure when you get this error? Or a different application?
@stuartlangridge : No I'm not, But here is my db query which is giving this error :
dbConnection.production.collection(collectionName).aggregate([{ $match: { isMapped: false }}, { $group: { _id: { supplier: "$supplier", hc: "$hc" }, mp_inv: { "$first": "$mp_inv" }, lng: { "$first": "$lng" }, addr: { "$first": "$addr" }, ccr: { "$first": "$ccr" }, hn: { "$first": "$hn" }, isclubbedfare: { "$first": "$isclubbedfare" }, disc: { "$first": "$disc" }, instanceKey: { "$first": "$instanceKey" }, city: { "$first": "$city" }, th: { "$first": "$th" }, oc: { "$first": "$oc" }, area: { "$first": "$area" }, cKey: { "$first": "$cKey" }, dk: { "$first": "$dk" }, ta: { "$first": "$ta" }, isMapped: { "$first": "$isMapped" }, fs: { "$first": "$fs" }, amenitiesList: { "$first": "$amenitiesList" }, baseId: { "$first": "$baseId" }, supplier: { "$first": "$supplier" }, key: { "$first": "$key" }, lat: { "$first": "$lat" }, riArr: { "$first": "$riArr" }, mp: { "$first": "$mp" }, sr: { "$first": "$sr" }, ispreprred: { "$first": "$ispreprred" }, isPostPaid: { "$first": "$isPostPaid" }, currencyType: { "$first": "$currencyType" }, hc: { "$first": "$hc" }, trac: { "$first": "$trac" }, am: { "$first": "$am" }, pt: { "$first": "$pt" }, maxp: { "$first": "$maxp" }, dist: { "$first": "$dist" } }}], { allowDiskUse: true })
This collection has many number of documents. And it will increase more.
@jogendra-yadav I'm sorry, but this is the repository for the Measure software, not a general MongoDB help account; we won't be able to help you here. The software you're using may have its own help forum -- the documentation for it may tell you that -- or you may have more luck posting this question on Stack Overflow (https://stackoverflow.com) which is designed as a help forum for more general programming questions. Good luck finding an answer!