anchor.diff:          true ->
               {stop, timeout, State};
           false ->
  -            {noreply, State}
  +            {noreply, State, ?HIBERNATE_TIMEOUT}
       end;
   handle_info({'EXIT', _Pid, _Reason} = ExitSignal, State) ->
       ?rebalance_error("killing myself due to exit signal: ~p", [ExitSignal]),
       {stop, {got_exit, ExitSignal}, State};
  +handle_info(timeout, #state{had_backfill = HadBF,
  +                            backfill_end_waiter = CurrentWaiter,
  +                            upstream_sender = UpstreamSender} = State) ->
  +    Timeout = case HadBF#had_backfill.value of
  +                  true ->
  +                      case CurrentWaiter of
  +                          completed ->
  +                              hibernate;
  +                          _ ->
  +                              ?HIBERNATE_TIMEOUT
  +                      end;
  +                  _ ->
  +                      hibernate
  +              end,
  +    case Timeout of
  +        hibernate ->
  +            UpstreamSender ! hibernate;
  +        _ ->
  +            ok
  +    end,
  +    {noreply, State, Timeout};
   handle_info(Msg, State) ->
       ?rebalance_warning("Unexpected handle_info(~p, ~p)", [Msg, State]),
  -    {noreply, State}.
  +    {noreply, State, ?HIBERNATE_TIMEOUT}.
   
   
   init({Src, Dst, Opts}=InitArgs) ->
  
positive.code: 
      {state_is_not_completed, true} = {state_is_not_completed, State1#state.vb_filter_change_state =/= completed},
  
      {noreply, State1};
  handle_info({tcp_closed, Socket}, #state{upstream=Socket} = State) ->
      case State#state.takeover of
          true ->
  
negative.code: -define(UPSTREAM_TIMEOUT, ns_config_ets_dup:get_timeout(ebucketmigrator_upstream_us, 600000000)).
  -define(TIMEOUT_CHECK_INTERVAL, 15000).
  -define(TERMINATE_TIMEOUT, ns_config_ets_dup:get_timeout(ebucketmigrator_terminate, 110000)).
  -define(HIBERNATE_TIMEOUT, 10000).
  
  %% gen_server callbacks
  -export([init/1, handle_call/3, handle_cast/2,
  