Re: crash managing a large FSFS repository

Simon Spero <[email protected]>
Newsgroups gmane.comp.version-control.subversion.devel,gmane.mail.eyebrowse.user
Message-ID <[email protected]>
Eric Gillespie wrote:

>That's exactly what it is.  It was much, much worse until r11701 and r11706.  However, fs_fs.c:fetch_all_changes still builds a giant hash in memory.  I wasn't sure what to do about this, and so left it alone.  I seem to recall asking for suggestions but not getting a response, but it's possible i overlooked it as i became busy elsewhere right afterwards.
>  
>
I've been looking at scaling issues with fs_fs, but mostly looking at 
repository size related issues.  This issue is isolated to individual 
transactions, so it's simpler to fix and test.

At the moment the code uses memory roughly proportional to the total 
lengths of all paths in the transactions.

One approach to reducing the amount of memory needed would be to use a 
data structure that models directories, rather than complete paths.   
Each directory node should have its own lookup table; the keys can be 
just the name of the immediate child relative to this node.  
Intermediate nodes for path components that haven't been seen themselves 
should be marked as such;  if the path is later explicitly encountered, 
the mark can be cleared (or vice versa).

This approach requires space roughly proportional to the number of  
directories and files in the transaction, rather than total path 
length.  For big, flat namespaces, this isn't much of a win, but it also 
isn't much worse; as the name space gets deeper, and closer to real 
source repositories, the win gets bigger. This approach also makes it 
faster to determine parent/child relationships.

Simon
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.