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)

Reply via email to