From e0da4195d0bcc8385010638fb8044b9b96785b8b Mon Sep 17 00:00:00 2001 From: Adam King Date: Wed, 17 Apr 2024 11:36:12 -0400 Subject: [PATCH] cephadm: have agent check for errors before json loading mgr response Currently, since it tries to json.loads the response payload before checking the return code, if there was an error it fails with Failed to send metadata to mgr: the JSON object must be str, bytes or bytearray, not ConnectionRefusedError which is masking the actual failure. Also adds more context to the RuntimeError raised Fixes: https://tracker.ceph.com/issues/65553 Signed-off-by: Adam King (cherry picked from commit 287bd34eec09815602700747c62e0a709e6e5ff0) --- src/cephadm/cephadm.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cephadm/cephadm.py b/src/cephadm/cephadm.py index 0f6257331c20c..03653f5a82efd 100755 --- a/src/cephadm/cephadm.py +++ b/src/cephadm/cephadm.py @@ -5125,10 +5125,10 @@ WantedBy=ceph-{fsid}.target data=data, endpoint='/data', ssl_ctx=self.ssl_ctx) - response_json = json.loads(response) if status != 200: logger.error(f'HTTP error {status} while querying agent endpoint: {response}') - raise RuntimeError + raise RuntimeError(f'non-200 response <{status}> from agent endpoint: {response}') + response_json = json.loads(response) total_request_time = datetime.timedelta(seconds=(time.monotonic() - send_time)).total_seconds() logger.info(f'Received mgr response: "{response_json["result"]}" {total_request_time} seconds after sending request.') except Exception as e: -- 2.39.5