HomePhabricator

Fix loop in svnserve workflow for large binaries

Description

Fix loop in svnserve workflow for large binaries

Summary: If you push a large binary and the data crosses multiple data frames, we can end up in a loop in the parser.

Test Plan:
After this change, I was able to push a 95MB binary in 7s, which seems reasonable:

>>> orbital ~/repos/INIS $ svn st
A       large2.bin
>>> orbital ~/repos/INIS $ ls -alh
total 390648
drwxr-xr-x   6 epriestley  admin   204B Dec 18 17:14 .
drwxr-xr-x  98 epriestley  admin   3.3K Dec 16 11:19 ..
drwxr-xr-x   7 epriestley  admin   238B Dec 18 17:14 .svn
-rw-r--r--   1 epriestley  admin    80B Dec 18 15:07 README
-rw-r--r--   1 epriestley  admin    95M Dec 18 16:53 large.bin
-rw-r--r--   1 epriestley  admin    95M Dec 18 17:14 large2.bin
>>> orbital ~/repos/INIS $ time svn commit -m 'another large binary'
Adding  (bin)  large2.bin
Transmitting file data .
Committed revision 25.

real	0m7.215s
user	0m5.327s
sys	0m0.407s
>>> orbital ~/repos/INIS $

There may be room to improve this by using PhutilRope.

Reviewers: wrotte, btrahan, wotte

Reviewed By: wotte

CC: aran

Differential Revision: https://secure.phabricator.com/D7798

Details

Provenance
epriestleyAuthored on Dec 19 2013, 1:48 AM
epriestleyPushed on Dec 19 2013, 1:48 AM
Reviewer
wotte
Differential Revision
D7798: Fix loop in svnserve workflow for large binaries
Parents
rP92bc76aae053: Move mercurial commit metadata parsing into a LowLevel query
Branches
Unknown
Tags
Unknown

Event Timeline