Назад | Перейти на главную страницу

файлы из репозитория Subversion, смонтированные как 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 показывает несколько транзакций, которые предположительно ответственны.

==> 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 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, поскольку он кажется ужасно ненадежным, но мне было бы интересно решить эту проблему, поскольку это то, что я использовал здесь и там ранее.

Я выгружал трафик с помощью tcpdump и исследовал обмен протоколами между клиентом davfs2 и репозиторием Subversion.

Локальный файл, казалось, обнулялся в момент, когда клиент снял блокировку, в основном сервер подтвердил снятие блокировки, но включил такой заголовок;

Content-length: 0

в ответе, который, казалось, заставил клиента dav2 обнулить локальный файл.

отключение блокировок на клиенте с помощью следующей директивы в файле конфигурации здесь /etc/davfs2/davfs2.conf;

 use_locks       0

вызвало остановку обнуления, но было бы целесообразно провести дополнительное исследование, чтобы выяснить, является ли это ошибкой на клиенте или на сервере.