logseq / logseq

A privacy-first, open-source platform for knowledge management and collaboration. Download link: http://github.com/logseq/logseq/releases. roadmap: http://trello.com/b/8txSM12G/roadmap
https://logseq.com
GNU Affero General Public License v3.0
30.26k stars 1.77k forks source link

Random page disappearing on Android // 随机出现pages内容丢失 #5841

Closed sstiger1230 closed 1 year ago

sstiger1230 commented 1 year ago

What happened?

不定时发现某些pages内容丢失,但是在"logseq\bak\pages\pages名称" 目录下,有一个备份文件,是丢失前的文件内容。

出现过多次,涉及多个pages文件,不固定。

不知道"logseq\bak\pages\pages名称" 目录是什么?

PC和手机通过Syncthing 1.20.2同步数据。

Reproduce the Bug

不知道为什么出现这种情况,不明白操作了什么。

发现文件大小为0,或者打开文件发现内容是空,才注意到内容丢失。

Expected Behavior

No response

Screenshots

logseq-1

Desktop Platform Information

windows 11, Desktop, 0.7.5 Syncthing 1.20.2

Mobile Platform Information

华为, 鸿蒙HarmonyOS 2.0, App, 0.7.5 Syncthing 1.20.2

Additional Context

No response

andelf commented 1 year ago

Android 版本最近修复了一个由同步软件行为导致的问题. 你可以尝试下 nightly 中的 Android apk https://github.com/logseq/logseq/releases/tag/nightly

sstiger1230 commented 1 year ago

谢谢

sstiger1230 commented 1 year ago

问题依旧,还是出现多个pages内容丢失 安装了Desktop/Android APP Nightly Release 20220627 版本。

sstiger1230 commented 1 year ago

好像丢失内容的总是那么几个

sstiger1230 commented 1 year ago

留意了一下,Journals也有内容丢失的,这两次都是 2022_05_26 和 2022_06_20

andelf commented 1 year ago

有没有可复现的操作序列?

sstiger1230 commented 1 year ago
  1. 电脑上运行同步软件 Syncthing 1.20.2
  2. 电脑端编辑pages
  3. 手机端运行Syncthing 1.20.2,等待同步完成
  4. 手机端运行logseq,选择刷新,读取本地文件,
  5. 手机端提示文件不匹配
  6. 再查看电脑端,几乎同样的文件内容被清空
sstiger1230 commented 1 year ago

WeChat Image_20220629133631

sstiger1230 commented 1 year ago

并不是所有被清空的文件在"logseq\bak\pages\pages名称" 目录下都有备份文件。

"logseq\bak\pages\"目录是Logseq自己创建的吗? 这个目录文件写入机制是什么?

cnrpman commented 1 year ago

@sstiger1230 文件内容和Logseq内数据库的内容冲突时, 会写到这个备份目录 如果文件是外部被删除的, 会写到logseq/recycle

File will be dumped to logseq/bak when file content is duplicated with the version in the DB. Then a "conflict modal" pops up and user may choose the version. File will be dumped to logseq/recycle if external editing detected.

cnrpman commented 1 year ago

If the file is moved to recycle, then 0.7.6 helps, which contains a fix toward the unlink behavior of 3rd party sync service on Windows 🙂 If the file is moved to bak, it might be related to external editing. We will have another fix towards the file watcher behavior.

sstiger1230 commented 1 year ago

If the file is moved to recycle, then 0.7.6 helps, which contains a fix toward the unlink behavior of 3rd party sync service on Windows 🙂 If the file is moved to bak, it might be related to external editing. We will have another fix towards the file watcher behavior.

The file I found moved to bak, it not related to external editing. It just edited by Logseq-win and Logseq-android,and use 3rd party sync service on android.

cnrpman commented 1 year ago

@sstiger1230 Yes, it is also related to the 3rd party sync service on ANDROID. We will have another fix for this.

sstiger1230 commented 1 year ago

@cnrpman 下个版本会修复吗?

cnrpman commented 1 year ago

Related: https://github.com/logseq/logseq/issues/6005

We can partially reproduce the issue

