fix cache

This commit is contained in:
anlicheng 2025-12-04 12:43:56 +08:00
parent 2a1e39b16e
commit 46ad37c81f

View File

@ -29,20 +29,33 @@ lookup(#dns_query{name = Qname, type = QType, class = QClass}) ->
insert(#dns_query{name = Qname, type = QType, class = QClass}, insert(#dns_query{name = Qname, type = QType, class = QClass},
#dns_message{answers = Answers, authority = Authority, additional = Additional, aa = AA}) -> #dns_message{answers = Answers, authority = Authority, additional = Additional, aa = AA}) ->
TTLs = lists:foldl(fun(Term, Acc) ->
case Term of
#dns_rr{ttl = TTL} ->
[TTL|Acc];
_ ->
Acc
end
end, [], Answers ++ Authority ++ Additional),
case length(TTLs) > 0 of
true ->
TTL = lists:min(TTLs),
ExpireAt = os:system_time(second) + TTL,
TTLs = [RR#dns_rr.ttl || RR <- Answers] ++ [RR#dns_rr.ttl || RR <- Authority] ++ [RR#dns_rr.ttl || RR <- Additional], lager:debug("min ttl is: ~p, expire_at: ~p", [TTL, ExpireAt]),
TTL = lists:min(TTLs),
ExpireAt = os:system_time(second) + TTL,
Key = {Qname, QType, QClass}, Key = {Qname, QType, QClass},
Cache = #dns_cache{ Cache = #dns_cache{
key = Key, key = Key,
answers = Answers, answers = Answers,
authority = Authority, authority = Authority,
additional = Additional, additional = Additional,
rcode = 0, rcode = 0,
flags = #{aa => AA}, flags = #{aa => AA},
% unix time % unix time
expire_at = ExpireAt expire_at = ExpireAt
}, },
true = ets:insert(?TABLE, Cache). true = ets:insert(?TABLE, Cache);
false ->
ok
end.