为啥 mysql 表“muc_room”存储不持久空间?

Posted

技术标签:

【中文标题】为啥 mysql 表“muc_room”存储不持久空间?【英文标题】:Why mysql table "muc_room" stores not persistent room?为什么 mysql 表“muc_room”存储不持久空间? 【发布时间】:2020-02-06 06:27:21 【问题描述】:

我的 ejabberd 服务器使用 mysql DB 作为外部存储a,我使用 ejabberd API 的方法 /create_room_with_opts 来创建我的房间,选项:name: "persistent", value: "false" 。 一切正常的文件和创建的房间看起来实际上是临时的——当最后一个参与者离开时它们会自动关闭。

但我有一个问题 - 创建的非持久房间保存在表 muc_room 中,尽管它必须只包含持久房间 (https://docs.ejabberd.im/developer/sql-schema/#table-muc-room)

例如,我可以在 muc_room 表中有以下选项的空间:

[allow_change_subj,true,
 allow_private_messages,true,
 allow_private_messages_from_visitors,anyone,
 allow_query_users,true,
 allow_subscription,false,
 allow_user_invites,false,
 allow_visitor_nickchange,true,
 allow_visitor_status,true,
 anonymous,true,
 captcha_protected,false,
 lang,<<>>,
 logging,false,
 mam,true,
 max_users,200,
 members_by_default,true,
 members_only,false,
 moderated,true,
 password,<<>>,
 password_protected,false,
 ======> persistent,false,
 presence_broadcast,[moderator,participant,visitor],
 public,true,
 public_list,true,
 title,<<>>]

主要问题是我在重新启动我的 ejabberd 服务器时收到了重新创建的所有非持久性房间。

问题: 1) 为什么不使用存储在 muc_room 表中的 ejabberd API 创建持久化房间(可能是一些错误)? 2) 重启ejabberd服务器时如何避免重新创建这些房间(除了从数据库中删除:手动或使用mysql事件)?

【问题讨论】:

【参考方案1】:

为什么不使用 ejabberd API 创建的持久化房间存储在 muc_room 表中

这是特意在此提交中添加的: https://github.com/processone/ejabberd/commit/05c2995c7a4c2afb8481826f9dbe9ed9ec0b282b

解决这个问题: https://github.com/processone/ejabberd/issues/1954

显然,现在这不是必需的,所以我在最近的提交中删除了它: https://github.com/processone/ejabberd/commit/5574b21dd67ba898ea1ba55fb4556b6cd53c58cd

【讨论】:

在您尝试此解决方案后,如果它解决了您的问题,请将此答案标记为“好”,以免其他人花时间对此进行调查。

以上是关于为啥 mysql 表“muc_room”存储不持久空间?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Redux-Persist 不持久化存储

docker mysql数据会保存下来吗

为啥mysql在持久化上比redis用的多

Mysql的两种存储引擎以及区别

为啥javascript localStorage不持久并删除值[关闭]

为啥quartz的表每次都要全部删除然后再从新生成才能按照规定的时间来执行难呢