【问题标题】:What is the timeout on IBM's Swift Sandbox?IBM 的 Swift Sandbox 的超时时间是多少?
【发布时间】:2016-12-04 03:26:14
【问题描述】:

我遇到了一个问题,即尝试在 IBM's Swift Sandbox 上运行代码会导致某种内部超时。

Swift Ver. 3.0.1 (Release)
Platform: Linux (x86_64)
Error running code: 
WARNING: Your kernel does not support swap limit capabilities, memory limited without swap.
/swiftfiles/doit.sh: line 51:    42 Illegal instruction     timeout ${TIMEOUT} .build/debug/TempCode

有问题的代码正在解码一个大的 Base64 编码字符串:

let base64EncodedInput = [really really long string]

let inputData = Data(base64Encoded: base64EncodedInput)!

let inputDecodedString = String(data: inputData, encoding: .utf8)!

let rowArray = inputDecodedString.components(separatedBy: "\n")

可以看到完整的数据串,在线运行代码here

我是否已经用尽了分配给我的 Swift 进程的时间?超时时间是多少?

【问题讨论】:

  • 我相信现在有十秒的超时,但这不是我们的超时消息的样子。您看到的消息表明正在运行一些非法代码,但可能会抑制完整的错误消息。我将对此进行更深入的研究并回复您。
  • @TheSoundDefense 感谢您对此进行调查。我在玩输入法,这次遇到了不同的错误:gist
  • 这可能是服务器问题,不一定是您的代码有问题。我得看看。
  • @TheSoundDefense 谢谢。有没有更好的地方来报告此类问题(可能是 IBM JIRA 板或其他东西)?还是我应该继续使用ibm-swift-sandbox 标签。
  • 沙盒页面顶部是一个反馈链接,如果您知道它们是错误,您可以在其中报告错误等内容。不过,它目前需要一个 IBM developerWorks 帐户。

标签: linux swift ibm-swift-sandbox


【解决方案1】:

为了回答标题中的问题,我们实现了 10 秒的硬超时,但如果内存耗尽或堆栈溢出,代码可能会更快地被终止。但这并不是您在这里看到的问题。

经过一番调查,我们确定在沙盒链接中创建超大字符串的 base 64 编码服务使用 \r\n 代替 \n 换行。当您使用 let rowArray = inputDecodedString.components(separatedBy: "\n") 时,这会导致错误,因为 Foundation 中似乎存在错误。如果您改为使用let rowArray = inputDecodedString.components(separatedBy: "\r\n"),您应该会看到您的问题消失了。与此同时,我们将向 Foundation 提交问题。

您看到timeout 的原因是我们返回了一条不太好的错误消息。 timeout ${TIMEOUT} .build/debug/TempCode 行是我们如何执行沙盒用户代码的一部分,当该行失败时,我们将其作为错误消息的一部分返回。我们将在未来处理一个不那么令人困惑的错误消息。

编辑:事实证明这是一个已知的错误。 https://bugs.swift.org/browse/SR-2483

【讨论】:

  • 谢谢,这很有帮助。请在此处链接到您在bugs.swift.org 上打开的票证,以便我查看问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-26
  • 2010-11-12
  • 2013-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多