Почему я заканчиваю с java.lang.IllegalArgumentException для драйвера Casbah/Java MongoDB?
Я вижу странную проблему, используя 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, но я последовательно обнаруживаю, что цепочка запросов/ответов, ведущая к запросу, ответ которого вызывает эту ошибку, имеет ответ "TCP Window Full", исходящий от MongoDB:
![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
Ответы
Ответ 1
Версия используемого драйвера Java несовместима с MongoDB 2.2. Вы должны использовать не менее 2.9.3, если не 2.10 или выше. Там нет гарантии, что обновление драйверов исправит вашу проблему, но это должен быть первый шаг.
https://support.mongolab.com/entries/22631012-which-drivers-support-mongodb-2-2
Ответ 2
Насколько велик ваш объект JSON? Посмотрите, поддерживается ли этот большой объект версией mongodb.