anchor.diff:  %% @copyright 2008 Konrad-Zuse-Zentrum für Informationstechnik Berlin
   %% @version $Id$
   -module(admin).
  -
   -author('schuett@zib.de').
   -vsn('$Id$ ').
   
  --export([add_nodes/1, add_nodes/2, check_ring/0, nodes/0, start_link/0, start/0, 
  -	 get_dump/0, get_dump_bw/0, diff_dump/3, print_ages/0, check_routing_tables/1,
  +-export([add_nodes/1, add_nodes/2, check_ring/0, nodes/0, start_link/0, start/0,
  +         get_dump/0, get_dump_bw/0, diff_dump/3, print_ages/0,
  +         check_routing_tables/1,
            dd_check_ring/1,dd_check_ring/0, number_of_nodes/0 ]).
   
   %%====================================================================
  
positive.code: check_ring_foldl({ok, Node}, PredsSucc) ->
      MyId = get_id(node_details:me(Node)),
      if
  	MyId == PredsSucc ->
  	    get_id(hd(node_details:succlist(Node)));
  	true ->
  	    {error, lists:flatten(io_lib:format("~p didn't match ~p", [MyId, PredsSucc]))}
      end.
  
  
  
  get_id(Node) ->
      case node:is_null(Node) of
  		true ->
  			"null";
  		false ->
  	    	node:id(Node)
      end.    
  
  number_of_nodes() ->
      boot_server:number_of_nodes(),
  
negative.code: -spec(check_ring/0 :: () -> {error, string()} | ok).
  check_ring() ->
      erlang:put(instance_id, process_dictionary:find_group(cs_node)),
      Nodes = statistics:get_ring_details(),
      case lists:foldl(fun check_ring_foldl/2, first, Nodes) of
          {error, Reason} ->
              {error, Reason};
          _X ->
              ok
      end.
  
  check_ring_foldl({ok, Node}, first) ->
      get_id(hd(node_details:succlist(Node)));
  