Page MenuHomePhabricator

Fix loop in svnserve workflow for large binaries
ClosedPublic

Authored by epriestley on Dec 19 2013, 1:16 AM.
Tags
None
Referenced Files
Unknown Object (File)
Wed, Dec 18, 1:11 AM
Unknown Object (File)
Mon, Dec 16, 6:49 PM
Unknown Object (File)
Fri, Dec 6, 10:33 AM
Unknown Object (File)
Fri, Nov 29, 10:46 AM
Unknown Object (File)
Mon, Nov 25, 3:56 PM
Unknown Object (File)
Sun, Nov 24, 8:35 PM
Unknown Object (File)
Nov 21 2024, 6:28 AM
Unknown Object (File)
Nov 17 2024, 12:21 AM
Subscribers

Details

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.

Diff Detail

Lint
Lint Skipped
Unit
Tests Skipped

Event Timeline

The technique in D7797 hadn't occurred to me before, but was super useful in tracking this down.

I'll confirm that this fixes the reported behavior.

epriestley updated this revision to Unknown Object (????).Dec 19 2013, 1:46 AM
  • Add test coverage.