Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

开源数据同步 WebDAV 实现 #6513

Closed
88250 opened this issue Nov 7, 2022 · 55 comments
Closed

开源数据同步 WebDAV 实现 #6513

88250 opened this issue Nov 7, 2022 · 55 comments
Assignees
Milestone

Comments

@88250
Copy link
Member

88250 commented Nov 7, 2022

手动配置 工作空间/conf/conf.json 中的 sync.provider 为 3 以及 webdav,参考如下:

    "webdav": {
      "endpoint": "https://your-webdav-domain.com/",
      "username": "你的用户名",
      "password": "你的密码"
    }

目前该特性处于内测阶段,所以暂时只提供手动修改配置文件的配置方式,等内测稳定以后会在 #6446 中提供界面配置给普通用户使用。

@88250 88250 added this to the 2.4.11 milestone Nov 7, 2022
@88250 88250 self-assigned this Nov 7, 2022
@88250 88250 closed this as completed Nov 7, 2022
@Zuoqiu-Yingyi
Copy link
Contributor

Zuoqiu-Yingyi commented Nov 8, 2022

测试了一下, 同步时提示: 同步失败:MkdirAll /siyuan/: 409 v2.4.11
日志:

W 2022/11/08 21:31:28 repository.go:790: index data repo before cloud sync elapsed [22977ms]
E 2022/11/08 21:31:34 sync.go:187: upload chunks failed: MkdirAll /siyuan/: 409
E 2022/11/08 21:31:34 repository.go:596: sync data repo failed: MkdirAll /siyuan/: 409

@AdachiQ
Copy link

AdachiQ commented Nov 8, 2022

坚果云,获取云端信息失败 PROPFIND /siyuan/0/repo/: 409
teracloud,获取云端信息失败 cloud object not found

@88250
Copy link
Member Author

88250 commented Nov 8, 2022

@AdachiQ 坚果云可能需要手动建立一个根目录 siyuan

@AdachiQ
Copy link

AdachiQ commented Nov 8, 2022

@AdachiQ 坚果云可能需要手动建立一个根目录 siyuan

错误信息变成 获取云端信息失败 cloud object not found

@AdachiQ
Copy link

AdachiQ commented Nov 8, 2022

@AdachiQ 坚果云可能需要手动建立一个根目录 siyuan

搞定了,忘记生成密钥了

@jl0476
Copy link

jl0476 commented Nov 8, 2022

https 可否跳过证书校验?

@88250
Copy link
Member Author

88250 commented Nov 8, 2022

@jl0476 目前不行,后续看是否有更多需求。

@jl0476
Copy link

jl0476 commented Nov 8, 2022

同步失败:MkdirAll /siyuan/0/repo/main/: 403 v2.4.11

群晖nas,我看自动创建了一些目录,不清楚是什么原因不允许创建了

@88250
Copy link
Member Author

88250 commented Nov 8, 2022

@jl0476 服务端需要有创建文件夹的权限

@jl0476
Copy link

jl0476 commented Nov 8, 2022

image

@jl0476 服务端需要有创建文件夹的权限

@88250 有权限,是不是层级太多?

@88250
Copy link
Member Author

88250 commented Nov 8, 2022

@jl0476 那可能是服务端其他原因引起的,我不是太确定。

@jl0476
Copy link

jl0476 commented Nov 8, 2022

服务端日志中未见异常。
image

@88250
Copy link
Member Author

88250 commented Nov 8, 2022

这有点奇怪,因为状态码是服务端返回的,可能是因为 403 没有记录日志吧。

@jl0476
Copy link

jl0476 commented Nov 8, 2022

抓包未见403异常

@JCJC01
Copy link

JCJC01 commented Nov 8, 2022

同步失败:MkdirAll /siyuan/0/repo/main/: 403 v2.4.11

群晖nas,我看自动创建了一些目录,不清楚是什么原因不允许创建了

你好,请教一下,我也是群辉同步
在conf设置后?需要如何执行同步?
需要登陆会员好?
需要选择云端空间不?

@jl0476
Copy link

jl0476 commented Nov 8, 2022

同步失败:MkdirAll /siyuan/0/repo/main/: 403 v2.4.11
群晖nas,我看自动创建了一些目录,不清楚是什么原因不允许创建了

你好,请教一下,我也是群辉同步 在conf设置后?需要如何执行同步? 需要登陆会员好? 需要选择云端空间不?

@JCJC01 直接点云图标进行同步

@JCJC01
Copy link

JCJC01 commented Nov 8, 2022

同步失败:MkdirAll /siyuan/0/repo/main/: 403 v2.4.11
群晖nas,我看自动创建了一些目录,不清楚是什么原因不允许创建了

