来自 subversion repo 的文件作为 DAV 安装,写入后不久被清零

来自 subversion repo 的文件作为 DAV 安装,写入后不久被清零

我有一个颠覆回购

"SVNAutoversioning on" 

这通常允许 webDAV 客户端在不经过签出-编辑-提交循环的情况下对文件进行更改,并且这对于存储库的某些子集非常方便。在此实例中,我使用 subversion 进行集中版本控制,而不是源代码控制。

服务器会间歇性地将文件清零,geany/gedit 会重新加载(据我所知,这是不行的),而重新加载的文件是空的。我认为这可能与 gtk 临时文件有关,但使用 vi 或 kate 也会出现这种情况。

如果我在 vi 中编辑一个文件,这里是成功确认的示例;

"mnt/here/bootstrap.d/edited-file"
 110L, 4077C written

并列表确认文件大小非零;

> ls -la mnt/here/bootstrap.d/edited-file
-rw-r--r-- 1 me me 4.0K Jan 11 07:42 mnt/here/bootstrap.d/edited-file

然而几秒钟后,列表发生了变化,显示文件已归零

> ls -la mnt/here/bootstrap.d/edited-file
-rw-r--r-- 1 me me 0 Jan 11 07:42 mnt/here/bootstrap.d/edited-file/chef-client

svn repo 日志显示了一些可能负责的交易。

==> svn.limepepper.co.uk-error.log <==
[Wed Jan 11 01:47:06 2012] [info] [client 87.194.yyy.xxx] Access granted: 'service' MOVE projects:/some/path/in/repo/this-file-gets-zeroed projects:/some/path/in/repo/this-file-gets-zeroed~
[Wed Jan 11 01:47:06 2012] [info] [client 87.194.yyy.xxx] Access granted: 'service' MOVE projects:/some/path/in/repo/this-file-gets-zeroed~ projects:/some/path/in/repo/this-file-gets-zeroed~
[Wed Jan 11 01:47:06 2012] [info] [client 87.194.yyy.xxx] Access granted: 'service' GET projects:/some/path/in/repo
[Wed Jan 11 01:47:06 2012] [info] [client 87.194.yyy.xxx] Access granted: 'service' GET projects:/some/path/in/repo
[Wed Jan 11 01:47:06 2012] [info] [client 87.194.yyy.xxx] Access granted: 'service' GET projects:/some/path/in/repo
[Wed Jan 11 01:47:06 2012] [info] [client 87.194.yyy.xxx] Access granted: 'service' HEAD projects:/some/path/in/repo/this-file-gets-zeroed~
[Wed Jan 11 01:47:07 2012] [info] [client 87.194.yyy.xxx] Access granted: 'service' LOCK projects:/some/path/in/repo/this-file-gets-zeroed

==> svn_logfile <==
[11/Jan/2012:01:47:07 -0600] service lock (/some/path/in/repo/this-file-gets-zeroed)

==> svn.limepepper.co.uk-error.log <==
[Wed Jan 11 01:47:07 2012] [info] [client 87.194.yyy.xxx] Access granted: 'service' DELETE projects:/some/path/in/repo/this-file-gets-zeroed~
[Wed Jan 11 01:47:07 2012] [info] [client 87.194.yyy.xxx] Access granted: 'service' GET projects:/some/path/in/repo
[Wed Jan 11 01:47:19 2012] [info] [client 87.194.yyy.xxx] Access granted: 'service' PUT projects:/some/path/in/repo/this-file-gets-zeroed
[Wed Jan 11 01:47:20 2012] [info] [client 87.194.yyy.xxx] Access granted: 'service' UNLOCK projects:/some/path/in/repo/this-file-gets-zeroed

==> svn_logfile <==
[11/Jan/2012:01:47:20 -0600] service unlock (/some/path/in/repo/this-file-gets-zeroed)

svn repo DAV 安装为;

http://myserver/pathtorepo on /home/me/mnt/mountedhere type fuse (rw,nosuid,nodev,noexec,relatime,user_id=500,group_id=500,allow_other,max_read=16384)




The server details are;
# rpm -qa | egrep "httpd|mod_|subversion|dav|neon"
httpd-tools-2.2.17-1.fc14.i686
httpd-2.2.17-1.fc14.i686
mod_auth_mysql-3.0.0-12.fc14.i686
mod_perl-2.0.4-11.fc14.i686
mod_python-3.3.1-14.fc14.i686
httpd-manual-2.2.17-1.fc14.noarch
subversion-libs-1.6.17-1.fc14.i686
subversion-1.6.17-1.fc14.i686
mod_dav_svn-1.6.17-1.fc14.i686
neon-0.29.5-1.fc14.i686
mod_ssl-2.2.17-1.fc14.i686

我已经决定放弃使用已安装的 DAV,因为它看起来非常不可靠,但我有兴趣解决这个问题,因为它是我以前曾经使用过的东西。

答案1

我使用 tcpdump 转储了流量,并检查了 davfs2 客户端和 subversion 存储库之间的协议交换。

当客户端释放锁时,本地文件似乎被清零了,基本上服务器确认了锁的释放,但包含了如下的标头;

Content-length: 0

在回复中,这似乎导致 dav2 客户端将本地文件清零。

使用此处配置文件中的以下指令禁用客户端上的锁/etc/davfs2/davfs2.conf

 use_locks       0

导致归零行为停止,但值得进一步调查以确定这是客户端还是服务器中的错误。

相关内容