anchor.diff:                  ]), ?ATTEMPTS
               )
       end.
  +
  +assert_value_on_disc(Worker, Model, Key, Value) ->
  +    case ?DISC_DRV(Model) of
  +        undefined ->
  +            ok;
  +        Driver ->
  +            ?assertMatch({ok, _, #document{deleted = false, value = {_, Value, _, _}}},
  +                rpc:call(Worker, Driver, get, [
  +                    ?DISC_CTX, ?UNIQUE_KEY(Model, Key)
  +                ]), ?ATTEMPTS
  +            )
  +    end.
  +
  +assert_not_on_disc(Worker, Model, Key) ->
  +    assert_key_not_on_disc(Worker, Model, ?UNIQUE_KEY(Model, Key)).
  +
  +assert_key_not_on_disc(Worker, Model, Key) ->
  +    case ?DISC_DRV(Model) of
  +        undefined ->
  +            ok;
  +        Driver ->
  +            ?assertMatch({error, not_found},
  +                rpc:call(Worker, Driver, get, [
  +                    ?DISC_CTX, Key
  +                ]), ?ATTEMPTS
  +            )
  +    end.
positive.code: saves_should_use_repaired_node_call_ha_test(Config) ->
      saves_should_use_repaired_node(Config, call).
  
  %%%===================================================================
  %%% HA tests skeletons and helper functions
  %%%===================================================================
  
negative.code:         ?assertEqual(ok, rpc:call(Worker, consistent_hashing, set_fixed_node, [FixedWorker]))
      end, Workers),
      set_ha(Config, master_up, []),
      set_ha(Config, change_config, [1, cast]),
      test_utils:mock_unload(Workers, [ha_master]);
  end_per_testcase(Case, Config) ->
      case lists:suffix("ha_test", atom_to_list(Case)) of
          true ->
  