sstiger1230 commented 1 year ago

升级了0.7.7版本,问题依然存在

sstiger1230 commented 1 year ago

电脑端升级了 0.7.7版, 手机端先卸载了旧版本,并清空本地文件,重新在syncthing中删除设备后重新添加设备,重新同步目录。之后安装0.7.7版本。

之后测试,在电脑端编辑了2个文件,一个是今天的journals文件,另一个是自建的pages。等自动同步结束,查看电脑端文件,发现编辑的pages文件内容被清空。 在手机端运行logseq,内容都正常,但是查看文件目录,同样编辑的pages文件内容为0字节。

syncThing同步后,journals文件正常,但是自建的pages文件内容被清空。 @andelf

奇怪,又试着编辑一个页面,同步后内容没清空 太无语了。。。。。试着编辑了几个文件,结果最后还是有文件内容被清空。。。。。还没有找到规律

sstiger1230 commented 1 year ago

刚刚把备份的文件整个目录复制回去,结果自动同步后,发现刚才修改的文件又0字节了。

复制备份文件,等待手机、PC端同步软件同步结束,查看PC端文件目录,这次发现今天Journals文件0字节了。

sstiger1230 commented 1 year ago

image

手机端又一个奇怪现象: 如图,试来试去,手机、电脑目录都是这样。 手机端能正常查看Other文件,内容都在。 手机端查看文件,Other是0字节 手机端选择刷新,什么提示、进度都没有,完全没反映。

cnrpman commented 1 year ago

@sstiger1230 丢失的文件分别在Windows, Android 两个端下的哪个位置能找到? <graph directory>/logseq/bak还是 <graph directory>/logseq/.recycle里?

sstiger1230 commented 1 year ago

@sstiger1230 丢失的文件分别在Windows, Android 两个端下的哪个位置能找到? <graph directory>/logseq/bak还是 <graph directory>/logseq/.recycle里?

两个目录中都没有。 Windows , Android都一样

sstiger1230 commented 1 year ago

有个情况说明一下,不知道有没有关系: 通过syncThing同步的设备有多个:Windows设备3台,Android设备1台。

不过感觉还是Android的原因,现在Android暂停了同步,好像就正常了。

sstiger1230 commented 1 year ago

刚才在Android上的操作:

  1. 停止rsyncthing中logseq目录的同步
  2. 数据线连接电脑,复制logseq目录到手机
  3. 手机上启动logseq
  4. 刷新
  5. 重新索引
  6. 发现Android端最近修改的文件内容清空0字节
  7. <graph directory>/logseq/bak<graph directory>/logseq/.recycle 两个目录中都没有丢失的文件。
sstiger1230 commented 1 year ago

@cnrpman 这个问题找到原因了吗?

cnrpman commented 1 year ago

@sstiger1230 抱歉,我复现不出来 如果是reindex后被清空,被清空的文件是不是有什么特殊的文件名或者内容? 可以截图吗?

@andelf @llcc

sstiger1230 commented 1 year ago

再次尝试:

  1. 手机端清空Logseq缓存,数据。
  2. 手机端连接数据线到电脑,从电脑复制所有文件到手机。
  3. 重新配置syncthing,在手机端和电脑端进行同步。
  4. 手机端运行,添加图谱,选择刷新或者重新索引,查看手机端文件,电脑端文件,均正常。
  5. 手机端打开logseq
  6. 电脑端修改pages文件:“疫情.md” 、今天的journals文件:“2022_07_25.md”。
  7. 等待同步后,在手机端选择刷新,查看“2022_07_25.md”、“疫情.md” 均正常,都能看到修改的内容。
  8. 查看手机的文件(文件浏览器),发现 疫情.md 文件0字节。2022_07_25.md 文件正常
  9. 查看电脑端文件,疫情.md 0字节,2022_07_25.md 文件正常。

虽然通过logseq能够看到文件内容,但是在文件管理器中看是0字节的空文件。

@andelf @llcc @cnrpman

sstiger1230 commented 1 year ago

