Reland "lib: Batch hash signing + split parallelism for paygen payload"
This is a reland of commit 450d373d8f193e813ca9e0bf57053aa385f7c565
Fix Rubik build failures of empty paygen payload list.
Squashing in:
Significant amount of time is spent creating the payloads, which is
amplified with multiple signers running in sequence.
Batched signing requests get bottlenecked due to this, since each signer
runs only after running the batched set to paygen payloads to gen+sign.
This parallelizes per signer to bring paygen times down.
Original change's description:
> lib: Batch hash signing + split parallelism for paygen payload
>
> Calls into paygen payload used to individually send hashes (payload +
> metadata) per paygen payload to signers, this is batched now.
>
> This will reduce the # of signing requests sent, but callers into paygen
> payload should bundle/batch the payloads to sign when calling into
> paygen_payload_lib.
>
> ```
> Generate update payload
> w/|w/o private key
> w/|w/o verification
> w/|w/o src image
> ```
>
> BUG=b:241565562
> TEST=./run_tests -- -x lib/paygen/ service/ api/controller/
> TEST=comment
>
> Change-Id: I243fb6d26a151b0591811698a8cbbc36c75fab0c
> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/chromite/+/3818783
> Reviewed-by: Mike Frysinger <vapier@chromium.org>
> Tested-by: Jae Hoon Kim <kimjae@chromium.org>
> Commit-Queue: Jae Hoon Kim <kimjae@chromium.org>
BUG=b:241565562
TEST=./run_tests -- -x lib/paygen/ service/ api/controller/
Change-Id: I529aa90b4fa103577fdc00593cce2df9e863317f
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/chromite/+/3845086
Tested-by: Jae Hoon Kim <kimjae@chromium.org>
Reviewed-by: Mike Frysinger <vapier@chromium.org>
Commit-Queue: Jae Hoon Kim <kimjae@chromium.org>
diff --git a/api/controller/payload_unittest.py b/api/controller/payload_unittest.py
index 2b9254d..6606d98 100644
--- a/api/controller/payload_unittest.py
+++ b/api/controller/payload_unittest.py
@@ -65,8 +65,7 @@
def testCallSucceeds(self):
"""Check that a call is made successfully."""
# Deep patch the paygen lib, this is a full run through service as well.
- patch_obj = self.PatchObject(paygen_payload_lib, 'PaygenPayload')
- patch_obj.return_value.Run.return_value = 'gs://something'
+ self.PatchObject(paygen_payload_lib, 'GeneratePayloads')
res = payload.GeneratePayload(self.req, self.result, self.api_config)
self.assertEqual(res, controller.RETURN_CODE_SUCCESS)
@@ -90,8 +89,7 @@
def testMiniOSSuccess(self):
"""Test a miniOS paygen request."""
- patch = self.PatchObject(paygen_payload_lib, 'PaygenPayload')
- patch.return_value.Run.return_value = 'gs://minios/something'
+ self.PatchObject(paygen_payload_lib, 'GeneratePayloads')
res = payload.GeneratePayload(self.minios_req, self.result, self.api_config)
self.assertEqual(res, controller.RETURN_CODE_SUCCESS)