为什么最终为java.lang.IllegalArgumentExceptionexception为Casbah / Java MongoDB驱动程序?

我看到一个奇怪的问题,使用casbah / java driver.

当驱动程序尝试从mongo创build响应时,我一直遇到以下exception:

 Oct 16, 2012 10:45:07 AM com.mongodb.DBTCPConnector$MyPort error SEVERE: MyPort.error called java.lang.IllegalArgumentException: response too long: 1634610484 at com.mongodb.Response.(Response.java:40) at com.mongodb.DBPort.go(DBPort.java:110) at com.mongodb.DBPort.go(DBPort.java:75) at com.mongodb.DBPort.call(DBPort.java:65) at com.mongodb.DBTCPConnector.call(DBTCPConnector.java:201) at com.mongodb.DBApiLayer$MyCollection.__find(DBApiLayer.java:295) at com.mongodb.DBCursor._check(DBCursor.java:354) at com.mongodb.DBCursor._hasNext(DBCursor.java:484) at com.mongodb.DBCursor.hasNext(DBCursor.java:509) at com.mongodb.casbah.MongoCursorBase$class.hasNext(MongoCursor.scala:73) at com.mongodb.casbah.MongoCursor.hasNext(MongoCursor.scala:497) at scala.collection.Iterator$class.foreach(Iterator.scala:660) at com.mongodb.casbah.MongoCursor.foreach(MongoCursor.scala:497) ... 

这似乎是随机发生的,即使在mongo不应该返回查询结果的情况下。 所报告的大小不一致,通常比它应该或可能的要大。

我猜这可能是某种forms的反应腐败。 使用Wireshark解决这个问题的时候,我遇到了一些困难,但是我总是发现,引发查询的请求/响应链响应抛出这个错误,这个链接有来自MongoDB的“TCP Window Full”响应:

在这里输入图像说明

我正在使用的版本:

 Casbah: 2.1.5.0 Mongo Java Driver: 2.5.3 MongoDB: 2.2 

我将不胜感激,如果任何人可以给我任何可能做错的build议或任何关于如何进一步debugging这个问题的指针

更新:在看Casbah 2.1.5.0,的发行说明Casbah 2.1.5.0,看来正在使用的java驱动程序的版本是2.5.3,而不是2.7.3

您使用的Java驱动程序的版本与MongoDB 2.2不兼容。 你应该至less使用2.9.3,如果不是2.10或更高。 无法保证驱动程序升级能够解决您的问题,但这应该是第一步。

https://support.mongolab.com/entries/22631012-which-drivers-support-mongodb-2-2

你的JSON对象有多大? 看看这个大对象是否支持mongodb的版本。

Interesting Posts