Skip to content
Snippets Groups Projects
  • Kevin Wolf's avatar
    018e5987
    blockjob: Adhere to rate limit even when reentered early · 018e5987
    Kevin Wolf authored
    
    When jobs are sleeping, for example to enforce a given rate limit, they
    can be reentered early, in particular in order to get paused, to update
    the rate limit or to get cancelled.
    
    Before this patch, they behave in this case as if they had fully
    completed their rate limiting delay. This means that requests are sped
    up beyond their limit, violating the constraints that the user gave us.
    
    Change the block jobs to sleep in a loop until the necessary delay is
    completed, while still allowing cancelling them immediately as well
    pausing (handled by the pause point in job_sleep_ns()) and updating the
    rate limit.
    
    This change is also motivated by iotests cases being prone to fail
    because drain operations pause and unpause them so often that block jobs
    complete earlier than they are supposed to. In particular, the next
    commit would fail iotests 030 without this change.
    
    Signed-off-by: default avatarKevin Wolf <kwolf@redhat.com>
    Message-Id: <20230510203601.418015-8-kwolf@redhat.com>
    Reviewed-by: default avatarEric Blake <eblake@redhat.com>
    Signed-off-by: default avatarKevin Wolf <kwolf@redhat.com>
    018e5987
    History
    blockjob: Adhere to rate limit even when reentered early
    Kevin Wolf authored
    
    When jobs are sleeping, for example to enforce a given rate limit, they
    can be reentered early, in particular in order to get paused, to update
    the rate limit or to get cancelled.
    
    Before this patch, they behave in this case as if they had fully
    completed their rate limiting delay. This means that requests are sped
    up beyond their limit, violating the constraints that the user gave us.
    
    Change the block jobs to sleep in a loop until the necessary delay is
    completed, while still allowing cancelling them immediately as well
    pausing (handled by the pause point in job_sleep_ns()) and updating the
    rate limit.
    
    This change is also motivated by iotests cases being prone to fail
    because drain operations pause and unpause them so often that block jobs
    complete earlier than they are supposed to. In particular, the next
    commit would fail iotests 030 without this change.
    
    Signed-off-by: default avatarKevin Wolf <kwolf@redhat.com>
    Message-Id: <20230510203601.418015-8-kwolf@redhat.com>
    Reviewed-by: default avatarEric Blake <eblake@redhat.com>
    Signed-off-by: default avatarKevin Wolf <kwolf@redhat.com>