【问题标题】:How to debug remote-cache write failures?如何调试远程缓存写入失败?
【发布时间】:2021-02-02 06:14:45
【问题描述】:

我们正在使用 Bazel(通过 Bazelisk)并设置了 GCS bucket remote cache as documented。但是,当我们运行时,我们似乎在远程缓存写入阶段经常收到BulkTransferExecptions:

>  bazel build //... --sandbox_debug --verbose_failures                                                       
INFO: Invocation ID: fba91f67-788f-47cc-be4e-24f92ed11301
INFO: Analyzed 25 targets (74 packages loaded, 3245 targets configured).
INFO: Found 25 targets...
WARNING: Writing to Remote Cache:
BulkTransferException
INFO: Elapsed time: 17.115s, Critical Path: 15.47s
INFO: 16 processes: 16 worker. 
INFO: Build completed successfully, 39 total actions

据我所知,我拥有适当的访问权限 (Storage Object Admin)。

我一直在尝试获取有关该特定异常的更多信息,但一直无法获得。

如果存储桶不工作,我预计从缓存读取时会出现异常:我在尝试其他 URL 访问存储桶时看到了这样的事情,例如域 storage.cloud.google.com 而不是 storage.googleapis.com .

欢迎任何和所有帮助调试这里发生的事情的建议! documentation 很少说明会发生什么如果您遇到异常,据我所知,没有上传任何结果,因此实际上没有发生缓存。

更新 2020/07/09

由于某种未知原因,当我们从一个存储桶转移到一个更永久的计划时,它就停止了。所以事情对我们有用,据我们所知,桶是相同的,所以我们不知道为什么它最初会失败。

【问题讨论】:

  • 这似乎与某些 Bazel Remote 缓存 issues 有关。从 Bazel 支持或 Bazel 专用论坛获得帮助可能会更有成效。
  • 我的团队(在 GCP 计算上)需要将存储空间 access scope(例如 https://www.googleapis.com/auth/devstorage.read_write,参见 full list)授予我们 VM 的服务帐户用户。

标签: google-cloud-storage bazel


【解决方案1】:

您可以使用--verbose_failures,这将使它打印出更长的堆栈跟踪。我刚刚遇到了一个非常相似的问题,并发现我的问题是由于我的服务帐户对我的 GCS 存储桶的权限不足。我通过--verbose_failures 收到了这个更有用的错误消息:

<?xml version='1.0' encoding='UTF-8'?><Error><Code>AccessDenied</Code><Message>Access denied.</Message><Details>REDACTED@REDACTED.iam.gserviceaccount.com does not have storage.objects.delete access to REDACTED/cas/REDACTED.</Details></Error>

我必须阅读the source code the message came from。我将尝试提交 PR 以将此提示添加到 Bazel 文档中:https://github.com/bazelbuild/bazel/pull/12945

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-23
    • 2017-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-02
    • 1970-01-01
    相关资源
    最近更新 更多