From 7cb9523d8c9f457ae7c3d6cf06e794a317f45f3a Mon Sep 17 00:00:00 2001 From: Adam Rutkowski Date: Wed, 27 Oct 2021 16:07:51 +0200 Subject: [PATCH] pyocf: volume offlining Signed-off-by: Adam Rutkowski --- tests/functional/pyocf/types/volume.py | 42 +++++++++++++++++++++----- 1 file changed, 34 insertions(+), 8 deletions(-) diff --git a/tests/functional/pyocf/types/volume.py b/tests/functional/pyocf/types/volume.py index cb53d09..2d1ec61 100644 --- a/tests/functional/pyocf/types/volume.py +++ b/tests/functional/pyocf/types/volume.py @@ -239,6 +239,7 @@ class Volume: type(self)._uuid_[self.uuid] = self self.reset_stats() + self.is_online = True self.opened = False def do_open(self): @@ -254,10 +255,10 @@ class Volume: def get_max_io_size(self): raise NotImplementedError - def submit_flush(self, flush): + def do_submit_flush(self, flush): raise NotImplementedError - def submit_discard(self, discard): + def do_submit_discard(self, discard): raise NotImplementedError def get_stats(self): @@ -269,10 +270,6 @@ class Volume: def inc_stats(self, _dir): self.stats[_dir] += 1 - def submit_io(self, io): - volume.inc_stats(IoDir(io.contents._dir)) - volume.do_submit_io(io) - def do_submit_io(self, io): raise NotImplementedError @@ -282,6 +279,35 @@ class Volume: def md5(self): raise NotImplementedError + def offline(self): + self.is_online = False + + def online(self): + self.is_online = True + + def _reject_io(self, io): + cast(io, POINTER(Io)).contents._end(io, -OcfErrorCode.OCF_ERR_IO) + + def submit_flush(self, io): + if self.is_online: + self.do_submit_flush(io) + else: + self._reject_io(io) + + def submit_io(self, io): + if self.is_online: + self.inc_stats(IoDir(io.contents._dir)) + self.do_submit_io(io) + else: + self._reject_io(io) + + def submit_discard(self, io): + if self.is_online: + self.do_submit_discard(io) + else: + self._reject_io(io) + + class RamVolume(Volume): props = None @@ -309,10 +335,10 @@ class RamVolume(Volume): def get_max_io_size(self): return S.from_KiB(128) - def submit_flush(self, flush): + def do_submit_flush(self, flush): flush.contents._end(flush, 0) - def submit_discard(self, discard): + def do_submit_discard(self, discard): try: dst = self.data_ptr + discard.contents._addr memset(dst, 0, discard.contents._bytes)