似乎找到规律了。

  1. 第一次尝试修改journals文件,和”疫情.md“两个文件,手机端刷新后 疫情.md 文件被清空。
  2. 第二次只修改了一个page文件:”其他.md“,手机端刷新后一切正常。
  3. 第三次修改了两个文件,一个是 journals 文件,一个是 ”其他.md“,手机端刷新后,”其他.md“文件内容清空。

文件内容没什么特别的,测试修改的内容也都类似"其他测试-10",”test---001“

@andelf @llcc @cnrpman

cnrpman commented 1 year ago

谢谢测试。

humm, 目前不建议在手机端打开logseq的情况下使用电脑端Logseq 目前情况是电脑的file watcher是非常稳定的, 可以很好应对云端数据的修改. 但移动端的file watcher还差一些. 所以最好不要在手机端打开的时候, 在其他端对云端文件进行编辑

如果中文文件有问题,英文文件没问题,推测是Android上的File Watcher的问题 (是capacitor URL encode的问题吗,这边目前是什么状态? @llcc ) 如果是Android上capacitor的问题, 等 PR6134 合并后会处理

也可能是Syncthing在Android上还有问题? @andelf

最好能补完之前每一次测试时的页面名称,因为这个问题跟页面名称相关

sstiger1230 commented 1 year ago

初步测试,同时编辑2个文件,其中一个是journals,另外一个”OPAC.md“ 文件依然会被清零

cnrpman commented 1 year ago

@sstiger1230 看起来是跟Syncthing + 多文件有关

sstiger1230 commented 1 year ago

又试了试:

  1. 手机端syncthing暂停同步logseq;
  2. 手机端清空Logseq缓存,数据;
  3. 电脑端刷新,重新索引;
  4. 手机端连接数据线到电脑,从电脑复制所有文件到手机;
  5. 电脑端修改“2022_07_25.md” , "OPAC.md" 两个文件;
  6. 手机端刷新,提示正在解析文件 2/3;
  7. 发现两个文件内容都被清空????奇怪。
  8. 两个文件备份在<graph directory>/logseq/bak 目录中。
  9. 修改 “2022_07_24.md”(不是当天的journals) , "eCard.md" 两个文件;
  10. 手机端再次刷新后,文件内容正常。

先这样了,不知道是不是发现规律了。

sstiger1230 commented 1 year ago

大概汇总一下晚上做的测试:

  1. 电脑端修改当天journals文件,中文pages文件:“疫情.md”; 手机端选择刷新,在手机端logseq中能查看修改的两个文件内容; 查看手机端文件目录、电脑端文件目录,中文pages文件(疫情.md)文件0字节。当前journals文件正常;

  2. 第二次只修改了一个中文page文件(其他.md),手机端刷新后一切正常。

  3. 第三次测试在电脑端修改当天journals文件,英文pages文件(OPAC.md); 手机端选择刷新,在手机端logseq中还是能够看修改的两个文件内容; 两个文件在手机端、电脑端文件内容都被清空。<graph directory>/logseq/bak目录中有两个文件的备份;

  4. 第四次测试在电脑端修改其他日子journals文件(不是当天的journals) 英文pages文件(eCard.md); 手机端刷新后,文件内容正常。 @cnrpman

andelf commented 1 year ago

又试了试:

  1. 手机端syncthing暂停同步logseq;
  2. 手机端清空Logseq缓存,数据;
  3. 电脑端刷新,重新索引;
  4. 手机端连接数据线到电脑,从电脑复制所有文件到手机;
  5. 电脑端修改“2022_07_25.md” , "OPAC.md" 两个文件;
  6. 手机端刷新,提示正在解析文件 2/3;
  7. 发现两个文件内容都被清空????奇怪。
  8. 两个文件备份在<graph directory>/logseq/bak 目录中。
  9. 修改 “2022_07_24.md”(不是当天的journals) , "eCard.md" 两个文件;
  10. 手机端再次刷新后,文件内容正常。

先这样了,不知道是不是发现规律了。

步骤1 暂停同步后, 是哪一步又重新开启同步的? 有没有详细的操作序列

sstiger1230 commented 1 year ago

