sealdice/sealdice-core

[Bug]: 在使用cgo-free Sqlite驱动wal模式时,部分Linux下海豹的data-log.db-wal 无法写入 data-log.db

Opened this issue · 3 comments

在提问之前...

  • 我理解 Issue 是用于反馈和解决问题的,而非吐槽评论区,将尽可能提供更多信息帮助问题解决
  • 我填写了简短且清晰明确的标题,以便开发者在翻阅 issue 列表时能快速确定大致问题。而不是“一个建议”、“卡住了”等
  • 我已查看master branch或最新测试版的更新内容,并未提及该 bug 已被修复的情况
  • 已有issue中并没有看见其他人与我反馈相同的问题

问题描述

在不确定情况下,data-log.db-wal 无法写入 data-log.db,并随着海豹重启被删除,造成数据丢失

如何复现

无法稳定复现,但目前已有3个 Linux 豹发现此情况

你期望发生的

正常写入

实际上发生的

未写入

日志文件

日志无报错,数据库带个人隐私不放在 GitHub 上了

截图

No response

海豹核心版本

SealDice 1.4.5+20240410
SealDice 1.4.6-beta+20240719.85d86bd

操作系统

Linux version 5.15.0-76-generic (buildd@lcy02-amd64-028) (gcc (Ubuntu 11.3.0-1ubuntu1~22.04.1) 11.3.0, GNU ld (GNU Binutils for Ubuntu) 2.38)

帐号类型

QQ KOOK

使用协议

No response

附加内容

将数据复制到 Windows 运行可正常落盘,但无法确定是 Linux 的问题

fy0 commented

有无可能是进程权限问题,数据库是只读权限

有无可能是进程权限问题,数据库是只读权限

很怪的现象,手动执行备份后,观察到data.db可以正常刷入,但是data-logs.db无法正常刷入,还在不断增大,而且PRAGMA wal_checkpoint(TRUNCATE);执行后没有任何报错

此处总结一些收集信息:

  1. 在某出现该问题的骰主上,进行测试,编译cgo free版本 146,data-log.db-wal无法正确落盘写入。
  2. 改编译cgo版本后,正确进行落盘

检查使用的cgo free驱动来源:
来源地址
指向了modernc.org的驱动

从对方的issue中,发现该议题:

议题地址

证明cgo free版本的wal落盘存在不良。由于是四个月前的议题,且处于开放状态,我认为是没有解决。

有争议的一点是:在对方issue中,提到1.28.0版本工作正常。而我们引入的库使用的依赖库刚好是1.28.0版本,这和议题描述不符。

在issue中最后一条提到了一个个人分支修复,私认为可以试试以它构建一个豹进行测试。