OK, looks pretty good. But....

One little thing is still bothering me. Suppose we get interrupted from the 
sleep() and bail out on that basis. If we got to the point where we're 
sleeping, we must have caught an AccessDeniedException previously. 
Unfortunately this exception is discarded if we were interrupted. This might 
lose valuable diagnostic information. So, what do we do with it? How about 
adding:

    ie.addSuppressed(cause);

in the catch InterruptedException clause, before throwing the RuntimeException.
Another good point...


(There's another issue which is that if there were previous retries, the ADEs 
from them are thrown away. But maybe we should save that one for another day.)
I had the same thought, but aside from collecting and reporting all of them 
somehow I'm not sure what could be done about it.

Maybe instead of:
     cause = ade;

do:
     if (cause != null) {
         cause.addSuppressed(ade);
     } else {
         cause = ade;
     }

Then they'll at least all be reported when RuntimeException is thrown.
Very good point indeed,  how about we also capture/print unconditionally
how many retries were made, this might give us some indication  of the
gremlin we are dealing with.

Kumar


-DrD-


Reply via email to