Skip to content

Commit

Permalink
Merge pull request #1109 from gbregman/devel
Browse files Browse the repository at this point in the history
Display warnings from CLI and gateway about rounding or truncating QOS limits
  • Loading branch information
gbregman authored Feb 16, 2025
2 parents d0a0d4d + a19bf1a commit a758c7c
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 2 deletions.
20 changes: 18 additions & 2 deletions control/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -196,6 +196,7 @@ class GatewayClient:
"""

SIZE_UNITS = ["K", "M", "G", "T", "P"]
MAX_MB_PER_SECOND = int(0xffffffffffffffff / (1024 * 1024))
cli = Parser()

def __init__(self):
Expand Down Expand Up @@ -2260,7 +2261,7 @@ def get_qos_limit_str_value(self, qos_limit):
def ns_set_qos(self, args):
"""Set namespace QOS limits."""

out_func, err_func, _ = self.get_output_functions(args)
out_func, err_func, wrn_func = self.get_output_functions(args)
if args.nsid <= 0:
self.cli.parser.error("nsid value must be positive")
if args.rw_ios_per_second is None:
Expand All @@ -2272,8 +2273,23 @@ def ns_set_qos(self, args):
if args.format == "text" or args.format == "plain":
if args.rw_ios_per_second and (args.rw_ios_per_second % 1000) != 0:
rounded_rate = int((args.rw_ios_per_second + 1000) / 1000) * 1000
err_func(f"IOs per second {args.rw_ios_per_second} will be "
wrn_func(f"IOs per second {args.rw_ios_per_second} will be "
f"rounded up to {rounded_rate}")
if args.rw_megabytes_per_second:
if args.rw_megabytes_per_second > GatewayClient.MAX_MB_PER_SECOND:
wrn_func(f"Read/Write megabytes per second {args.rw_megabytes_per_second} "
f"is too big, it will be truncated to "
f"{GatewayClient.MAX_MB_PER_SECOND}")
if args.r_megabytes_per_second:
if args.r_megabytes_per_second > GatewayClient.MAX_MB_PER_SECOND:
wrn_func(f"Read megabytes per second {args.r_megabytes_per_second} "
f"is too big, it will be truncated to "
f"{GatewayClient.MAX_MB_PER_SECOND}")
if args.w_megabytes_per_second:
if args.w_megabytes_per_second > GatewayClient.MAX_MB_PER_SECOND:
wrn_func(f"Write megabytes per second {args.w_megabytes_per_second} "
f"is too big, it will be truncated to "
f"{GatewayClient.MAX_MB_PER_SECOND}")

qos_args = {}
qos_args["subsystem_nqn"] = args.subsystem
Expand Down
24 changes: 24 additions & 0 deletions control/grpc.py
Original file line number Diff line number Diff line change
Expand Up @@ -2664,6 +2664,8 @@ def get_qos_limits_string(self, request):
def namespace_set_qos_limits_safe(self, request, context):
"""Set namespace's qos limits."""

max_mb_per_second = int(0xffffffffffffffff / (1024 * 1024))

failure_prefix = f"Failure setting QOS limits for namespace {request.nsid} " \
f"on {request.subsystem_nqn}"
peer_msg = self.get_peer_message(context)
Expand Down Expand Up @@ -2695,6 +2697,28 @@ def namespace_set_qos_limits_safe(self, request, context):
self.logger.error(errmsg)
return pb2.req_status(status=errno.ENODEV, error_message=errmsg)

if request.HasField("rw_ios_per_second"):
if request.rw_ios_per_second % 1000 != 0:
rounded_rate = int((request.rw_ios_per_second + 1000) / 1000) * 1000
self.logger.warning(f"IOs per second {request.rw_ios_per_second} will be "
f"rounded up to {rounded_rate}")

if request.HasField("rw_mbytes_per_second"):
if request.rw_mbytes_per_second > max_mb_per_second:
self.logger.warning(f"Read/Write megabytes per second "
f"{request.rw_mbytes_per_second} is too big, "
f"it will be truncated to {max_mb_per_second}")
if request.HasField("r_mbytes_per_second"):
if request.r_mbytes_per_second > max_mb_per_second:
self.logger.warning(f"Read megabytes per second "
f"{request.r_mbytes_per_second} is too big, "
f"it will be truncated to {max_mb_per_second}")
if request.HasField("w_mbytes_per_second"):
if request.w_mbytes_per_second > max_mb_per_second:
self.logger.warning(f"Write megabytes per second "
f"{request.w_mbytes_per_second} is too big, "
f"it will be truncated to {max_mb_per_second}")

set_qos_limits_args = {}
set_qos_limits_args["name"] = bdev_name
if request.HasField("rw_ios_per_second"):
Expand Down

0 comments on commit a758c7c

Please sign in to comment.