首页 > 解决方案 > 为什么 mysql 表“muc_room”存储不持久空间?

问题描述

我的 ejabberd 服务器使用 mysql DB 作为外部存储,我使用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)为什么不使用 ejabberd API 创建的持久化房间存储在muc_room表中(可能是一些错误)?2)如何避免在重新启动 ejabberd 服务器时重新创建这些房间(除了从数据库中删除它:手动或使用 mysql 事件)?

标签: ejabberdejabberd-api

解决方案


为什么不使用 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


推荐阅读