On 04/16/2012 02:16 AM, Julian Foad wrote:
Blair Zajac wrote:
On 04/13/2012 12:45 AM, Julian Foad wrote:
Blair Zajac wrote:
Having the empty files, such as changes, is that odd? Could that be a
hint?
No, that's not interesting, that's just the result of crashing out
at the point where it did -- in the middle of doing a commit.
The 'changes' is created during the commit process and not building the
transaction? If so, then having an empty changes file is odd and probably only
possible through the RPCS API we wrote that wraps svn_fs.h and svn_repos.h, in
which case, could there be a bug with trying to commit empty transactions in a
multithreaded environment?
Or maybe the commit just got as far as creating the 'changes' file but crashed
out before it got around to writing the list of changes into that file and
flushing/closing it.
It appears that the changes file is only modified upon any modification
to the txn and only read during the actual commit of the txn:
#!/usr/bin/python
import os
import sys
import time
import svn.fs
import svn.repos
try:
repo = svn.repos.create('repo', None, None, {}, {})
except Exception:
repo = svn.repos.open('repo')
fs = svn.repos.fs(repo)
txn = svn.fs.begin_txn2(fs, svn.fs.youngest_rev(fs), 0)
fs_root = svn.fs.txn_root(txn)
txn_name = svn.fs.txn_name(txn)
changes_path = os.path.join('repo', 'db', 'transactions', '%s.txn' %
txn_name,
'changes')
print 1, os.stat(changes_path)[6], svn.fs.paths_changed(fs_root)
svn.fs.make_dir(fs_root, '%s' % (1000*1000*time.time()))
print 2, os.stat(changes_path)[6], svn.fs.paths_changed(fs_root)
os.system("strace -p %s -o strace.out &" % os.getpid())
print svn.repos.fs_commit_txn(repo, txn)