Clojure 2024 年状态调查 中分享您的想法!

欢迎!请参阅 关于 页面以获取更多关于如何使用此信息的信息。

0
tools.deps

你好,我在处理 AWS CDK 与 Datomic Cloud 项目进行工作,并遇到了这个问题(CLI 1.10.3.855)。看起来如果定义了 S3 仓库(例如 datomic 仓库)和某些依赖项,CLI/deps 似乎会进入无限解析循环。在某个阶段后,我会看到相同的 "正在下载:来自 <repo-alias>" 消息,然后它会因为 "打开文件太多" 异常而崩溃

以下是导致问题的简化版 dips.edn,注意取消注释 :mvn/repos 会使问题消失。进一步来说,iam 和 core CDK 依赖项本身(在有 :mvn/repos 定义的)似乎也不会引起此问题。

{:paths   ["src" "resources"]
 :deps    {org.clojure/clojure {:mvn/version "1.10.3"}
           ;com.datomic/ion                  {:mvn/version "0.9.50"},
           ;com.datomic/client-cloud         {:mvn/version "0.8.113"},
           }
 :mvn/repos
          {"datomic-cloud" {:url "s3://datomic-releases-1fc2183a/maven/releases"}}
 :aliases {:ion-dev {:extra-deps {com.datomic/ion-dev {:mvn/version "0.9.290"}}}
           :cdk     {:extra-paths ["cdk"]
                     :extra-deps  {
                                   software.amazon.awscdk/codebuild {:mvn/version "1.115.0"}
                                   ;software.amazon.awscdk/core      {:mvn/version "1.115.0"}
                                   ;software.amazon.awscdk/iam       {:mvn/version "1.115.0"}
                                   }}}}

2 答案

+1

记录在 https://clojure.atlassian.net/browse/TDEPS-199

我能够重现这个问题。有些并行操作可能会使错误变得难以理解,所以使用 -Sthreads 1 有一点帮助。我有点怀疑这更多地与套接字有关,而不是实际的文件。但是,需要进一步调查。

非常感谢!嗯,我不确定我在之前调查时发生了什么,但我随后能够在tools.deps项目的REPL中让它失败。
只是顺便提一下,是的……套接字啦。图片没发上去,但经过调整JVM允许我的REPL会话更多文件句柄后,它运行得更久,最终在失败之前打开了25k个端口
听起来很可疑,谢谢。我会在某个时候深入研究,但可能需要一段时间。
没问题。但,我觉得我修复了它!😉 我只是移除了显式将http-client传递给aws/client的代码。我有一个补丁,但没有JIRA账户。
要提供补丁,您需要遵循贡献者流程(签署贡献者协议,请求访问jira,将补丁附加到jira)。请参阅https://clojure.org/dev/dev#_becoming_a_contributor

或者如果你只想指向一些代码,也可以。
填写了贡献协议,但在此期间,它在我的分支上:[https://github.com/eoliphan/tools.deps.alpha](https://github.com/eoliphan/tools.deps.alpha)
0

更多一些信息(以及奇怪之处)。所以,我决定亲自查看,简化了我的项目并直接拉取了0.12.985。在REPL中运行以下内容给了我相同的问题

(require '[clojure.tools.deps.alpha :as deps])
  (require '[clojure.tools.deps.alpha.util.maven :as mvn])
  (deps/resolve-deps {:paths ["src" "resources"]
                      :deps  '{org.clojure/clojure              {:mvn/version "1.10.3"}
                               com.datomic/ion                  {:mvn/version "0.9.50"},
                               software.amazon.awscdk/codebuild {:mvn/version "1.115.0"}}
                      :mvn/repos
                             (merge mvn/standard-repos {"datomic-cloud" {:url "s3://datomic-releases-1fc2183a/maven/releases"}})} {})

但是,然后我拉取了tools.deps.alpha代码,并在富评论块中运行了相同的内容,它运行正常。

 (print-tree
    (resolve-deps {:paths ["src" "resources"]
                   :deps  '{org.clojure/clojure              {:mvn/version "1.10.3"}
                            com.datomic/ion                  {:mvn/version "0.9.50"},
                            software.amazon.awscdk/codebuild {:mvn/version "1.115.0"}}
                   :mvn/repos
                          (merge mvn/standard-repos {"datomic-cloud" {:url "s3://datomic-releases-1fc2183a/maven/releases"}})}
      {}))

我最初假设它在master上已修复,但即使检出0.12.985标签并重新运行似乎也没有问题。在我的测试项目中,将tools.deps设置为:local/root或:git/url类型的依赖,它按预期正常工作。

所以我怀疑CLI.jar本身可能有些奇怪。我尝试升级到最新的1.10.3.929,但通过CLI仍然存在此问题

...