anchor.diff:      dets:from_ets(drains, drains), dets:sync(drains),
       ok.
   
  -boot_nsync(Block) ->
  +boot_nsync() ->
       ok = application:start(nsync, temporary),
  -    Opts = nsync_opts(Block),
  +    Opts = nsync_opts(),
       io:format("nsync:start_link(~p)~n", [Opts]),
       A = now(),
       {ok, _Pid} = nsync:start_link(Opts),
       B = now(),
       io:format("nsync load_time=~w~n", [timer:now_diff(B,A) div 1000000]).
   
  -nsync_opts(Block) ->
  +nsync_opts() ->
       RedisOpts = logplex_utils:redis_opts("LOGPLEX_CONFIG_REDIS_URL"),
       Ip = case proplists:get_value(ip, RedisOpts) of
           {_,_,_,_}=L -> string:join([integer_to_list(I) || I <- tuple_to_list(L)], ".");
  
positive.code:     end,
      RedisOpts1 = proplists:delete(ip, RedisOpts),
      RedisOpts2 = [{ip, Ip} | RedisOpts1],
      [{callback, {nsync_callback, handle, []}}, {block, Block}, {timeout, 20 * 60 * 1000} | RedisOpts2].
  
  redo_opts() ->
      case os:getenv("LOGPLEX_CONFIG_REDIS_URL") of
  
negative.code:     {ok, _} = dets:open_file(channels, [{keypos, 2}, {type, set}]),
      {ok, _} = dets:open_file(tokens,   [{keypos, 2}, {type, set}]),
      {ok, _} = dets:open_file(drains,   [{keypos, 2}, {type, set}]),
      ok.
  
  populate_ets([]) -> ok;
  
  