Skip to content

Commit

Permalink
Merge pull request #1503 from mmichal10/block-standy
Browse files Browse the repository at this point in the history
Block standby
  • Loading branch information
robertbaldyga authored Sep 9, 2024
2 parents 3de21a5 + 0f0ef79 commit f0727cc
Show file tree
Hide file tree
Showing 13 changed files with 72 additions and 28 deletions.
15 changes: 14 additions & 1 deletion casadm/argp.c
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
/*
* Copyright(c) 2012-2021 Intel Corporation
* Copyright(c) 2024 Huawei Technologies
* SPDX-License-Identifier: BSD-3-Clause
*/

Expand All @@ -26,6 +27,11 @@ static int is_command_hidden(const cli_command* commands, int cmd)
return commands[cmd].flags & CLI_COMMAND_HIDDEN;
}

static int is_command_blocked(const cli_command* commands, int cmd)
{
return commands[cmd].flags & CLI_COMMAND_BLOCKED;
}

static void print_short_usage(const app *app_values)
{
cas_printf(LOG_INFO, "Usage: %s %s\n", app_values->name, app_values->info);
Expand Down Expand Up @@ -313,8 +319,10 @@ void print_help(const app *app_values, const cli_command *commands)
break;
}

if (is_command_hidden(commands, i))
if (is_command_hidden(commands, i) ||
is_command_blocked(commands, i)) {
continue;
}

get_short_name_string(commands[i].short_name, short_name);

Expand Down Expand Up @@ -614,6 +622,11 @@ int args_parse(app *app_values, cli_command *commands, int argc, const char **ar
}
}

if (is_command_blocked(commands, i)) {
cas_printf(LOG_ERR, "The command is not supported\n");
return FAILURE;
}

configure_cli_commands(commands);

if (argc >= 3 && get_help_position(argc, argv) != -1) {
Expand Down
4 changes: 3 additions & 1 deletion casadm/argp.h
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
/*
* Copyright(c) 2012-2021 Intel Corporation
* Copyright(c) 2024 Huawei Technologies
* SPDX-License-Identifier: BSD-3-Clause
*/

Expand All @@ -22,7 +23,8 @@ enum CLI_OPTION_FLAGS {

enum CLI_COMMAND_FLAGS {
CLI_SU_REQUIRED = 1 << 0,
CLI_COMMAND_HIDDEN = 1 << 1
CLI_COMMAND_HIDDEN = 1 << 1,
CLI_COMMAND_BLOCKED = 1 << 2
};

#define ERROR -1
Expand Down
3 changes: 2 additions & 1 deletion casadm/cas_main.c
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
/*
* Copyright(c) 2012-2022 Intel Corporation
* Copyright(c) 2024 Huawei Technologies
* SPDX-License-Identifier: BSD-3-Clause
*/

Expand Down Expand Up @@ -2373,7 +2374,7 @@ static cli_command cas_commands[] = {
.options = standby_params_options,
.command_handle_opts = standby_handle_option,
.handle = standby_handle,
.flags = CLI_SU_REQUIRED,
.flags = (CLI_COMMAND_BLOCKED | CLI_SU_REQUIRED),
.help = standby_help,
},
{
Expand Down
18 changes: 18 additions & 0 deletions modules/cas_cache/layer_cache_management.c
Original file line number Diff line number Diff line change
Expand Up @@ -1882,6 +1882,15 @@ int cache_mngt_create_cache_cfg(struct ocf_mngt_cache_config *cfg,
char cache_name[OCF_CACHE_NAME_SIZE];
uint16_t cache_id;

switch (cmd->init_cache) {
case CACHE_INIT_STANDBY_NEW:
case CACHE_INIT_STANDBY_LOAD:
printk(KERN_ERR "Standby mode is not supported!\n");
return -ENOTSUP;
default:
break;
}

if (!cmd)
return -OCF_ERR_INVAL;

Expand Down Expand Up @@ -2470,6 +2479,15 @@ int cache_mngt_init_instance(struct ocf_mngt_cache_config *cfg,
ocf_cache_mode_t cache_mode_meta;
ocf_cache_line_size_t cache_line_size_meta;

switch (cmd->init_cache) {
case CACHE_INIT_STANDBY_NEW:
case CACHE_INIT_STANDBY_LOAD:
printk(KERN_ERR "Standby mode is not supported!\n");
return -ENOTSUP;
default:
break;
}

if (!try_module_get(THIS_MODULE))
return -KCAS_ERR_SYSTEM;

Expand Down
5 changes: 5 additions & 0 deletions modules/cas_cache/service_ui_ioctl.c
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
/*
* Copyright(c) 2012-2022 Intel Corporation
* Copyright(c) 2024 Huawei Technologies
* SPDX-License-Identifier: BSD-3-Clause
*/

Expand Down Expand Up @@ -381,6 +382,8 @@ long cas_service_ioctl_ctrl(struct file *filp, unsigned int cmd,
case KCAS_IOCTL_STANDBY_DETACH: {
struct kcas_standby_detach *cmd_info;

return -ENOTSUP;

GET_CMD_INFO(cmd_info, arg);

retval = cache_mngt_standby_detach(cmd_info);
Expand All @@ -391,6 +394,8 @@ long cas_service_ioctl_ctrl(struct file *filp, unsigned int cmd,
struct kcas_standby_activate *cmd_info;
struct ocf_mngt_cache_standby_activate_config cfg;

return -ENOTSUP;

GET_CMD_INFO(cmd_info, arg);

retval = cache_mngt_create_cache_standby_activate_cfg(&cfg,
Expand Down
27 changes: 2 additions & 25 deletions test/functional/api/cas/cli_help_messages.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
#
# Copyright(c) 2020-2022 Intel Corporation
# Copyright(c) 2024 Huawei Technologies
# SPDX-License-Identifier: BSD-3-Clause
#

Expand All @@ -23,7 +24,6 @@
r"-C --io-class Manage IO classes",
r"-V --version Print CAS version",
r"-H --help Print help",
r"--standby Manage failover standby",
r"--zero-metadata Clear metadata from caching device",
r"For detailed help on the above commands use --help after the command\.",
r"e\.g\.",
Expand Down Expand Up @@ -242,30 +242,7 @@
]

standby_help = [
r"Usage: casadm --standby \{--init|--load|--detach|--activate\}",
r"Manage failover standby",
r"Initialize cache in standby mode:",
r"Usage: casadm --standby --init --cache-id \<ID\> --cache-line-size \<NUMBER\> "
r"--cache-device \<DEVICE\> \[option...\]",
r"Options that are valid with --init are:",
r"-i --cache-id \<ID\> Identifier of cache instance \<1-16384\>",
r"-x --cache-line-size \<NUMBER\> Set cache line size in kibibytes: \{4,8,16,32,64\}"
r"\[KiB\] \(default: 4\)",
r"-d --cache-device \<DEVICE\> Caching device to be used",
r"-f --force Force the initialization of cache instance",
r"Load cache in standby mode:",
r"Usage: casadm --standby --load --cache-device \<DEVICE\>",
r"Options that are valid with --load are:",
r"-d --cache-device \<DEVICE\> Caching device to be used",
r"Detach cache device in standby mode:",
r"Usage: casadm --standby --detach --cache-id \<ID\>",
r"Options that are valid with --detach are:",
r" -i --cache-id \<ID\> Identifier of cache instance \<1-16384\>",
r"Activate standby cache:",
r"Usage: casadm --standby --activate --cache-id \<ID\> --cache-device \<DEVICE\>",
r"Options that are valid with --activate are:",
r"-i --cache-id \<ID\> Identifier of cache instance \<1-16384\>",
r"-d --cache-device \<DEVICE\> Caching device to be used"
r"The command is not supported"
]

zero_metadata_help = [
Expand Down
11 changes: 11 additions & 0 deletions test/functional/tests/cli/test_cli_standby.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
#
# Copyright(c) 2019-2022 Intel Corporation
# Copyright(c) 2024 Huawei Technologies
# SPDX-License-Identifier: BSD-3-Clause
#

Expand Down Expand Up @@ -37,6 +38,7 @@


@pytest.mark.CI
@pytest.mark.skip(reason="Standby mode is not supported")
@pytest.mark.require_disk("cache", DiskTypeSet([DiskType.nand, DiskType.optane]))
def test_standby_neg_cli_params():
"""
Expand Down Expand Up @@ -106,6 +108,7 @@ def test_standby_neg_cli_params():


@pytest.mark.CI
@pytest.mark.skip(reason="Standby mode is not supported")
@pytest.mark.require_disk("cache", DiskTypeSet([DiskType.nand, DiskType.optane]))
def test_activate_neg_cli_params():
"""
Expand Down Expand Up @@ -186,6 +189,7 @@ def test_activate_neg_cli_params():


@pytest.mark.CI
@pytest.mark.skip(reason="Standby mode is not supported")
@pytest.mark.require_disk("cache", DiskTypeSet([DiskType.nand, DiskType.optane]))
def test_standby_neg_cli_management():
"""
Expand Down Expand Up @@ -262,6 +266,7 @@ def test_standby_neg_cli_management():


@pytest.mark.CI
@pytest.mark.skip(reason="Standby mode is not supported")
@pytest.mark.require_disk("cache", DiskTypeSet([DiskType.nand, DiskType.optane]))
def test_start_neg_cli_flags():
"""
Expand Down Expand Up @@ -316,6 +321,7 @@ def test_start_neg_cli_flags():


@pytest.mark.CI
@pytest.mark.skip(reason="Standby mode is not supported")
@pytest.mark.require_disk("cache", DiskTypeSet([DiskType.nand, DiskType.optane]))
def test_activate_without_detach():
"""
Expand Down Expand Up @@ -379,6 +385,7 @@ def test_activate_without_detach():


@pytest.mark.CI
@pytest.mark.skip(reason="Standby mode is not supported")
@pytest.mark.require_disk("active_cache", DiskTypeSet([DiskType.nand, DiskType.optane]))
@pytest.mark.require_disk("standby_cache", DiskTypeSet([DiskType.nand, DiskType.optane]))
def test_activate_neg_cache_line_size():
Expand Down Expand Up @@ -470,6 +477,7 @@ def test_activate_neg_cache_line_size():


@pytest.mark.CI
@pytest.mark.skip(reason="Standby mode is not supported")
@pytest.mark.require_disk("cache", DiskTypeSet([DiskType.nand, DiskType.optane]))
@pytest.mark.require_disk("core", DiskTypeLowerThan("cache"))
def test_standby_init_with_preexisting_metadata():
Expand Down Expand Up @@ -528,6 +536,7 @@ def test_standby_init_with_preexisting_metadata():


@pytest.mark.CI
@pytest.mark.skip(reason="Standby mode is not supported")
@pytest.mark.require_disk("cache", DiskTypeSet([DiskType.nand, DiskType.optane]))
@pytest.mark.require_disk("core", DiskTypeLowerThan("cache"))
@pytest.mark.parametrizex("filesystem", Filesystem)
Expand Down Expand Up @@ -579,6 +588,7 @@ def test_standby_init_with_preexisting_filesystem(filesystem):


@pytest.mark.CI
@pytest.mark.skip(reason="Standby mode is not supported")
@pytest.mark.require_disk("caches", DiskTypeSet([DiskType.nand, DiskType.optane]))
@pytest.mark.require_disk("core", DiskTypeLowerThan("caches"))
def test_standby_activate_with_corepool():
Expand Down Expand Up @@ -637,6 +647,7 @@ def test_standby_activate_with_corepool():


@pytest.mark.CI
@pytest.mark.skip(reason="Standby mode is not supported")
@pytest.mark.require_disk("cache", DiskTypeSet([DiskType.optane, DiskType.nand]))
@pytest.mark.parametrizex("cache_line_size", CacheLineSize)
def test_standby_start_stop(cache_line_size):
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
#
# Copyright(c) 2022 Intel Corporation
# Copyright(c) 2024 Huawei Technologies
# SPDX-License-Identifier: BSD-3-Clause
#

Expand Down Expand Up @@ -42,6 +43,7 @@
test_file_path = f"{mountpoint}/test_file"


@pytest.mark.skip(reason="Standby mode is not supported")
@pytest.mark.require_disk("metadata_dev", DiskTypeSet([DiskType.nand]))
@pytest.mark.require_disk("core_dev", DiskTypeSet([DiskType.hdd]))
@pytest.mark.require_disk("raid_dev1", DiskTypeSet([DiskType.optane]))
Expand Down Expand Up @@ -226,6 +228,7 @@ def test_functional_activate_twice_round_trip(filesystem):
TestRun.LOGGER.end_group()


@pytest.mark.skip(reason="Standby mode is not supported")
@pytest.mark.require_disk("metadata_dev", DiskTypeSet([DiskType.nand]))
@pytest.mark.require_disk("core_dev", DiskTypeSet([DiskType.hdd]))
@pytest.mark.require_disk("raid_dev1", DiskTypeSet([DiskType.optane]))
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
#
# Copyright(c) 2019-2022 Intel Corporation
# Copyright(c) 2024 Huawei Technologies
# SPDX-License-Identifier: BSD-3-Clause
#

Expand Down Expand Up @@ -28,6 +29,7 @@


@pytest.mark.CI
@pytest.mark.skip(reason="Standby mode is not supported")
@pytest.mark.require_disk("cache", DiskTypeSet([DiskType.nand, DiskType.optane]))
@pytest.mark.require_disk("core", DiskTypeLowerThan("cache"))
def test_activate_corrupted():
Expand Down Expand Up @@ -85,6 +87,7 @@ def test_activate_corrupted():


@pytest.mark.CI
@pytest.mark.skip(reason="Standby mode is not supported")
@pytest.mark.require_disk("cache", DiskTypeSet([DiskType.nand, DiskType.optane]))
@pytest.mark.require_disk("core", DiskTypeLowerThan("cache"))
def test_load_corrupted():
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
#
# Copyright(c) 2019-2022 Intel Corporation
# Copyright(c) 2024 Huawei Technologies
# SPDX-License-Identifier: BSD-3-Clause
#

Expand Down Expand Up @@ -27,6 +28,7 @@


@pytest.mark.CI
@pytest.mark.skip(reason="Standby mode is not supported")
@pytest.mark.require_disk("cache", DiskTypeSet([DiskType.optane, DiskType.nand]))
def test_activate_neg_cache_id():
"""
Expand Down Expand Up @@ -98,6 +100,7 @@ def test_activate_neg_cache_id():


@pytest.mark.CI
@pytest.mark.skip(reason="Standby mode is not supported")
@pytest.mark.require_disk("cache", DiskTypeSet([DiskType.optane, DiskType.nand]))
@pytest.mark.require_disk("core", DiskTypeLowerThan("cache"))
def test_activate_incomplete_cache():
Expand Down Expand Up @@ -215,6 +218,7 @@ def test_activate_incomplete_cache():


@pytest.mark.CI
@pytest.mark.skip(reason="Standby mode is not supported")
@pytest.mark.require_disk("cache", DiskTypeSet([DiskType.optane, DiskType.nand]))
@pytest.mark.require_disk("core", DiskTypeLowerThan("cache"))
def test_activate_neg_core_size():
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
#
# Copyright(c) 2022 Intel Corporation
# Copyright(c) 2024 Huawei Technologies
# SPDX-License-Identifier: BSD-3-Clause
#

Expand All @@ -19,6 +20,7 @@


@pytest.mark.CI
@pytest.mark.skip(reason="Standby mode is not supported")
@pytest.mark.require_disk("cache", DiskTypeSet([DiskType.nand, DiskType.optane]))
@pytest.mark.require_disk("core", DiskTypeLowerThan("cache"))
@pytest.mark.parametrizex("cache_line_size", CacheLineSize)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
#
# Copyright(c) 2022 Intel Corporation
# Copyright(c) 2024 Huawei Technologies
# SPDX-License-Identifier: BSD-3-Clause
#

Expand All @@ -14,6 +15,7 @@


@pytest.mark.CI
@pytest.mark.skip(reason="Standby mode is not supported")
@pytest.mark.require_disk("cache", DiskTypeSet([DiskType.nand, DiskType.optane]))
@pytest.mark.require_disk("core", DiskTypeLowerThan("cache"))
def test_standby_activate_the_same_cache_path():
Expand Down
3 changes: 3 additions & 0 deletions test/functional/tests/initialize/test_startup_init_config.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
#
# Copyright(c) 2019-2022 Intel Corporation
# Copyright(c) 2024 Huawei Technologies
# SPDX-License-Identifier: BSD-3-Clause
#

Expand Down Expand Up @@ -385,6 +386,7 @@ def test_cas_startup_negative_missing_cache():


@pytest.mark.os_dependent
@pytest.mark.skip(reason="Standby mode is not supported")
@pytest.mark.require_disk("cache", DiskTypeSet([DiskType.optane, DiskType.nand]))
@pytest.mark.require_disk("core", DiskTypeSet([DiskType.hdd]))
@pytest.mark.require_plugin("power_control")
Expand Down Expand Up @@ -490,6 +492,7 @@ def test_failover_config_startup():


@pytest.mark.os_dependent
@pytest.mark.skip(reason="Standby mode is not supported")
@pytest.mark.require_disk("cache", DiskTypeSet([DiskType.optane, DiskType.nand]))
def test_failover_config_startup_negative():
"""
Expand Down

0 comments on commit f0727cc

Please sign in to comment.