Skip to content

Commit

Permalink
Make blockdev calls lazy
Browse files Browse the repository at this point in the history
This way, the calls only occur if the result will be used.

Signed-off-by: mulhern <[email protected]>
  • Loading branch information
mulkieran committed Oct 9, 2023
1 parent 8e2c23d commit db5528d
Showing 1 changed file with 17 additions and 6 deletions.
23 changes: 17 additions & 6 deletions test_harness.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,20 @@
_SIZE_OF_DEVICE = 1024**4 # 1 TiB


class _LogBlockdev: # pylint: disable=too-few-public-methods
"""
Allows only running blockdev commands if the result will be logged.
"""

def __init__(self, option, device):
self.cmd = ["blockdev", option, device]

def __str__(self):
with subprocess.Popen(self.cmd, stdout=subprocess.PIPE) as proc:
output = proc.stdout.readline().strip().decode("utf-8")
return f"output of {self.cmd}: {output}"


def _make_loopbacked_devices(num):
"""
Make the requisite number of loopbacked devices.
Expand All @@ -52,6 +66,9 @@ def _make_loopbacked_devices(num):

devices.append(device)

for option in ["--getss", "--getpbsz", "--getiomin", "--getioopt"]:
logging.debug("%s", _LogBlockdev(option, device))

return devices


Expand All @@ -63,12 +80,6 @@ def _run_command(num_devices, command):
:param list command: the command to be run
"""
devices = _make_loopbacked_devices(num_devices)
for device in devices:
for option in ["--getss", "--getpbsz", "--getiomin", "--getioopt"]:
diagcmd = ["blockdev", option, device]
with subprocess.Popen(diagcmd, stdout=subprocess.PIPE) as proc:
blockdevoutput = proc.stdout.readline().strip().decode("utf-8")
logging.debug("output of %s: %s", diagcmd, blockdevoutput)

command = command + list(itertools.chain(*[["--disk", dev] for dev in devices]))
subprocess.run(command, check=True)
Expand Down

0 comments on commit db5528d

Please sign in to comment.