[ https://issues.apache.org/jira/browse/SVN-4819?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Daniel Watzinger updated SVN-4819: ---------------------------------- Priority: Major (was: Minor) > svnadmin fails to create empty repository on CSV storage (Windows Cluster > Shared Volume) > ---------------------------------------------------------------------------------------- > > Key: SVN-4819 > URL: https://issues.apache.org/jira/browse/SVN-4819 > Project: Subversion > Issue Type: Bug > Components: svnadmin > Affects Versions: 1.12.x > Environment: Windows Server 2019 Standard > Windows Failover Cluster > Cluster Shared Volume on top of NTFS > Reporter: Daniel Watzinger > Priority: Major > Attachments: 0, Procmon.csv > > > svnadmin reproducibly fails to initialize an empty repository on a cluster > shared volume in a Windows Failover Cluster environment on Windows Server > 2019. The initial call seems to be successful. > {code:java} > svnadmin create foobar{code} > A subsequent > {code:java} > svnadmin verify foobar{code} > fails with > {code:java} > * Verifying metadata at revision 0 ... > * Error verifying repository metadata. > svnadmin: E160004: P2L offset 6b must be larger than L2P offset 6b in r0 > footer > {code} > Further investigation revealed that the L2P index never gets written to the > revision file. I have attached the relevant file of revision 0. > Index data seems to be appended to the revision file in > *subversion/libsvn_fs_fs/transaction.c* by a call to > _svn_fs_fs__add_index_data:_ > {code:java} > ... > /* Append the actual index data to the pack file. */ > l2p_offset = 0; > SVN_ERR(svn_io_file_seek(file, APR_END, &l2p_offset, pool)); > SVN_ERR(svn_fs_fs__l2p_index_append(&l2p_checksum, fs, file, l2p_proto_index, > revision, pool, pool)); > > p2l_offset = 0; > SVN_ERR(svn_io_file_seek(file, APR_END, &p2l_offset, pool)); > SVN_ERR(svn_fs_fs__p2l_index_append(&p2l_checksum, fs, file, p2l_proto_index, > revision, pool, pool)); > ...{code} > _svn_io_file_seek_ queries file metadata to acquire the required offset to > write the next chunk of data. However, both calls yield an identical offset > equal to the initial length of the revision file. Thus, the L2P index is > overwritten by writing the P2L index data. I was able to confirm this by > monitoring _svnadmin_ using Procmon (see attached Procmon.csv) on both local > and cluster shared volumes. I strongly suspect that file metadata is not > flushed to the disk fast enough before the second call to _svn_io_file_seek._ > As far as i recall (in the case of Windows), filesystem metadata is always > cached. To ensure storage of metadata to disk, the file must either be > flushed or be opened with *FILE_FLAG_WRITE_THROUGH*. -- This message was sent by Atlassian JIRA (v7.6.14#76016)