anchor.diff:               {ok, match} |
                {error, any()} when ReadParams::#read_parameter{},
                                    Redundancies::[#redundant_node{}]).
  -read_and_repair(_ReadParameter, []) ->
  -    {error, ?ERROR_NOT_SATISFY_QUORUM};
   read_and_repair(#read_parameter{quorum = Q} = ReadParams, Redundancies) ->
  -    AvailableNodes = [RedundantNode ||
  -                         #redundant_node{available = true} = RedundantNode <- Redundancies],
  -    case (Q =< erlang:length(AvailableNodes)) of
  -        true ->
  +    case get_active_redundancies(Q, Redundancies) of
  +        {ok, AvailableNodes} ->
               read_and_repair_1(ReadParams, AvailableNodes);
  -        false ->
  -            {error, ?ERROR_NOT_SATISFY_QUORUM}
  +        Error ->
  +            Error
       end.
   
   %% @private
  
positive.code: %%--------------------------------------------------------------------
  %% INNNER FUNCTIONS
  %%--------------------------------------------------------------------
  %% @doc read reapir - compare with remote-node's meta-data.
  %% @private
  -spec(read_and_repair(ReadParams, Redundancies) ->
  
negative.code:                                    w         = WriteQuorum,
                                     d         = DeleteQuorum,
                                     ring_hash = RingHash}} ->
                      Quorum = ?quorum(Method, WriteQuorum, DeleteQuorum),
                      case get_active_redundancies(Quorum, Redundancies) of
                          {ok, Redundancies_1} ->
                              leo_storage_replicator:replicate(
                                Method, Quorum, Redundancies_1, Object#?OBJECT{ring_hash = RingHash},
                                replicate_callback(Object));
                          {error, Reason} ->
                              {error, Reason}
                      end;
                  {error,_Cause} ->
                      {error, ?ERROR_COULD_NOT_GET_REDUNDANCY}
              end;
  