anchor.diff:      Url.
   
   find_unstable_nodes(NS) ->
  -     DiskUsage = ddfs_master:avg_disk_usage(NS),
  -     UnderUsed = find_unstable_nodes(underused, NS, DiskUsage),
  -     OverUsed = find_unstable_nodes(overused, NS, DiskUsage),
  -     lager:info("GC: average disk utilization: ~p, "
  -                "over utilized nodes: ~p, "
  -                "under utilized nodes: ~p",
  -                [DiskUsage, length(OverUsed), length(UnderUsed)]),
  +    DiskUsage = ddfs_master:avg_disk_usage(NS),
  +    UnderUsed = find_unstable_nodes(underused, NS, DiskUsage),
  +    OverUsed = find_unstable_nodes(overused, NS, DiskUsage),
  +    lager:info("GC: average disk utilization: ~p, "
  +               "over utilized nodes: ~p, "
  +               "under utilized nodes: ~p",
  +               [DiskUsage, length(OverUsed), length(UnderUsed)]),
       {UnderUsed, OverUsed}.
   
   -spec find_unstable_nodes(underused | overused, [node_info()], non_neg_integer())
  
positive.code:     % collect the nodes that host a replica of each known in-use blob,
      % and also add the nodes that host any recovered replicas.  We
      % store this in a new ETS, gc_blobs, which will store for each
      % blob, (a) the known locations, (b) any recovered locations,
      % and (c) for each blob, any new replicated locations.
  
      % gc_blobs: {Key :: object_name(),
      %            Present :: [object_location()],
  
negative.code: find_unstable_nodes(underused, NodeStats, AvgUsage) ->
      Threshold = get_balance_threshold(),
      [N || {N, _} = Node <- NodeStats, ddfs_master:get_utilization_index(Node) < AvgUsage - Threshold];
  
  find_unstable_nodes(overused, NodeStats, AvgUsage) ->
      Threshold = get_balance_threshold(),
      [N || {N, _} = Node <- NodeStats, ddfs_master:get_utilization_index(Node) > AvgUsage + Threshold].
  