你好,请教一下,我也是群辉同步 在conf设置后?需要如何执行同步? 需要登陆会员好? 需要选择云端空间不?

@JCJC01 直接点云图标进行同步

一点,他就弹出来让我登陆会员账号

@88250
Copy link
Member Author

88250 commented Nov 8, 2022

@JCJC01 目前只有会员可以参与内测。

@jl0476
Copy link

jl0476 commented Nov 8, 2022

image
比较奇怪,抓包看返回的是201
image
实际目录也创建了

@JCJC01
Copy link

JCJC01 commented Nov 8, 2022

@JCJC01 目前只有会员可以参与内测。

我是会员,忠实会员

@88250
Copy link
Member Author

88250 commented Nov 8, 2022

image 比较奇怪,抓包看返回的是201 image 实际目录也创建了

不太确定这个服务端是不是对于重复创建目录会返回 403

@JCJC01
Copy link

JCJC01 commented Nov 8, 2022

弹出让我登陆会员账号,我就登陆,然后点同步,也提示同步成功,但是感觉就是同步到云端,没感觉同步到自己的服务器

@88250
Copy link
Member Author

88250 commented Nov 8, 2022

@JCJC01 配置文件要在内核停止以后再改,不然会被覆盖回之前的状态。

@JCJC01
Copy link

JCJC01 commented Nov 8, 2022

@JCJC01 配置文件要在内核停止以后再改,不然会被覆盖回之前的状态。

没有覆盖,我特意打开来看过了。
改的时候没有打开思源程序

@jl0476
Copy link

jl0476 commented Nov 8, 2022

Uploading image.png…
这是个什么方法,我看抓包里有这个405.
笔记端可以保存日志供调试吗?

MKCOL /siyuan/0/repo/main/objects/8d/ HTTP/1.1
Host:
User-Agent: Go-http-client/1.1
Authorization:
Accept-Encoding: gzip

HTTP/1.1 405 Method Not Allowed
Date: Tue, 08 Nov 2022 15:18:15 GMT
Server: Apache
Allow:
Content-Length: 222
Content-Type: text/html; charset=iso-8859-1

<title>405 Method Not Allowed</title>

Method Not Allowed

The requested method MKCOL is not allowed for this URL.

@88250
Copy link
Member Author

88250 commented Nov 8, 2022

@jl0476 这个是创建目录,你看下是不是 /siyuan/0/repo/main/objects/8d 已经有文件而不是目录。

@jl0476
Copy link

jl0476 commented Nov 8, 2022

image
里面还有上传的数据块 @88250

@88250
Copy link
Member Author

88250 commented Nov 8, 2022

@jl0476 看上去正常,那不应该返回 405 才对,我估计是服务端对并发操作可能支持有点问题。

@jl0476
Copy link

jl0476 commented Nov 8, 2022

发现了个情况,为什么先get已经成功了还要创建这个目录,目录已经存在,所以返回405了。
image

@88250
Copy link
Member Author

88250 commented Nov 8, 2022

@jl0476 这里是因为在 put 前不确定是否有目录,所以每次 put 前都会 mkdir,这里应该先 用 stat 看一下是否存才目录,不存在再创建可能更好一些。目前的实现是直接 mkdir,主要考虑到少一次 stat 接口调用,看来不能省。

另外,WebDAV 并发请求估计也有问题,上面的这个场景就是只能等目录确定创建以后再上传,不能并发提交请求,这两个问题我们下个版本改进一下,感谢反馈。

@jl0476
Copy link

jl0476 commented Nov 8, 2022

@88250 辛苦了,如果需要测试可以联系我。

我觉得可能是自动同步和手动同步有一定的冲突,但是抓包的时候未见403异常。
后续可能全量同步完了之后,也未见403异常。

405这个异常应该不影响同步,不抓包也很难发现。

@88250
Copy link
Member Author

88250 commented Nov 8, 2022

@jl0476 好的,后续我们会在 GitHub Releases 上打一个 dev 包,有空的话请帮忙测试看看,谢谢。

@jl0476
Copy link

jl0476 commented Nov 9, 2022

@88250 今天测试了docker版本,发现无法保存conf文件,容器启动后会覆盖掉配置。

配置的时候容器已经停止,siyuan目录映射在本地。

@88250
Copy link
Member Author

88250 commented Nov 9, 2022

@jl0476 格式如果配置不对的话可能会被覆盖,重现检查一下看看。对了,dev 桌面版已经发布,有空的话也麻烦试下。

@jl0476
Copy link

jl0476 commented Nov 9, 2022

