ほぼ2日間試した後、私は自分の答えを見つけました。
問題は MongoDb にありました。ある種の異常な方法で、MongoDb がデータを破損させたため、質問のエラーが発生しました。それを解決するために私がしたことは、自分でMongoDbを起動することでした。まず、MongoDb に関連するすべてのプロセスを強制終了し、手動で MongoD を開始しました。
./mongod --dbpath /Users/jeroen/.opa/mongo/data/ -v
次の方法で MongoDb インスタンスを起動せずに Opa を起動する必要がありました。
./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 でより適切なエラー レポートが利用可能であれば、貴重な時間をそれほど無駄にすることはなかったでしょう。うまくいけば、これは他の誰かを助ける:)