Rev 3681: Shrink the page size so that the three_level and iter_all in http://bzr.arbash-meinel.com/branches/bzr/1.7-dev/btree
John Arbash Meinel
john at arbash-meinel.com
Fri Aug 22 22:11:27 BST 2008
At http://bzr.arbash-meinel.com/branches/bzr/1.7-dev/btree
------------------------------------------------------------
revno: 3681
revision-id: john at arbash-meinel.com-20080822211125-p9bmwrug1j4ann6d
parent: john at arbash-meinel.com-20080822210515-f8qwnjnpqk560gly
committer: John Arbash Meinel <john at arbash-meinel.com>
branch nick: btree
timestamp: Fri 2008-08-22 16:11:25 -0500
message:
Shrink the page size so that the three_level and iter_all
tests don't have to use so many keys to get a three-level index.
modified:
bzrlib/tests/test_btree_index.py test_index.py-20080624222253-p0x5f92uyh5hw734-13
-------------- next part --------------
=== modified file 'bzrlib/tests/test_btree_index.py'
--- a/bzrlib/tests/test_btree_index.py 2008-08-22 21:05:15 +0000
+++ b/bzrlib/tests/test_btree_index.py 2008-08-22 21:11:25 +0000
@@ -113,6 +113,14 @@
keys.append((key, value, refs))
return keys
+ def shrink_page_size(self):
+ """Shrink the default page size so that less fits in a page."""
+ old_page_size = btree_index._PAGE_SIZE
+ def cleanup():
+ btree_index._PAGE_SIZE = old_page_size
+ self.addCleanup(cleanup)
+ btree_index._PAGE_SIZE = 2048
+
class TestBTreeBuilder(BTreeTestCase):
@@ -277,13 +285,11 @@
# pointer to the second node that the internal node is for, _not_
# the first, otherwise the first node overlaps with the last node of
# the prior internal node on that row.
- # We will be adding 140,000 nodes, so spill at 200,001 to prevent
- # having to flush anything out to disk.
- builder = btree_index.BTreeBuilder(key_elements=2, reference_lists=2,
- spill_at=200001)
- # 140K nodes is *just* enough to create a two internal nodes on the
- # second level
- nodes = self.make_nodes(70000, 2, 2)
+ self.shrink_page_size()
+ builder = btree_index.BTreeBuilder(key_elements=2, reference_lists=2)
+ # 40K nodes is enough to create a two internal nodes on the second
+ # level, with a 2K page size
+ nodes = self.make_nodes(20000, 2, 2)
for node in nodes:
builder.add_node(*node)
@@ -683,17 +689,19 @@
def test_iter_all_entries_reads(self):
# iterating all entries reads the header, then does a linear
# read.
+ self.shrink_page_size()
builder = btree_index.BTreeBuilder(key_elements=2, reference_lists=2,
spill_at=200001)
- # 140k nodes is enough to create a three-level index, which shows that
- # we skip the internal nodes and just read the leaf nodes.
- nodes = self.make_nodes(70000, 2, 2)
+ # 40k nodes is enough to create a two internal nodes on the second
+ # level, with a 2K page size
+ nodes = self.make_nodes(20000, 2, 2)
for node in nodes:
builder.add_node(*node)
transport = get_transport('trace+' + self.get_url(''))
size = transport.put_file('index', builder.finish())
- self.assertEqual(2624681, size, 'number of expected bytes in the'
- ' output changed')
+ self.assertEqual(780162, size, 'number of expected bytes in the'
+ ' output changed')
+ page_size = btree_index._PAGE_SIZE
del builder
index = btree_index.BTreeGraphIndex(transport, 'index', size)
del transport._activity[:]
@@ -706,7 +714,7 @@
self.assertEqual(3, len(index._row_lengths),
"Not enough rows: %r" % index._row_lengths)
# Should be as long as the nodes we supplied
- self.assertEqual(140000, len(found_nodes))
+ self.assertEqual(40000, len(found_nodes))
# Should have the same content
self.assertEqual(set(nodes), set(bare_nodes))
# Should have done linear scan IO up the index, ignoring
@@ -714,15 +722,15 @@
# The entire index should have been read
total_pages = sum(index._row_lengths)
self.assertEqual(total_pages, index._row_offsets[-1])
- self.assertEqual(2624681, size)
+ self.assertEqual(780162, size)
# The start of the leaves
- first_byte = index._row_offsets[-2] * btree_index._PAGE_SIZE
+ first_byte = index._row_offsets[-2] * page_size
readv_request = []
- for offset in range(first_byte, size, 4096):
- readv_request.append((offset, 4096))
+ for offset in range(first_byte, size, page_size):
+ readv_request.append((offset, page_size))
# The last page is truncated
- readv_request[-1] = (readv_request[-1][0], 2624681 % 4096)
- expected = [('readv', 'index', [(0, 4096)], False, None),
+ readv_request[-1] = (readv_request[-1][0], 780162 % page_size)
+ expected = [('readv', 'index', [(0, page_size)], False, None),
('readv', 'index', readv_request, False, None)]
if expected != transport._activity:
self.assertEqualDiff(pprint.pformat(expected),
More information about the bazaar-commits
mailing list