Ah, right.  Maybe there should be an if (!obc.get() && handle_cache_miss(...)) return; at the top for the miss case, and a separate handle_cache_hit case down below?  We aren't doing anything for hit yet, so may be just naming this handle_cache_miss() and putting the obc check in the caller might make sense.  Basically, if there is a hit/obc, I suspect any action should go after the degraded etc checks.