anchor.diff:      Pool = lookup(PoolName, State),
       ControlerModule = controler_module(Pool, State),
       ControlerModule:stop(Pool).
  +
  +random_backoff(Fun) ->
  +    random_backoff(hive_config:get(<<"connectors.backoff_num">>, 1),
  +                   hive_config:get(<<"connectors.backoff_time">>, 0),
  +                   Fun).
  +
  +random_backoff(Times, Timeout, Fun) ->
  +    ErrorMsg = hive_error_utils:format("Bad random backoff parameters: ~p times ~p ms",
  +                                       [Times, Timeout]),
  +    random_backoff(Times, {error, {connectors_error, ErrorMsg}}, Timeout, Fun).
  +
  +random_backoff(0, Ret, _Timeout, _Fun) ->
  +    Ret;
  +
  +random_backoff(Times, _Ret, Timeout, Fun) ->
  +    case Fun() of
  +        Ret = {error, _Error} -> RandomTimeout = random:uniform(Timeout),
  +                                 timer:sleep(RandomTimeout),
  +                                 random_backoff(Times - 1, Ret, Fun);
  +        Otherwise             -> Otherwise
  +    end.
  
positive.code:     inc(?CONNECTORS_REQUESTS),
      inc(?CONNECTORS_DO_SAFE),
      %% NOTE Delegates work to the pool returned by ?MODULE:use(PoolName)
      ControlerModule:transaction(PoolPid, Transaction);
  
  do_safe(PoolName, Transaction) ->
      do_safe(use(PoolName), Transaction).
  
negative.code:     inc(?CONNECTORS_RENT),
      RTimeout = hive_config:get(<<"connectors.rent_timeout">>), %% FIXME This could be faster...
      %% NOTE Delegates work to the pool returned by ?MODULE:use(PoolName)
      random_backoff(fun() -> ControlerModule:checkout(PoolPid, RTimeout) end);
  
  rent(PoolName) ->
      rent(use(PoolName)).
  