为什么我最终得到Casbah / Java MongoDB驱动程序的java.lang.IllegalArgumentException?

时间:2012-10-16 15:16:11

标签: java mongodb mongodb-java casbah

我使用casbah / java driver.

看到一个奇怪的问题

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


  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不应该从查询中返回任何结果的情况下也是如此。报告的大小不一致,通常大于它应该或可能的大小。

我猜这可能是某种形式的腐败与回应。我使用Wireshark很难解决这个问题,但我一直发现导致查询响应抛出此错误的请求/响应链有来自MongoDB的“TCP Window Full”响应:

enter image description here

我正在使用的版本:


 Casbah: 2.1.5.0
 Mongo Java Driver: 2.5.3
 MongoDB: 2.2

如果有人能就我可能做错的事情或任何有关如何进一步调试此问题的指示提出任何建议,我将不胜感激

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

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

您的JSON对象有多大?查看mongodb版本是否支持该大对象。