diff options
author | Joshua Watt <JPEWhacker@gmail.com> | 2024-05-29 16:47:34 -0600 |
---|---|---|
committer | Steve Sakoman <steve@sakoman.com> | 2024-06-06 06:53:49 -0700 |
commit | 934c533196bbe8d3ae51499f1326f26d94a7095f (patch) | |
tree | 73360854eadaffdd9832dbcfe6579a9597562b34 /bitbake/lib/hashserv/tests.py | |
parent | d1811356b766280553dd84220d3216387f3a0a51 (diff) | |
download | poky-934c533196bbe8d3ae51499f1326f26d94a7095f.tar.gz |
bitbake: hashserv: client: Add batch stream API
Changes the stream mode to do "batch" processing. This means that the
sending and reciving of messages is done simultaneously so that messages
can be sent as fast as possible without having to wait for each reply.
This allows multiple messages to be in flight at once, reducing the
effect of the round trip latency from the server.
(Bitbake rev: f99a17023b972d0d90dccb111f983655af6ccb87)
Signed-off-by: Joshua Watt <JPEWhacker@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Diffstat (limited to 'bitbake/lib/hashserv/tests.py')
-rw-r--r-- | bitbake/lib/hashserv/tests.py | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/bitbake/lib/hashserv/tests.py b/bitbake/lib/hashserv/tests.py index 0809453cf8..5349cd5867 100644 --- a/bitbake/lib/hashserv/tests.py +++ b/bitbake/lib/hashserv/tests.py | |||
@@ -594,6 +594,43 @@ class HashEquivalenceCommonTests(object): | |||
594 | 7: None, | 594 | 7: None, |
595 | }) | 595 | }) |
596 | 596 | ||
597 | def test_get_unihash_batch(self): | ||
598 | TEST_INPUT = ( | ||
599 | # taskhash outhash unihash | ||
600 | ('8aa96fcffb5831b3c2c0cb75f0431e3f8b20554a', 'afe240a439959ce86f5e322f8c208e1fedefea9e813f2140c81af866cc9edf7e','218e57509998197d570e2c98512d0105985dffc9'), | ||
601 | # Duplicated taskhash with multiple output hashes and unihashes. | ||
602 | ('8aa96fcffb5831b3c2c0cb75f0431e3f8b20554a', '0904a7fe3dc712d9fd8a74a616ddca2a825a8ee97adf0bd3fc86082c7639914d', 'ae9a7d252735f0dafcdb10e2e02561ca3a47314c'), | ||
603 | # Equivalent hash | ||
604 | ("044c2ec8aaf480685a00ff6ff49e6162e6ad34e1", '0904a7fe3dc712d9fd8a74a616ddca2a825a8ee97adf0bd3fc86082c7639914d', "def64766090d28f627e816454ed46894bb3aab36"), | ||
605 | ("e3da00593d6a7fb435c7e2114976c59c5fd6d561", "1cf8713e645f491eb9c959d20b5cae1c47133a292626dda9b10709857cbe688a", "3b5d3d83f07f259e9086fcb422c855286e18a57d"), | ||
606 | ('35788efcb8dfb0a02659d81cf2bfd695fb30faf9', '2765d4a5884be49b28601445c2760c5f21e7e5c0ee2b7e3fce98fd7e5970796f', 'f46d3fbb439bd9b921095da657a4de906510d2cd'), | ||
607 | ('35788efcb8dfb0a02659d81cf2bfd695fb30fafa', '2765d4a5884be49b28601445c2760c5f21e7e5c0ee2b7e3fce98fd7e5970796f', 'f46d3fbb439bd9b921095da657a4de906510d2ce'), | ||
608 | ('9d81d76242cc7cfaf7bf74b94b9cd2e29324ed74', '8470d56547eea6236d7c81a644ce74670ca0bbda998e13c629ef6bb3f0d60b69', '05d2a63c81e32f0a36542ca677e8ad852365c538'), | ||
609 | ) | ||
610 | EXTRA_QUERIES = ( | ||
611 | "6b6be7a84ab179b4240c4302518dc3f6", | ||
612 | ) | ||
613 | |||
614 | for taskhash, outhash, unihash in TEST_INPUT: | ||
615 | self.client.report_unihash(taskhash, self.METHOD, outhash, unihash) | ||
616 | |||
617 | |||
618 | result = self.client.get_unihash_batch( | ||
619 | [(self.METHOD, data[0]) for data in TEST_INPUT] + | ||
620 | [(self.METHOD, e) for e in EXTRA_QUERIES] | ||
621 | ) | ||
622 | |||
623 | self.assertListEqual(result, [ | ||
624 | "218e57509998197d570e2c98512d0105985dffc9", | ||
625 | "218e57509998197d570e2c98512d0105985dffc9", | ||
626 | "218e57509998197d570e2c98512d0105985dffc9", | ||
627 | "3b5d3d83f07f259e9086fcb422c855286e18a57d", | ||
628 | "f46d3fbb439bd9b921095da657a4de906510d2cd", | ||
629 | "f46d3fbb439bd9b921095da657a4de906510d2cd", | ||
630 | "05d2a63c81e32f0a36542ca677e8ad852365c538", | ||
631 | None, | ||
632 | ]) | ||
633 | |||
597 | def test_client_pool_unihash_exists(self): | 634 | def test_client_pool_unihash_exists(self): |
598 | TEST_INPUT = ( | 635 | TEST_INPUT = ( |
599 | # taskhash outhash unihash | 636 | # taskhash outhash unihash |
@@ -636,6 +673,44 @@ class HashEquivalenceCommonTests(object): | |||
636 | result = client_pool.unihashes_exist(query) | 673 | result = client_pool.unihashes_exist(query) |
637 | self.assertDictEqual(result, expected) | 674 | self.assertDictEqual(result, expected) |
638 | 675 | ||
676 | def test_unihash_exists_batch(self): | ||
677 | TEST_INPUT = ( | ||
678 | # taskhash outhash unihash | ||
679 | ('8aa96fcffb5831b3c2c0cb75f0431e3f8b20554a', 'afe240a439959ce86f5e322f8c208e1fedefea9e813f2140c81af866cc9edf7e','218e57509998197d570e2c98512d0105985dffc9'), | ||
680 | # Duplicated taskhash with multiple output hashes and unihashes. | ||
681 | ('8aa96fcffb5831b3c2c0cb75f0431e3f8b20554a', '0904a7fe3dc712d9fd8a74a616ddca2a825a8ee97adf0bd3fc86082c7639914d', 'ae9a7d252735f0dafcdb10e2e02561ca3a47314c'), | ||
682 | # Equivalent hash | ||
683 | ("044c2ec8aaf480685a00ff6ff49e6162e6ad34e1", '0904a7fe3dc712d9fd8a74a616ddca2a825a8ee97adf0bd3fc86082c7639914d', "def64766090d28f627e816454ed46894bb3aab36"), | ||
684 | ("e3da00593d6a7fb435c7e2114976c59c5fd6d561", "1cf8713e645f491eb9c959d20b5cae1c47133a292626dda9b10709857cbe688a", "3b5d3d83f07f259e9086fcb422c855286e18a57d"), | ||
685 | ('35788efcb8dfb0a02659d81cf2bfd695fb30faf9', '2765d4a5884be49b28601445c2760c5f21e7e5c0ee2b7e3fce98fd7e5970796f', 'f46d3fbb439bd9b921095da657a4de906510d2cd'), | ||
686 | ('35788efcb8dfb0a02659d81cf2bfd695fb30fafa', '2765d4a5884be49b28601445c2760c5f21e7e5c0ee2b7e3fce98fd7e5970796f', 'f46d3fbb439bd9b921095da657a4de906510d2ce'), | ||
687 | ('9d81d76242cc7cfaf7bf74b94b9cd2e29324ed74', '8470d56547eea6236d7c81a644ce74670ca0bbda998e13c629ef6bb3f0d60b69', '05d2a63c81e32f0a36542ca677e8ad852365c538'), | ||
688 | ) | ||
689 | EXTRA_QUERIES = ( | ||
690 | "6b6be7a84ab179b4240c4302518dc3f6", | ||
691 | ) | ||
692 | |||
693 | result_unihashes = set() | ||
694 | |||
695 | |||
696 | for taskhash, outhash, unihash in TEST_INPUT: | ||
697 | result = self.client.report_unihash(taskhash, self.METHOD, outhash, unihash) | ||
698 | result_unihashes.add(result["unihash"]) | ||
699 | |||
700 | query = [] | ||
701 | expected = [] | ||
702 | |||
703 | for _, _, unihash in TEST_INPUT: | ||
704 | query.append(unihash) | ||
705 | expected.append(unihash in result_unihashes) | ||
706 | |||
707 | |||
708 | for unihash in EXTRA_QUERIES: | ||
709 | query.append(unihash) | ||
710 | expected.append(False) | ||
711 | |||
712 | result = self.client.unihash_exists_batch(query) | ||
713 | self.assertListEqual(result, expected) | ||
639 | 714 | ||
640 | def test_auth_read_perms(self): | 715 | def test_auth_read_perms(self): |
641 | admin_client = self.start_auth_server() | 716 | admin_client = self.start_auth_server() |