Logster 中线程不安全的哈希使用

在使用 Discourse 的多线程 Ruby 实现和服务器(TruffleRuby/Puma)时,logster gem 中不安全的哈希(hash)使用会在以下部分附近产生错误:

https://github.com/discourse/logster/blob/31849a4154c6b1edb05fe6d241076329aa228359/lib/logster/logger.rb#L23-L29

3 个赞

好的,您是否可以添加一个互斥锁(Mutex)到 PR 中?这似乎是解决此问题的正确方法。

(另外,@dev-managers / @jomaxro,我想为了与其他项目保持一致,我们应该在 GitHub 上启用 logster 问题?我投票赞成。)

4 个赞

一个帖子被拆分到一个新主题:我们应该在哪些 Discourse 管理的 gem 上启用 GitHub 问题

如果使用了 Mutex,为了正确性,它应该同时用于写入和读取访问。

此功能似乎更适合 fiber/thread-local 变量。

是否可以拥有多个 Logster::Logger 实例,还是只有一个?如果存在多个,我们需要某种方式将实例的 object_id 作为 fiber/thread-local 查找所用键的一部分。

1 个赞

当然!我认为这应该可以解决问题,同时大大简化此代码 :+1:

2 个赞

我很确定只有一个,但我添加了一些保护措施。

我选择不使用 define_finalizer,由消费者负责清理,否则记账会变得非常复杂。

此主题已在 3 天后自动关闭。不再允许回复。