On Wed, Apr 01, 2020 at 06:25:12PM +0200, Stefan Sperling wrote:
> On Wed, Apr 01, 2020 at 11:45:04AM -0400, Nathan Hartman wrote:
> > On Wed, Apr 1, 2020 at 8:05 AM Daniel Shahaf <d...@daniel.shahaf.name> 
> > wrote:
> > > The failure is 100% reproducible with «./svnadmin_tests.py
> > > --fs-type=fsfs --fsfs-version=6 74» on Linux.
> > 
> > I'm experimenting with this also. So far I have nothing definitive but
> > I can confirm that it is 100% reproducible on Linux with the above
> > invocation.
> 
> Also on OpenBSD. Thanks Daniel for identifying a way to reproduce it :)

This seems to fix it.

I don't understand why this is necessary but the regular code path for
access to node revision data in fsfs also seems to apply this always.

Can an fsfs expert confirm?

Index: subversion/libsvn_fs_fs/fs_fs.c
===================================================================
--- subversion/libsvn_fs_fs/fs_fs.c     (revision 1875921)
+++ subversion/libsvn_fs_fs/fs_fs.c     (working copy)
@@ -2393,6 +2393,10 @@ reindex_node(svn_fs_t *fs,
   SVN_ERR(svn_fs_fs__read_noderev(&noderev, rev_file->stream,
                                   pool, pool));
 
+  /* Make sure EXPANDED_SIZE has the correct value for every rep. */
+  SVN_ERR(svn_fs_fs__fixup_expanded_size(fs, noderev->data_rep, pool));
+  SVN_ERR(svn_fs_fs__fixup_expanded_size(fs, noderev->prop_rep, pool));
+
   /* First reindex sub-directory to match write_final_rev() behavior. */
   if (noderev->kind == svn_node_dir)
     {

Reply via email to