在电脑端修改文件之前重新开启同步

sstiger1230 commented 1 year ago

@andelf 给您发邮件单独沟通?

andelf commented 1 year ago

@sstiger1230
没问题. mailto: shuyu@logseq.com CC: help@logseq.com

sstiger1230 commented 1 year ago

今天抽空升级电脑端、手机端到0.7.9版本。又按照同样的方式进行了一轮测试。结果基本一致,还有文件内容被清空。

我推测手机端的刷新机制有问题,每次文件内容被清空,都是手机刷新后产生的。 在App刷新操作前,都确认了手机端已经同步成功后。

还有,明明手机端文件内容已经被清空,可是刷新后,没有出现解析文件的提示,还能正常显示已经被清空的文件内容。 @andelf

andelf commented 1 year ago

@sstiger1230 你说的刷新是指 refresh / re-index 还是重新打开App

sstiger1230 commented 1 year ago

@sstiger1230 你说的刷新是指 refresh / re-index 还是重新打开App

刷新是指 refresh

sstiger1230 commented 1 year ago

今天想到一个另类的测试:

  1. 手机端设置Logseq,在app存储设置中删除数据(必须删除数据,不能仅仅清空缓存)。
  2. 开启手机端syncthing的同步,保持正常同步。
  3. 桌面端修改数据,查看确认数据已经同步到手机端。
  4. 手机端运行logseq,添加图谱,设置日期页面格式。
  5. 解析文件后,数据正常,没有内容被清空。

在桌面端修改文件之前,到手机端app存储设置中删除数据,之后重新设置手机端图谱,文件内容正常。

@andelf

sstiger1230 commented 1 year ago

最新测试(不使用syncthing同步工具):

  1. 手机端、电脑端syncthing删除logseq同步目录;
  2. 手机端logseq清空数据;
  3. 数据线连接手机端到电脑,从电脑端复制全部文件到手机端;
  4. 手机端logseq运行,添加图谱,设置日期页面格式,解析文件后,数据正常,关闭手机端app;
  5. 电脑端编辑文件(和往常一样先测试修改了2个文件);
  6. 数据线连接手机端到电脑,复制电脑端修改的文件到手机端,覆盖同名文件;
  7. 手机端开启app,直接查看最新复制的文件,还是旧的内容;
  8. 手机端app中点击“刷新(读取本地最新文件)”;
  9. 手机端app查看文件内容已更新;
  10. 手机端通过文件管理器查看存储中logseq目录,发现最近修改的文件有的已经0字节了;

编辑2个文件 1.eCard.md 2.libsys_SQL.md(内容清空)

@andelf 是不是可以判断是logseq本身的“刷新(读取本地最新文件)”功能有问题? 与syncthing没关系?

cnrpman commented 1 year ago

@sstiger1230 明白了, 会继续尝试复现

sstiger1230 commented 1 year ago

@cnrpman @andelf 有什么进展吗?

cnrpman commented 1 year ago

@sstiger1230 暂时没有

sstiger1230 commented 1 year ago

找了一个设备做对比,系统是LineageOS 17.1 (Android 10),安装了 Logseq 0.8.0,发现很大的不同:

Android 10系统下被外部程序修改的文件,Logseq能够自动识别读取。 然而 华为鸿蒙HarmonyOS 2.0系统,无法识别被外部程序修改的文件,必须通过logseq本身的“刷新(读取本地最新文件)才能够看到更新后的文件内容,但是会造成部分文件内容丢失。

@cnrpman @andelf

cnrpman commented 1 year ago

@sstiger1230 明白了,听起来是是syncthing在鸿蒙下的行为异常

sstiger1230 commented 1 year ago

@cnrpman 不是syncthing的原因,这次对比测试,我是用Markor 文本编辑器,直接修改的文件。

cnrpman commented 1 year ago

@sstiger1230 最近修复了Android上路径相关的问题。主要是针对一些<graph directory> 路径里有空格和特殊字符的情况。 这个和你的使用情景有关系吗?

andelf commented 1 year ago

Close this issue for no response for long. Feel free to re-open or open a new issue if you still have questions.