Mongo Driver.sndrcvf(查询):通信错误(无法重新连接)

时间:2013-01-03 08:48:35

标签: opa

在成功编译后运行我的Opa脚本时突然发生了一个奇怪的错误:

Jeroens-MacBook-Pro:CollabTextEditor jeroen$ ./CollabTextEditor.exe 
Http serving on http://Jeroens-MacBook-Pro.local:8080
DbGen/Mongo Looking for MongoDB in directory '/Users/jeroen/.opa/mongo'
DbGen/Mongo MongoDB seems launched (pid:438)
MongoDriver.sndrcv(query): comms error (Can't reconnect)
File "lib/stdlib/apis/mongo/log.opa", line 73, characters 5-16, (73:5-73:16 | 2930-2941)
fail: -1

快速Google搜索没有给我任何答案:s所以我试图找到errormessage中提到的文件log.opa,但sudo find / -name "log.opa"没有返回任何内容。有什么帮助吗?

1 个答案:

答案 0 :(得分:1)

在尝试了将近2天之后,我找到了自己的答案。

问题在于MongoDb。以某种怪异的方式,MongoDb使数据损坏导致我的问题出错。我所做的就是解决它,我自己开始使用MongoDb。首先,我杀死了任何与MongoDb相关的进程并手动启动了MongoD:

./mongod --dbpath /Users/jeroen/.opa/mongo/data/ -v

我必须通过以下方式启动Opa而不启动MongoDb实例:

./CollabTextEditor.exe --db-remote localhost:27017

(CollabTextEditor.exe是编译我的Opa代码的结果)。然后我浏览到localhost:8080(Opa正在运行的地方),这导致了MongoD中的以下输出:

Jeroens-MacBook-Pro:bin jeroen$ ./mongod --dbpath /Users/jeroen/.opa/mongo/data/ -v
Fri Jan  4 10:03:05 BackgroundJob starting: DataFileSync
Fri Jan  4 10:03:05 versionCmpTest passed
Fri Jan  4 10:03:05 versionArrayTest passed
Fri Jan  4 10:03:05 shardObjTest passed
Fri Jan  4 10:03:05 shardKeyTest passed
Fri Jan  4 10:03:05 isInRangeTest passed
Fri Jan  4 10:03:05 [initandlisten] MongoDB starting : pid=15654 port=27017 dbpath=/Users/jeroen/.opa/mongo/data/ 64-bit host=Jeroens-MacBook-Pro.local
Fri Jan  4 10:03:05 [initandlisten] db version v2.0.2, pdfile version 4.5
Fri Jan  4 10:03:05 [initandlisten] git version: 514b122d308928517f5841888ceaa4246a7f18e3
Fri Jan  4 10:03:05 [initandlisten] build info: Darwin erh2.10gen.cc 9.6.0 Darwin Kernel Version 9.6.0: Mon Nov 24 17:37:00 PST 2008; root:xnu-1228.9.59~1/RELEASE_I386 i386 BOOST_LIB_VERSION=1_40
Fri Jan  4 10:03:05 [initandlisten] options: { dbpath: "/Users/jeroen/.opa/mongo/data/", verbose: true }
Fri Jan  4 10:03:05 [initandlisten] journal dir=/Users/jeroen/.opa/mongo/data/journal
Fri Jan  4 10:03:05 [initandlisten] recover : no journal files present, no recovery needed
Fri Jan  4 10:03:05 [initandlisten] Accessing: local for the first time
Fri Jan  4 10:03:05 [initandlisten] query local.system.namespaces reslen:20 0ms
Fri Jan  4 10:03:05 [initandlisten] enter repairDatabases (to check pdfile version #)
Fri Jan  4 10:03:05 [initandlisten]     CollabTextEditor
Fri Jan  4 10:03:05 [initandlisten] Accessing: CollabTextEditor for the first time
Fri Jan  4 10:03:05 [initandlisten] done repairDatabases
Fri Jan  4 10:03:05 BackgroundJob starting: snapshot
Fri Jan  4 10:03:05 BackgroundJob starting: ClientCursorMonitor
Fri Jan  4 10:03:05 BackgroundJob starting: PeriodicTask::Runner
Fri Jan  4 10:03:05 [initandlisten] fd limit hard:9223372036854775807 soft:256 max conn: 204
Fri Jan  4 10:03:05 [websvr] fd limit hard:9223372036854775807 soft:256 max conn: 204
Fri Jan  4 10:03:05 [websvr] admin web console waiting for connections on port 28017
Fri Jan  4 10:03:05 [initandlisten] waiting for connections on port 27017
Fri Jan  4 10:03:46 [initandlisten] connection accepted from 127.0.0.1:54604 #1
Fri Jan  4 10:03:46 [conn1] Accessing: CollabTextEditor for the first time
Fri Jan  4 10:03:46 [conn1] query CollabTextEditor.user reslen:20 0ms
Fri Jan  4 10:03:46 [conn1] query CollabTextEditor.room nreturned:1 reslen:3379 0ms
Fri Jan  4 10:04:05 [DataFileSync] flushing mmap took 2ms  for 3 files
Fri Jan  4 10:04:05 [PeriodicTask::Runner] task: DBConnectionPool-cleaner took: 0ms
Fri Jan  4 10:04:05 [PeriodicTask::Runner] task: DBConnectionPool-cleaner took: 0ms
Fri Jan  4 10:04:05 [PeriodicTask::Runner] task: WriteBackManager::cleaner took: 0ms
Fri Jan  4 10:04:05 [clientcursormon] mem (MB) res:30 virt:2594 mapped:80
Fri Jan  4 10:04:32 [conn1] query CollabTextEditor.user idhack:1 reslen:20 0ms
Fri Jan  4 10:04:32 [conn1] update CollabTextEditor.user query: { _id: "test" } update: { $set: { value: { some: { name: "test" } } } } fastmodinsert:1 0ms
Fri Jan  4 10:04:32 [conn1] run command CollabTextEditor.$cmd { getlasterror: 1 }
Fri Jan  4 10:04:32 [conn1] command CollabTextEditor.$cmd command: { getlasterror: 1 } ntoreturn:1 reslen:85 0ms
Fri Jan  4 10:04:32 [conn1] query CollabTextEditor.room nreturned:1 reslen:3379 0ms
Fri Jan  4 10:04:32 [journal] lsn set 55971
Fri Jan  4 10:05:01 [conn1] end connection 127.0.0.1:54604

有些查询似乎返回nreturned:1(查看输出中的最后几行),有些查询并不意味着我的数据可能出错。这导致了我的问题中的错误。

我做了什么来实际解决它,分别连接到Mongo并在mongod实例已经运行后删除数据库:

Jeroens-MacBook-Pro:bin jeroen$ ./mongo localhost:27017
MongoDB shell version: 2.0.2
connecting to: localhost:27017/test
> use CollabTextEditor
switched to db CollabTextEditor
> db.dropDatabase()
{ "dropped" : "CollabTextEditor", "ok" : 1 }
> exit
bye

此后,脚本不再返回任何错误。所以我可以得出结论,MongoDB可能崩溃(原因不明)导致数据损坏导致滚雪球效应。相当愚蠢的错误,如果在MongoDb和Opa中有一些更好的错误报告,我可能不会浪费这么多宝贵的时间。希望这有助于其他人:)