嗨,当我升级到 Clojure 1.11.0 时遇到了以下情况。在我们应用程序中,我们有一些创建 V5 (基于名称的 SHA1 散列) UUIDs 的地方,使用了 danlentz/clj-uuid 库。升级之后,产生的 v5 UUIDs 不同。一个例子是
(def ^:const +namespace+ #uuid "50d94d91-a1cf-422d-9586-4ddacf6df176")
(clj-uuid/v5 +namespace+ :some-keyword)
;; Clojure 1.10.3
=> #uuid "d30e9c3c-ced2-534e-a6b8-ecf784fb0785"
;; Clojure 1.11.0
=> #uuid "a16f6719-952a-55b9-b71b-b15dd263665b"
经过一些尝试和错误,似乎是不一致的本地部分参数导致的,即 :some-keyword,因为它在 clj-uuid/v5 函数中将关键字对象转换为字节数组,现在看上去是不同的。(如果我用字符串而不是关键字作为本地部分参数,那么产生的 UUID 在 Clojure 版本升级前后是一致的。)
生成的 UUIDs 用在下游系统中,处理这种变化将非常困难。有没有可能实现与之前完全相同的 UUIDs 呢?