@88250 又测试了一下,确实保存不上。格式也没什么问题。
image

停止容器 -> 修改配置 -> 保存 -> 启动容器
这个操作步骤

@88250
Copy link
Member Author

88250 commented Nov 9, 2022

帮忙试下该其他配置项,比如 sync.enabled 是否有效。

@jl0476
Copy link

jl0476 commented Nov 9, 2022

@88250 sorry 我的锅 配置没保存上

@88250
Copy link
Member Author

88250 commented Nov 9, 2022

@jl0476 Docker 版目前还是 v2.4.11 正式版,估计和昨天使用桌面端测试一样的问题,等会麻烦用 https://github.com/siyuan-note/siyuan/releases/tag/v2.4.12-dev1 这个桌面端测试看看。

@jl0476
Copy link

jl0476 commented Nov 9, 2022

@jl0476 Docker 版目前还是 v2.4.11 正式版,估计和昨天使用桌面端测试一样的问题,等会麻烦用 https://github.com/siyuan-note/siyuan/releases/tag/v2.4.12-dev1 这个桌面端测试看看。

@88250 稍晚点哈,事情有点多。

@88250
Copy link
Member Author

88250 commented Nov 9, 2022

@jl0476 好的,谢谢。

@jl0476
Copy link

jl0476 commented Nov 9, 2022

@@88250
image
还是有

@caogle
Copy link

caogle commented Nov 9, 2022

image 抓包未见403异常
顶层目录写权限不够,改一下就好了

@jl0476
Copy link

jl0476 commented Nov 9, 2022

@jl0476 Docker 版目前还是 v2.4.11 正式版,估计和昨天使用桌面端测试一样的问题,等会麻烦用 https://github.com/siyuan-note/siyuan/releases/tag/v2.4.12-dev1 这个桌面端测试看看。

@88250 稍晚点哈,事情有点多。

@88250 全量同步测试了,没有403报错了。不过现在第一次的同步速度下降了。315M的数据仓库,内网大概需要15分钟左右。

405异常还是有,见之前回复。

@88250
Copy link
Member Author

88250 commented Nov 9, 2022

@jl0476 405 的问题稍后修复,感谢反馈。WebDAV 的上传性能估计就只能是这样了,由于无法确定服务端是否支持并发操作,所以只能使用单线程上传。

@jl0476
Copy link

jl0476 commented Nov 9, 2022

@jl0476 405 的问题稍后修复,感谢反馈。WebDAV 的上传性能估计就只能是这样了,由于无法确定服务端是否支持并发操作,所以只能使用单线程上传。

可以考虑分文件夹进行并发,不过逻辑比较复杂。

@88250
Copy link
Member Author

88250 commented Nov 9, 2022

@jl0476 先记录 #6535 估计可以通过缓存解决一部分问题

@JCJC01
Copy link

JCJC01 commented Nov 9, 2022

原来昨天忘了把provide改了3
现在同步成功了
但是https地址不成名,http地址成功
请问,如果是s3,provide也是3吗?

@88250
Copy link
Member Author

88250 commented Nov 9, 2022

@JCJC01 S3 请等下个版本发布以后再测试。

@JCJC01
Copy link

JCJC01 commented Nov 10, 2022

@jl0476 405 的问题稍后修复,感谢反馈。WebDAV 的上传性能估计就只能是这样了,由于无法确定服务端是否支持并发操作,所以只能使用单线程上传。

可以考虑分文件夹进行并发,不过逻辑比较复杂。

我这边内网测试速度还好,1G的内容10分钟不到就同步完了。

@JCJC01
Copy link

JCJC01 commented Nov 11, 2022

@88250 请问D大,我想用pc的思源的同步到nas的floder a,然后nas docker个思源,data路径也是设置floder a,
有个问题,好像他们的floder的样式是否不一样?
这样是否不能pc和 docker的数据保持一致?

1 similar comment
@JCJC01
Copy link

JCJC01 commented Nov 11, 2022

@88250 请问D大,我想用pc的思源的同步到nas的floder a,然后nas docker个思源,data路径也是设置floder a,
有个问题,好像他们的floder的样式是否不一样?
这样是否不能pc和 docker的数据保持一致?

@88250
Copy link
Member Author

88250 commented Nov 11, 2022

@JCJC01 你试下看看,我不太清楚。

@JCJC01
Copy link

JCJC01 commented Nov 11, 2022

pc webdav同步过来都是很散的文件夹,00,0a,0b,之类的200多个。
到正常的是data conf temp等常规文件夹

@88250
Copy link
Member Author

88250 commented Nov 11, 2022

数据仓库是 repo 文件夹

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

6 participants