[PATCH 09 of 11] bundle2: use compressstream compression engine API

Gregory Szorc gregory.szorc at gmail.com
Mon Nov 7 21:53:56 EST 2016


On Mon, Nov 7, 2016 at 6:13 AM, Pierre-Yves David <
pierre-yves.david at ens-lyon.org> wrote:

>
>
> On 11/02/2016 01:08 AM, Gregory Szorc wrote:
>
>> # HG changeset patch
>> # User Gregory Szorc <gregory.szorc at gmail.com>
>> # Date 1477160145 25200
>> #      Sat Oct 22 11:15:45 2016 -0700
>> # Node ID 03555032b7e3bc7192fd8bebf6af3f05b1e70516
>> # Parent  1d4d111b644453acc4893478528a5f2ecd7ca023
>> bundle2: use compressstream compression engine API
>>
>> Compression engines now have an API for compressing a stream of
>> chunks. Switch to it and make low-level compression code disappear.
>>
>
> Do we get any performance benefit for this ? I know you have spend a lot
> of time tracking performance gain in bundle creation/application. And this
> likely have some effect.
>
> Talking about performance, Philippe Pépiot have a patch to setup some
> official performance tracking tool, if you could help reviewing it we could
> include these operations to it and we would have an easy and standard way
> to get these number.


>From this patch, most likely not. The reason is because the code is nearly
identical and I expect any performance changes due to how functions are
called to be dwarfed by the time spent inside the compressor.


>
>
> diff --git a/mercurial/bundle2.py b/mercurial/bundle2.py
>> --- a/mercurial/bundle2.py
>> +++ b/mercurial/bundle2.py
>> @@ -566,23 +566,18 @@ class bundle20(object):
>>              self.ui.debug(''.join(msg))
>>          outdebug(self.ui, 'start emission of %s stream' %
>> self._magicstring)
>>          yield self._magicstring
>>          param = self._paramchunk()
>>          outdebug(self.ui, 'bundle parameter: %s' % param)
>>          yield _pack(_fstreamparamsize, len(param))
>>          if param:
>>              yield param
>> -        # starting compression
>> -        compressor = self._compengine.compressorobj()
>> -        for chunk in self._getcorechunk():
>> -            data = compressor.compress(chunk)
>> -            if data:
>> -                yield data
>> -        yield compressor.flush()
>> +        for chunk in self._compengine.compressstrea
>> m(self._getcorechunk()):
>> +            yield chunk
>>
>>      def _paramchunk(self):
>>          """return a encoded version of all stream parameters"""
>>          blocks = []
>>          for par, value in self._params:
>>              par = urlreq.quote(par)
>>              if value is not None:
>>                  value = urlreq.quote(value)
>> @@ -1318,25 +1313,20 @@ def writebundle(ui, cg, filename, bundle
>>          if cg.version != '01':
>>              raise error.Abort(_('old bundle types only supports v1 '
>>                                  'changegroups'))
>>          header, comp = bundletypes[bundletype]
>>          if comp not in util.compressionengines.supportedbundletypes:
>>              raise error.Abort(_('unknown stream compression type: %s')
>>                                % comp)
>>          compengine = util.compressionengines.forbundletype(comp)
>> -        compressor = compengine.compressorobj()
>> -        subchunkiter = cg.getchunks()
>>          def chunkiter():
>>              yield header
>> -            for chunk in subchunkiter:
>> -                data = compressor.compress(chunk)
>> -                if data:
>> -                    yield data
>> -            yield compressor.flush()
>> +            for chunk in compengine.compressstream(cg.getchunks()):
>> +                yield chunk
>>          chunkiter = chunkiter()
>>
>>      # parse the changegroup data, otherwise we will block
>>      # in case of sshrepo because we don't know the end of the stream
>>      return changegroup.writechunks(ui, chunkiter, filename, vfs=vfs)
>>
>>  @parthandler('changegroup', ('version', 'nbchanges', 'treemanifest'))
>>  def handlechangegroup(op, inpart):
>>
>
>
> --
> Pierre-Yves David
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.mercurial-scm.org/pipermail/mercurial-devel/attachments/20161107/8439e765/attachment.html>


More information about the Mercurial-devel mailing list