Hi guys,

as everyone who build the server from time to time knows, we have random errors in PagedSearch tests.

Stefan spent some time to see what's going on, and I must admit I was lazzy enough to accept the idea that we have errors in this area, until I move my butt to fix it.

So I checked the code, and I found a couple of major errors in this code (and as I wrote it, I'm responsible for this) : - first, I wrongly assumed that the cookie would be 4 bytes long, as it was stored in an int on the server. Nothing could be more wrong, as an int BER encoded can be from 1 to 4 bytes. We had situation where, when the cookie was encoded on 3 bytes only, we had an internal AIOOBE. I fixed that. - second, the cookie was computed based on the message id plus a time based number (System.nanoseconds(), namely). This is *stupid*. There are potential collisions when computig such a cookie. I changed it to use an AtomicInteger - which as a side effect removed the local synchronization - and a 16 bits shift to the left to allow 2^16 cookie renewig for a single message - more than enough to cover every cases.

I still have random issues at this point, but less frequently. What happens is that we receive a searchRequest with a cookie, just after the previous request has been completed. I have no idea why. If I add a Thread.sleep(10) in the doLoop() method of the test, I'm able to run 10000 times the paged search ( this is 40 000 paged search requests...).

I will try tomorrow the same test but using our API instead of JNDI.

Will keep you informed.

--
Regards,
Cordialement,
Emmanuel Lécharny
www.nextury.com


Reply via email to