Uploaded image for project: 'Subversion'
  1. Subversion
  2. SVN-3212

ra_serf: svn aborts when starting merge

    XMLWordPrintableJSON

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: trunk
    • Fix Version/s: 1.6.0
    • Component/s: libsvn_ra_serf
    • Labels:
      None

      Description

      A few people have reported svn+ra_serf aborting when starting a merge operation.
      
      Bert Huijben:
      http://svn.haxx.se/dev/archive-2008-06/0066.shtml
      
      Daniel Shahaf:
      http://svn.haxx.se/dev/archive-2008-05/0017.shtml
      
      I can reproduce this issue, but only from time to time. Typically I can
      reproduce it once, and then I have to restart my machine to reproduce it again.
      
      The issue happens when certain requests to the server fail and have to be
      resent. Wwhat's happening is that ra_serf creates a bucket with the request
      body, but that body is eaten and destroyed by the first request. So when the
      request is sent a second time, typically the memory is not cleared yet so the
      request will succeed, but on destroying that body for the 2nd time, serf will abort.
      
      This is explained in more detail:
      http://svn.haxx.se/dev/archive-2007-08/0153.shtml
      
      The correct way of working is simple: instead of giving serf a bucket with the
      request body, provide it with a callback that can create the bucket on demand,
      twice if needed. We already do this for most of the request types, but not for
      all. I could find 8 places where the body_buckets variable is still set. All
      these places need to be converted to use body_delegate.
      
      For REPORTs this is a bit difficult, as these are created when driving an
      editor, which we don't want to drive a second time. 
      One of the workarounds is to store the data from the REPORT request on disk too,
      and reload it if needed. Another workaround would be to teach the bucket code to
      not destroy the bucket data until we explicitly told serf to do so.
      
      Let's use this bug for the cleanup of those 8 'body_buckets locations'.
      

        Attachments

          Activity

            People

            • Assignee:
              Unassigned
              Reporter:
              lgo Lieven Govaerts
            • Votes:
              0 Vote for this issue
              Watchers:
              0 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: