From 3f777ea1cfad3b4414c905817f0fcefb1b77fd96 Mon Sep 17 00:00:00 2001 From: Jan Musial Date: Tue, 5 Apr 2022 10:48:58 +0200 Subject: [PATCH] pyocf: extend metadata helpers Signed-off-by: Jan Musial --- .../pyocf/c/helpers/metadata_helpers.c | 41 ++++++++++++++++--- .../pyocf/c/helpers/metadata_helpers.h | 10 +++-- tests/functional/pyocf/helpers.py | 28 +++++++++++-- .../tests/failover/test_standby_io.py | 11 ++--- 4 files changed, 71 insertions(+), 19 deletions(-) diff --git a/tests/functional/pyocf/c/helpers/metadata_helpers.c b/tests/functional/pyocf/c/helpers/metadata_helpers.c index 43d9e0b..5323dc5 100644 --- a/tests/functional/pyocf/c/helpers/metadata_helpers.c +++ b/tests/functional/pyocf/c/helpers/metadata_helpers.c @@ -9,19 +9,50 @@ #include "../src/ocf/metadata/metadata_raw.h" #include "../src/ocf/metadata/metadata_internal.h" -// get collision metadata segment start and size (excluding padding) -uint64_t ocf_get_collision_start_page_helper(ocf_cache_t cache) +uint64_t ocf_get_metadata_segment_start_page(ocf_cache_t cache, int segment) { struct ocf_metadata_ctrl *ctrl = cache->metadata.priv; - struct ocf_metadata_raw *raw = &ctrl->raw_desc[metadata_segment_collision]; + struct ocf_metadata_raw *raw = &ctrl->raw_desc[segment]; return raw->ssd_pages_offset; } -uint64_t ocf_get_collision_page_count_helper(ocf_cache_t cache) +uint64_t ocf_get_metadata_segment_page_count(ocf_cache_t cache, int segment) { struct ocf_metadata_ctrl *ctrl = cache->metadata.priv; - struct ocf_metadata_raw *raw = &ctrl->raw_desc[metadata_segment_collision]; + struct ocf_metadata_raw *raw = &ctrl->raw_desc[segment]; return raw->ssd_pages; } + +uint64_t ocf_get_metadata_segment_elems_count(ocf_cache_t cache, int segment) +{ + struct ocf_metadata_ctrl *ctrl = cache->metadata.priv; + struct ocf_metadata_raw *raw = &ctrl->raw_desc[segment]; + + return raw->entries; +} + +uint64_t ocf_get_metadata_segment_elems_per_page(ocf_cache_t cache, int segment) +{ + struct ocf_metadata_ctrl *ctrl = cache->metadata.priv; + struct ocf_metadata_raw *raw = &ctrl->raw_desc[segment]; + + return raw->entries_in_page; +} + +uint64_t ocf_get_metadata_segment_elem_size(ocf_cache_t cache, int segment) +{ + struct ocf_metadata_ctrl *ctrl = cache->metadata.priv; + struct ocf_metadata_raw *raw = &ctrl->raw_desc[segment]; + + return raw->entry_size; +} + +bool ocf_get_metadata_segment_is_flapped(ocf_cache_t cache, int segment) +{ + struct ocf_metadata_ctrl *ctrl = cache->metadata.priv; + struct ocf_metadata_raw *raw = &ctrl->raw_desc[segment]; + + return raw->flapping; +} diff --git a/tests/functional/pyocf/c/helpers/metadata_helpers.h b/tests/functional/pyocf/c/helpers/metadata_helpers.h index e0b0df8..e6c98ae 100644 --- a/tests/functional/pyocf/c/helpers/metadata_helpers.h +++ b/tests/functional/pyocf/c/helpers/metadata_helpers.h @@ -1,9 +1,13 @@ /* - * Copyright(c) 2022-2022 Intel Corporation + * Copyright(c) 2022 Intel Corporation * SPDX-License-Identifier: BSD-3-Clause */ #pragma once -uint64_t ocf_get_collision_start_page_helper(ocf_cache_t cache); -uint64_t ocf_get_collision_page_count_helper(ocf_cache_t cache); +uint64_t ocf_get_metadata_segment_start_page(ocf_cache_t cache, int segment); +uint64_t ocf_get_metadata_segment_page_count(ocf_cache_t cache, int segment); +uint64_t ocf_get_metadata_segment_elems_count(ocf_cache_t cache, int segment); +uint64_t ocf_get_metadata_segment_elems_per_page(ocf_cache_t cache, int segment); +uint64_t ocf_get_metadata_segment_elem_size(ocf_cache_t cache, int segment); +bool ocf_get_metadata_segment_is_flapped(ocf_cache_t cache, int segment); diff --git a/tests/functional/pyocf/helpers.py b/tests/functional/pyocf/helpers.py index 57c165e..96dd90f 100644 --- a/tests/functional/pyocf/helpers.py +++ b/tests/functional/pyocf/helpers.py @@ -6,11 +6,31 @@ from .ocf import OcfLib -def get_collision_segment_page_location(cache): +def get_metadata_segment_page_location(cache, segment): lib = OcfLib.getInstance() - return int(lib.ocf_get_collision_start_page_helper(cache)) + return int(lib.ocf_get_metadata_segment_start_page(cache, segment)) -def get_collision_segment_size(cache): +def get_metadata_segment_size(cache, segment): lib = OcfLib.getInstance() - return int(lib.ocf_get_collision_page_count_helper(cache)) + return int(lib.ocf_get_metadata_segment_page_count(cache, segment)) + + +def get_metadata_segment_elems_count(cache, segment): + lib = OcfLib.getInstance() + return int(lib.ocf_get_metadata_segment_elems_count(cache, segment)) + + +def get_metadata_segment_elems_per_page(cache, segment): + lib = OcfLib.getInstance() + return int(lib.ocf_get_metadata_segment_elems_per_page(cache, segment)) + + +def get_metadata_segment_elem_size(cache, segment): + lib = OcfLib.getInstance() + return int(lib.ocf_get_metadata_segment_elem_size(cache, segment)) + + +def get_metadata_segment_is_flapped(cache, segment): + lib = OcfLib.getInstance() + return bool(lib.ocf_get_metadata_segment_is_flapped(cache, segment)) diff --git a/tests/functional/tests/failover/test_standby_io.py b/tests/functional/tests/failover/test_standby_io.py index 2d6edf9..d02f804 100644 --- a/tests/functional/tests/failover/test_standby_io.py +++ b/tests/functional/tests/failover/test_standby_io.py @@ -8,16 +8,13 @@ from datetime import timedelta from pyocf.types.volume import RamVolume from pyocf.types.volume_cache import CacheVolume -from pyocf.types.cache import Cache +from pyocf.types.cache import Cache, CacheMetadataSegment from pyocf.types.queue import Queue from pyocf.utils import Size from pyocf.types.shared import CacheLineSize from pyocf.types.ctx import OcfCtx from pyocf.rio import Rio, ReadWrite -from pyocf.helpers import ( - get_collision_segment_page_location, - get_collision_segment_size, -) +from pyocf.helpers import get_metadata_segment_page_location, get_metadata_segment_size @pytest.mark.parametrize("cacheline_size", CacheLineSize) @@ -71,8 +68,8 @@ def test_test_standby_io_metadata(pyocf_ctx, cacheline_size): cache.standby_attach(cache_vol) - start = get_collision_segment_page_location(cache) - count = get_collision_segment_size(cache) + start = get_metadata_segment_page_location(cache, CacheMetadataSegment.COLLISION) + count = get_metadata_segment_size(cache, CacheMetadataSegment.COLLISION) io_offset = Size.from_page(start) io_size = Size.from_page(count)