> 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. -DrD-