anchor.diff:  %% for a given ring/upnodes list
   -spec get_apl(binary(), n_val(), ring(), [node()]) -> preflist().
   get_apl(DocIdx, N, Ring, UpNodes) ->
  +    [{Partition, Node} || {{Partition, Node}, _Type} <- 
  +                              get_apl2(DocIdx, N, Ring, UpNodes)].
  +
  +%% Get the active preflist taking account of which nodes are up
  +%% for a given ring/upnodes list and annotate each node with type of
  +%% primary/fallback
  +-spec get_apl2(binary(), n_val(), ring(), [node()]) -> preflist2().
  +get_apl2(DocIdx, N, Ring, UpNodes) ->
       UpNodes1 = ordsets:from_list(UpNodes),
       Preflist = riak_core_ring:preflist(DocIdx, Ring),
       {Primaries, Fallbacks} = lists:split(N, Preflist),
  
positive.code: check_up([{Partition,Node}|Rest], UpNodes, Up, Pangs) ->
      case is_up(Node, UpNodes) of
          true ->
              check_up(Rest, UpNodes, [{Partition, Node} | Up], Pangs);
          false ->
              check_up(Rest, UpNodes, Up, [{Partition, Node} | Pangs])
      end.
  
negative.code: %% -------------------------------------------------------------------
  -module(riak_core_apl).
  -export([active_owners/1, active_owners/2,
           get_apl/3, get_apl/4, get_apl2/4,
           get_primary_apl/3, get_primary_apl/4
          ]).
  
  