Skip to content

v1.2.0

Latest

Choose a tag to compare

@github-actions github-actions released this 26 Jul 03:48
95ce878
  • 新增:纯内存模式——redis.addr 留空即彻底禁用 Redis,不建客户端、不尝试连接、/healthmemory 后端。此前留空会去连隐式的 localhost:6379 再失败回退。WHOIS_REDIS_ADDR 区分「未设置」(沿用配置文件)与「显式为空」(禁用 Redis),容器部署不挂配置文件也能用;cache.requireRedis: true 配空地址属自相矛盾,启动即报错
  • 修复:TLD 既无 WHOIS 也无 RDAP 服务器时返回 404not-found)而非 500。没有服务器是对所查资源的回答,不是服务端故障,此前 /favicon.ico 这类请求就能把 5xx 指标打脏;?raw 路径本来就是这么答的
  • 修复:一个 IP 或前缀的等价写法现在共用一条缓存和一次上游查询——地址与前缀在使用前统一规范化(2001:0db8:0:0:0:0:0:12001:db8::1),前缀主机位归零(192.0.2.5/24192.0.2.0/24),后者也正是 RFC 9082 里 ip 查询所指的网段
  • 修复:?refresh 不再挂到同一资源进行中的普通去重查询上——调用方要的是强制回源,此前却可能拿到并非自己触发的结果,响应还标着 X-Cache: REFRESH。并发 refresh 之间仍共用一次上游查询;refresh 在运行期间独占该缓存条目,与它重叠的普通查询不再把更旧的结果、或 not-found 标记盖上去
  • 修复:等待方全部断开的去重查询只占一个并发槽,无论有多少等待方取消。此前每个取消的等待方都各转交一个槽,大量客户端查同一个慢资源再断开即可占满 server.rateLimit
  • 修复:脱离调用方的上游查询已纳入优雅停机排空,停机会等它完成回源与缓存写入(仍在原有的有界窗口内),不再可能在后台查询还在写的时候关掉缓存和 Redis 客户端
  • 变更:/openapi.json 随实例的鉴权模式变化——配置了 auth.keys 时,文档 security 里的匿名选项被去掉,生成的客户端因此知道凭证是必需而非可选;开放实例的文档不变
  • 变更:内置 IANA 列表改由 tools/genserverlist 每月在 CI 再生成,有漂移就自动开 PR。两份文件都是 IANA 的严格镜像:IANA 不再报的条目直接删;任何一次抓取或 ~1400 次 whois.iana.org 查询失败则整轮放弃,不会把网络故障当成注册局撤下服务器
  • 列表本轮变化:.web 新增 RDAP 服务器,.circle.got.jot 从 Nominet 迁至 Identity Digital,.safety 移出 WHOIS 表——IANA 未登记它的服务器,而此前手工记录的那台实测回 "TLD is not supported"
  • 依赖:prometheus/client_golang 1.24.0

  • Added memory-only mode: leaving redis.addr empty now disables Redis outright — no client, no connection attempts, and /health reports the memory backend. WHOIS_REDIS_ADDR distinguishes unset (keep the config-file value) from explicitly empty (disable Redis), so containers can opt in without mounting a config file; cache.requireRedis: true with an empty address is rejected at startup as contradictory
  • Fixed: a domain whose TLD has neither a WHOIS nor an RDAP server answers 404 (not-found) instead of 500 — having no server is an answer about the resource, not a server-side failure, and reporting it as one put junk requests like /favicon.ico into the 5xx metrics
  • Fixed: equivalent spellings of one IP address or prefix now share a single cache entry and a single upstream query (2001:0db8:0:0:0:0:0:12001:db8::1), and a prefix's host bits are masked off (192.0.2.5/24192.0.2.0/24) — the network RFC 9082 defines the ip query to name
  • Fixed: ?refresh no longer attaches to a regular deduplicated query already in flight; a refresh also owns the cache entry while it runs, so an overlapping ordinary query cannot land its older result — or its not-found marker — on top of the refreshed one
  • Fixed: a deduplicated query whose waiters all disconnect holds exactly one concurrency slot, no matter how many waiters canceled; previously each one transferred its own, so clients querying a slow resource and disconnecting could occupy all of server.rateLimit
  • Fixed: detached upstream queries are covered by the graceful-shutdown drain, so shutdown waits for their fetch and cache writes instead of possibly closing the cache and Redis client underneath them
  • Changed: /openapi.json reflects the instance's authentication mode — with auth.keys configured, the anonymous alternative is dropped from the document's security requirements
  • Changed: the compiled-in IANA lists are regenerated monthly in CI by tools/genserverlist, which opens a pull request whenever they drift. Both files are strict mirrors of what IANA publishes: entries IANA no longer reports are dropped, and nothing is written unless every fetch and all ~1400 whois.iana.org lookups succeeded
  • This refresh: .web gained an RDAP server, .circle/.got/.jot moved from Nominet to Identity Digital, and .safety left the WHOIS map — IANA lists no server for it, and the one recorded by hand answers "TLD is not supported"
  • Dependencies: prometheus/client_golang 1.24.0