/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to bzrlib/transport/__init__.py

  • Committer: Vincent Ladeuil
  • Date: 2007-12-08 23:15:18 UTC
  • mto: (2929.3.16 https) (3097.2.1 trunk)
  • mto: This revision was merged to the branch mainline in revision 3099.
  • Revision ID: v.ladeuil+lp@free.fr-20071208231518-sj2ui57xyd4mkjra
Limit GET requests by body size instead of number of ranges.

* bzrlib/transport/http/response.py:
Fix some error messages.
(RangeFile.read_range_definition): Keep the range headers in the
_headers attribute for easier debugging (especially for remote
debugging).

* bzrlib/transport/http/_pycurl.py:
(PyCurlTransport): Replace _max_readv_combine by _get_max_size
which is more approriate to the problem.

* bzrlib/transport/http/__init__.py:
(HttpTransportBase): Add a _get_max_size class attribute
corresponding to the max_size _coalesced_offets max_size
parameter.
(HttpTransportBase._coalesce_readv): Limit the size of the get
requests if _get_max_size is greater than 0 while still respecting
the maximum number of ranges in a request.

* bzrlib/tests/test_http.py:
(TestRangeRequestServer.test_readv_get_max_size): Test the
_get_max_size parameter.

* bzrlib/transport/__init__.py:
(Transport._coalesce_offsets): Add a max_size parameter limiting
the size of the coalesced offsets.

* bzrlib/tests/test_transport.py:
(TestCoalesceOffsets.check): Add the max_size parameter.
(TestCoalesceOffsets.test_coalesce_max_size,
TestCoalesceOffsets.test_coalesce_no_max_size): Test the max_size
parameter.

Show diffs side-by-side

added added

removed removed

Lines of Context:
792
792
        return offsets
793
793
 
794
794
    @staticmethod
795
 
    def _coalesce_offsets(offsets, limit, fudge_factor):
 
795
    def _coalesce_offsets(offsets, limit=0, fudge_factor=0, max_size=0):
796
796
        """Yield coalesced offsets.
797
797
 
798
798
        With a long list of neighboring requests, combine them
801
801
        Turns  [(15, 10), (25, 10)] => [(15, 20, [(0, 10), (10, 10)])]
802
802
 
803
803
        :param offsets: A list of (start, length) pairs
804
 
        :param limit: Only combine a maximum of this many pairs
805
 
                      Some transports penalize multiple reads more than
806
 
                      others, and sometimes it is better to return early.
807
 
                      0 means no limit
 
804
 
 
805
        :param limit: Only combine a maximum of this many pairs Some transports
 
806
                penalize multiple reads more than others, and sometimes it is
 
807
                better to return early.
 
808
                0 means no limit
 
809
 
808
810
        :param fudge_factor: All transports have some level of 'it is
809
811
                better to read some more data and throw it away rather 
810
812
                than seek', so collapse if we are 'close enough'
 
813
 
 
814
        :param max_size: Create coalesced offsets no bigger than this size.
 
815
                When a single offset is bigger than 'max_size', it will keep
 
816
                its size and be alone in the coalesced offset.
 
817
                0 means no maximum size.
 
818
 
811
819
        :return: yield _CoalescedOffset objects, which have members for where
812
820
                to start, how much to read, and how to split those 
813
821
                chunks back up
817
825
 
818
826
        for start, size in offsets:
819
827
            end = start + size
820
 
            if (last_end is not None 
 
828
            if (last_end is not None
821
829
                and start <= last_end + fudge_factor
822
830
                and start >= cur.start
823
 
                and (limit <= 0 or len(cur.ranges) < limit)):
 
831
                and (limit <= 0 or len(cur.ranges) < limit)
 
832
                and (max_size <= 0 or end - cur.start <= max_size)):
824
833
                cur.length = end - cur.start
825
834
                cur.ranges.append((start-cur.start, size))
826
835
            else: