From 8e5928a39e6f0e982871a27d30a34a614fff9e38 Mon Sep 17 00:00:00 2001 From: Itamar Turner-Trauring Date: Tue, 28 Sep 2021 10:03:49 -0400 Subject: [PATCH 1/3] News file. --- newsfragments/3805.minor | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 newsfragments/3805.minor diff --git a/newsfragments/3805.minor b/newsfragments/3805.minor new file mode 100644 index 000000000..e69de29bb From 9970559019451c6a5bf68d1f4d06baeac430092e Mon Sep 17 00:00:00 2001 From: Itamar Turner-Trauring Date: Tue, 28 Sep 2021 10:46:21 -0400 Subject: [PATCH 2/3] Tests for slot_readv. --- src/allmydata/test/test_istorageserver.py | 62 +++++++++++++++++++++++ 1 file changed, 62 insertions(+) diff --git a/src/allmydata/test/test_istorageserver.py b/src/allmydata/test/test_istorageserver.py index c606afcc1..931cf6ed6 100644 --- a/src/allmydata/test/test_istorageserver.py +++ b/src/allmydata/test/test_istorageserver.py @@ -632,6 +632,68 @@ class IStorageServerMutableAPIsTestsMixin(object): ) self.assertEqual(reads, {}) + @inlineCallbacks + def test_slot_readv(self): + """ + Data written with ``IStorageServer.slot_testv_and_readv_and_writev()`` + can be read using ``IStorageServer.slot_readv()``. Reads can't go past + the end of the data. + """ + secrets = self.new_secrets() + storage_index = new_storage_index() + (written, _) = yield self.staraw( + storage_index, + secrets, + tw_vectors={ + 0: ([], [(0, b"abcdefg")], 7), + 1: ([], [(0, b"0123"), (4, b"456")], 7), + 2: ([], [(0, b"0123")], 4), + }, + r_vector=[], + ) + self.assertEqual(written, True) + + reads = yield self.storage_server.slot_readv( + storage_index, + shares=[0, 1], + # Whole thing, partial, going beyond the edge, completely outside + # range: + readv=[(0, 7), (2, 3), (6, 8), (100, 10)], + ) + self.assertEqual( + reads, + {0: [b"abcdefg", b"cde", b"g", b""], 1: [b"0123456", b"234", b"6", b""]}, + ) + + @inlineCallbacks + def test_slot_readv_no_shares(self): + """ + With no shares given, ``IStorageServer.slot_readv()`` reads from all shares. + """ + secrets = self.new_secrets() + storage_index = new_storage_index() + (written, _) = yield self.staraw( + storage_index, + secrets, + tw_vectors={ + 0: ([], [(0, b"abcdefg")], 7), + 1: ([], [(0, b"0123456")], 7), + 2: ([], [(0, b"9876543")], 7), + }, + r_vector=[], + ) + self.assertEqual(written, True) + + reads = yield self.storage_server.slot_readv( + storage_index, + shares=[], + readv=[(0, 7)], + ) + self.assertEqual( + reads, + {0: [b"abcdefg"], 1: [b"0123456"], 2: [b"9876543"]}, + ) + class _FoolscapMixin(SystemTestMixin): """Run tests on Foolscap version of ``IStorageServer.""" From 82cbce6b7e258a651ff2e8de580fc10f5b0e9468 Mon Sep 17 00:00:00 2001 From: Itamar Turner-Trauring Date: Wed, 6 Oct 2021 15:12:22 -0400 Subject: [PATCH 3/3] Better explanation. --- src/allmydata/test/test_istorageserver.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/allmydata/test/test_istorageserver.py b/src/allmydata/test/test_istorageserver.py index 931cf6ed6..26d976d00 100644 --- a/src/allmydata/test/test_istorageserver.py +++ b/src/allmydata/test/test_istorageserver.py @@ -647,7 +647,9 @@ class IStorageServerMutableAPIsTestsMixin(object): tw_vectors={ 0: ([], [(0, b"abcdefg")], 7), 1: ([], [(0, b"0123"), (4, b"456")], 7), - 2: ([], [(0, b"0123")], 4), + # This will never get read from, just here to show we only read + # from shares explicitly requested by slot_readv: + 2: ([], [(0, b"XYZW")], 4), }, r_vector=[], )