anchor.diff:              {noreply, State, hibernate};
           Logs ->
               State1 = schedule_save(State),
  -            UpgradedLogs = upgrade_entries(Logs),
  -            NewRecent = tail_of_length(lists:umerge(fun order_entries/2, Recent, UpgradedLogs),
  +            NewRecent = tail_of_length(lists:umerge(fun order_entries/2, Recent, Logs),
                                          ?RB_SIZE),
  -            case NewRecent =/= UpgradedLogs of
  +            case NewRecent =/= Logs of
                   %% send back sync with fake src node. To avoid
                   %% infinite sync exchange just in case.
                   true -> send_sync_to(NewRecent, SrcNode, SrcNode);
  
positive.code: do_log(#log_entry{code=Code, tstamp=TStamp} = Entry) when is_integer(Code) ->
      EntryNew = Entry#log_entry{server_time=calendar:now_to_local_time(TStamp)},
  
      {NewNodes, OldNodes} = cluster_compat_mode:split_live_nodes_by_version([2, 3, 0]),
      gen_server:abcast(NewNodes, ?MODULE, {do_log, EntryNew}),
  
      case OldNodes of
          [] ->
              ok;
          _ ->
              EntryOld = downgrade_entry(EntryNew),
              gen_server:abcast(OldNodes, ?MODULE, {do_log, EntryOld})
      end.
  
  %% API
  
  
negative.code: log_filename() ->
      ns_config:search_node_prop(ns_config:get(), ns_log, filename).
  
  read_logs(Filename) ->
      case file:read_file(Filename) of
          {ok, <<>>} -> [];
          {ok, B} ->
              try misc:decompress(B) of
                  B2 ->
                      B2
              catch error:Error ->
  