asynchronous - mongodb allanbank async driver callback being called twice -


i have simple callback bound findasync call. every few requests observe failure though data in database static.

some quick debugging shows callback being called twice. cases app fails caused null mongoiterator<document> being passed in callback. of course expected single callback when data ready (or if there exception).

is expected behavior? there can ensure callback called once when query complete?

here code snippet:

collection.findasync(     [         callback: { mongoiterator<document> v ->             list data = []             try {                 while(v.hasnext()) {                     data.add(doctojson(v.next()))                 }             } {                 if (v != null) v.close()             }             sendreply([ status: 'ok', data: data ])         },         exception: { throwable t ->             sendreply([ status: 'error', message: t.message ])         }     ] callback<mongoiterator<document>>,     find ) 

here stack trace:

unexpected mongodb connection closed: auth(mongodb(43026-->localhost/127.0.0.1:27017)). try reconnect. reconnected localhost/127.0.0.1:27017 exception in thread "mongodb 43026<--localhost/127.0.0.1:27017" java.lang.nullpointerexception: cannot invoke method hasnext() on null object     @ org.codehaus.groovy.runtime.nullobject.invokemethod(nullobject.java:77)     @ org.codehaus.groovy.runtime.callsite.pogometaclasssite.call(pogometaclasssite.java:45)     @ org.codehaus.groovy.runtime.callsite.callsitearray.defaultcall(callsitearray.java:45)     @ org.codehaus.groovy.runtime.callsite.nullcallsite.call(nullcallsite.java:32)     @ org.codehaus.groovy.runtime.callsite.callsitearray.defaultcall(callsitearray.java:45)     @ org.codehaus.groovy.runtime.callsite.pogometaclasssite.call(pogometaclasssite.java:54)     @ org.codehaus.groovy.runtime.callsite.abstractcallsite.call(abstractcallsite.java:112)     @ mongoasync$_run_closure2_closure6.docall(mongoasync.groovy:126)     @ sun.reflect.generatedmethodaccessor54.invoke(unknown source)     @ sun.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodaccessorimpl.java:43)     @ java.lang.reflect.method.invoke(method.java:601)     @ org.codehaus.groovy.reflection.cachedmethod.invoke(cachedmethod.java:90)     @ groovy.lang.metamethod.domethodinvoke(metamethod.java:233)     @ org.codehaus.groovy.runtime.metaclass.closuremetaclass.invokemethod(closuremetaclass.java:272)     @ groovy.lang.metaclassimpl.invokemethod(metaclassimpl.java:909)     @ groovy.lang.closure.call(closure.java:411)     @ org.codehaus.groovy.runtime.convertedmap.invokecustom(convertedmap.java:50)     @ org.codehaus.groovy.runtime.conversionhandler.invoke(conversionhandler.java:81)     @ com.sun.proxy.$proxy14.callback(unknown source)     @ com.allanbank.mongodb.client.abstractreplycallback.handle(abstractreplycallback.java:82)     @ com.allanbank.mongodb.client.abstractvalidatingreplycallback.callback(abstractvalidatingreplycallback.java:72)     @ com.allanbank.mongodb.client.abstractvalidatingreplycallback.callback(abstractvalidatingreplycallback.java:33)     @ com.allanbank.mongodb.connection.message.replyhandler.reply(replyhandler.java:77)     @ com.allanbank.mongodb.connection.socket.socketconnection.reply(socketconnection.java:560)     @ com.allanbank.mongodb.connection.socket.socketconnection$receiverunnable.receiveone(socketconnection.java:735)     @ com.allanbank.mongodb.connection.socket.socketconnection$receiverunnable.run(socketconnection.java:683)     @ java.lang.thread.run(thread.java:722) 

thanks information.

i pretty sure found bug.

there race between callback/iterator query getting name of server handling query (needed getmore requests) , receive of reply. not sure how has not been seen others.

there patched jar here: [redact]. let me know if solves problem you.

the 1.2.2 version available fix: http://www.allanbank.com/mongodb-async-driver/download.html

assuming does, push fix out 1.2.2 tomorrow.

rob.

edit: add link official version.


Comments

Popular posts from this blog

linux - Does gcc have any options to add version info in ELF binary file? -

android - send complex objects as post php java -

charts - What graph/dashboard product is facebook using in Dashboard: PUE & WUE -