#!/bin/bash # # Copyright(c) 2012-2021 Intel Corporation # SPDX-License-Identifier: BSD-3-Clause # # Whenever adding new options (required or optional), add them to the variable below. # Every option might be mentioned more than once - it doesn't really matter at this point export ALL_OPTIONS=" CACHE_ID_OPTION CORE_ID_OPTION NEGATIVE_TEST_OPTION SILENT_COMMAND_OPTION DONT_FAIL_ON_ERROR_OPTION CACHE_DEVICE_OPTION CACHE_LOAD_METADATA_OPTION CACHE_FORCE_OPTION CACHE_DONT_FLUSH_DATA_OPTION CORE_DEVICE_OPTION NUMBER_OF_CACHE_PARTITIONS NUMBER_OF_CORE_PARTITIONS MAKE_FILE_SYSTEM PARTITION_ID_OPTION PRIORITY_OPTION MIN_SIZE_OPTION MAX_SIZE_OPTION CLEANING_POLICY_OPTION CACHE_ID_OPTION CORE_ID_OPTION MOUNTPOINT_ID_OPTION TARGET_DEVICE_OPTION PARTITION_IDS_OPTION PARTITION_SIZE_OPTION PARTITION_ID_OPTION PARTITIONS_AMOUNT_OPTION CLEAN_POL_NS_OPTION WAKE_UP_OPTION STALE_TIME_OPTION FLUSH_BUFFERS_OPTION ACTIVITY_THRESH_OPTION PROMO_POL_NS_OPTION PROMO_POL_VALUE THRESHOLD_OPTION TRIGGER_OPTION THRESHOLD_VALUE TRIGGER_VALUE THRESHOLD_VALUE_ERROR TRIGGER_VALUE_ERROR TARGET_DEVICE_OPTION FILESYSTEM_TYPE IO_CLASS_ID IO_CLASS_PRIORITY IO_CLASS_SIZE_MIN IO_CLASS_SIZE_MAX IO_CLASS_NAME IO_CLASS_CACHE_MODE CHECK_IS_NVME_ATOMIC TURN_OFF_NVME_DEVICE TURN_ON_NVME_DEVICE DEVICE_ID_OPTION DEMANDED_STATE_OPTION STAT_UNIT_OPTION STAT_NAME_OPTION STORE_CONFIG_OPTION CLEAN_POL_OPTION PROMO_POL_OPTION KERNEL_VER_OPTION KERNEL_MAJOR_OPTION FIO_MAJOR_OPTION FIO_MINOR_OPTION " # Specify ONLY required options here. The name of the variable should start with # uppercase function's name + "_REQUIRED_OPTIONS". export START_CACHE_REQUIRED_OPTIONS="CACHE_ID_OPTION CACHE_DEVICE_OPTION" export STOP_CACHE_REQUIRED_OPTIONS="CACHE_ID_OPTION" export ADD_CORE_REQUIRED_OPTIONS="CACHE_ID_OPTION CORE_DEVICE_OPTION" export TRY_ADD_CORE_REQUIRED_OPTIONS="CACHE_ID_OPTION CORE_ID_OPTION CORE_DEVICE_OPTION" export CHECK_DEVICE_STATE_REQUIRED_OPTIONS="DEVICE_ID_OPTION DEMANDED_STATE_OPTION" export REMOVE_CORE_REQUIRED_OPTIONS="CACHE_ID_OPTION CORE_ID_OPTION" export REMOVE_PARTITIONS_REQUIRED_OPTIONS="TARGET_DEVICE_OPTION" export FLUSH_CACHE_REQUIRED_OPTIONS="CACHE_ID_OPTION" export FLUSH_CORE_REQUIRED_OPTIONS="CACHE_ID_OPTION CORE_ID_OPTION" export SET_CLEANING_POLICY_REQUIRED_OPTIONS="CACHE_ID_OPTION CLEAN_POL_OPTION" export GET_CLEANING_POLICY_REQUIRED_OPTIONS="CACHE_ID_OPTION" export SET_PROMOTION_POLICY_REQUIRED_OPTIONS="CACHE_ID_OPTION PROMO_POL_OPTION" export CHECK_PROMOTION_POLICY_REQUIRED_OPTIONS="CACHE_ID_OPTION PROMO_POL_OPTION" export SET_FLUSH_PARAMS_REQUIRED_OPTIONS="CACHE_ID_OPTION CLEAN_POL_NS_OPTION" export GET_FLUSH_PARAMS_REQUIRED_OPTIONS="CACHE_ID_OPTION CLEAN_POL_NS_OPTION" export SET_PROMOTION_PARAMS_REQUIRED_OPTIONS="CACHE_ID_OPTION PROMO_POL_NS_OPTION" export CHECK_PROMOTION_PARAMS_REQUIRED_OPTIONS="CACHE_ID_OPTION PROMO_POL_NS_OPTION" export CHECK_IS_NVME_ATOMIC_REQUIRED_OPTIONS="DEVICE_OPTION" export CREATE_PARTITION_REQUIRED_OPTIONS="CACHE_ID_OPTION PARTITION_ID_OPTION PRIORITY_OPTION MIN_SIZE_OPTION MAX_SIZE_OPTION CLEANING_POLICY_OPTION" export MOUNT_CACHE_REQUIRED_OPTIONS="CACHE_ID_OPTION CORE_ID_OPTION" export MAKE_PRIMARY_PARTITIONS_REQUIRED_OPTIONS="TARGET_DEVICE_OPTION PARTITION_IDS_OPTION PARTITION_SIZE_OPTION" export MAKE_EXTENDED_PARTIION_REQUIRED_OPTIONS="TARGET_DEVICE_OPTION PARTITION_ID_OPTION PARTITION_SIZE_OPTION" export MAKE_LOGICAL_PARTIIONS_REQUIRED_OPTIONS="TARGET_DEVICE_OPTION PARTITIONS_AMOUNT_OPTION PARTITION_SIZE_OPTION" export MAKE_FILESYSTEM_REQUIRED_OPTIONS="TARGET_DEVICE_OPTION FILESYSTEM_TYPE" export TURN_OFF_DEVICE_REQUIRED_OPTIONS="CACHE_DEVICE_OPTION" export TURN_ON_DEVICE_REQUIRED_OPTIONS="CACHE_DEVICE_OPTION" export TURN_OFF_NVME_DEVICE_REQUIRED_OPTIONS="CACHE_DEVICE_OPTION" export TURN_ON_NVME_DEVICE_REQUIRED_OPTIONS="CACHE_DEVICE_OPTION" export START_DUAL_LEVEL_CACHE_REQUIRED_OPTIONS="CACHE_ID_OPTION CACHE_DEVICE_OPTION" export START_CACHE_REQUIRED_OPTIONS="CACHE_ID_OPTION CACHE_DEVICE_OPTION" export IO_CLASS_LIST_REQUIRED_OPTIONS="CACHE_ID_OPTION" export IO_CLASS_LOAD_REQUIRED_OPTIONS="CACHE_ID_OPTION CSV_FILE" export IO_CLASS_STATS_CSV_REQUIRED_OPTIONS="CACHE_ID_OPTION CSV_FILE" export IO_CLASS_EXT_ADD_REQUIRED_OPTIONS="CACHE_ID_OPTION IO_CLASS_ID IO_CLASS_PRIORITY IO_CLASS_SIZE_MIN IO_CLASS_SIZE_MAX IO_CLASS_NAME IO_CLASS_CACHE_MODE" export IO_CLASS_EXT_MODIFY_REQUIRED_OPTIONS="CACHE_ID_OPTION IO_CLASS_ID" export IO_CLASS_EXT_REMOVE_REQUIRED_OPTIONS="CACHE_ID_OPTION IO_CLASS_ID" export STATS_REQUIRED_OPTIONS="CACHE_ID_OPTION" export GET_STATS_VALUE_REQUIRED_OPTIONS="CACHE_ID_OPTION STAT_NAME_OPTION" export CHECK_KERNEL_VER_REQUIRED_OPTIONS="KERNEL_VER_OPTION KERNEL_MAJOR_OPTION" export CHECK_FIO_VER_REQUIRED_OPTIONS="FIO_MAJOR_OPTION FIO_MINOR_OPTION" # Clearing the variables below is not really needed, but it makes the whole # thing much more clear. Unlike the REQUIRED_OPTIONS, we specify all # possible parameters here for every function. # Please note that some options are shared between many functions, so # make sure the option is set to a correct value before invoking one # function after another. ############################################################ # OPTIONS SHARED BETWEEN ALL FUNCTIONS # ############################################################ NEGATIVE_TEST_OPTION="" SILENT_COMMAND_OPTION="" DONT_FAIL_ON_ERROR_OPTION="" ############################################################ # CLEAR CONFIG # ############################################################ STORE_CONFIG_OPTION="" ############################################################ # START CACHE # ############################################################ CACHE_ID_OPTION="" CACHE_DEVICE_OPTION="" # Optional CACHE_FORCE_OPTION="" CACHE_LOAD_METADATA_OPTION="" SEQ_CUTOFF_SIZE="" ############################################################ # STOP CACHE # ############################################################ CACHE_ID_OPTION="" # Optional CACHE_DONT_FLUSH_DATA_OPTION="" ############################################################ # ADD CORE # ############################################################ CACHE_ID_OPTION="" CORE_DEVICE_OPTION="" ############################################################ # REMOVE CORE # ############################################################ CACHE_ID_OPTION="" CORE_ID_OPTION="" ############################################################ # CHECK DEVICE STATE # ############################################################ DEVICE_ID_OPTION="" DEMANDED_STATE_OPTION="" ############################################################ # FORMAT NVME # ############################################################ NVME_FORMAT_MODE_OPTION="" DEVICE_OPTION="" NVME_FORMAT_FORCE_OPTION="" ############################################################ # CHECK_IS_NVME_ATOMIC # ############################################################ DEVICE_OPTION="" ############################################################ # INIT # ############################################################ NUMBER_OF_CACHE_PARTITIONS="" NUMBER_OF_CORE_PARTITIONS="" MAKE_FILE_SYSTEM="" CACHE_FORCE_OPTION="" CACHE_MODE_OPTION="" CACHE_LOAD_METADATA_OPTION="" ############################################################ # ITERATION # ############################################################ NUMBER_OF_CACHE_PARTITIONS="" NUMBER_OF_CORE_PARTITIONS="" MAKE_FILE_SYSTEM="" CACHE_FORCE_OPTION="" CACHE_MODE_OPTION="" CACHE_LOAD_METADATA_OPTION="" ############################################################ # DEINIT # ############################################################ NUMBER_OF_CACHE_PARTITIONS="" NUMBER_OF_CORE_PARTITIONS="" ############################################################ # FLUSH CACHE # ############################################################ CACHE_ID_OPTION="" ############################################################ # FLUSH CORE # ############################################################ CACHE_ID_OPTION="" CORE_ID_OPTION="" ############################################################ # MOUNT CACHE # ############################################################ CACHE_ID_OPTION="" CORE_ID_OPTION="" ############################################################ # MAKE PRIMARY PARTITIONS # ############################################################ TARGET_DEVICE_OPTION="" PARTITION_IDS_OPTION="" PARTITION_SIZE_OPTION="" ############################################################ # MAKE EXTENDED PARTITION # ############################################################ TARGET_DEVICE_OPTION="" PARTITION_ID_OPTION="" PARTITION_SIZE_OPTION="" ############################################################ # MAKE LOGICAL PARTITIONS # ############################################################ TARGET_DEVICE_OPTION="" PARTITION_SIZE_OPTION="" PARTITIONS_AMOUNT_OPTION="" ############################################################ # MAKE FILESYSTEM # ############################################################ TARGET_DEVICE_OPTION="" FILESYSTEM_TYPE="" ############################################################ # IO CLASS LIST # ############################################################ CACHE_ID_OPTION="" # Optional CSV_FILE="" ############################################################ # IO CLASS LOAD # ############################################################ CACHE_ID_OPTION="" CSV_FILE="" ############################################################ # IO CLASS EXT ADD # ############################################################ CACHE_ID_OPTION="" IO_CLASS_ID="" IO_CLASS_PRIORITY="" IO_CLASS_SIZE_MIN="" IO_CLASS_SIZE_MAX="" IO_CLASS_NAME="" IO_CLASS_CACHE_MODE="" ############################################################ # IO CLASS EXT MODIFY # ############################################################ CACHE_ID_OPTION="" IO_CLASS_ID="" #Optional IO_CLASS_PRIORITY="" IO_CLASS_SIZE_MIN="" IO_CLASS_SIZE_MAX="" IO_CLASS_NAME="" IO_CLASS_CACHE_MODE="" ############################################################ # IO CLASS EXT REMOVE # ############################################################ CACHE_ID_OPTION="" IO_CLASS_ID="" ############################################################ # IO CLASS STATS CSV # ############################################################ CACHE_ID_OPTION="" CSV_FILE="" ############################################################ # STATS # ############################################################ CACHE_ID_OPTION="" ############################################################ # GET_STATS_VALUE # ############################################################ DEVICE_ID_OPTION="" STAT_NAME_OPTION="" #Optional STAT_UNIT_OPTION="" CORE_ID_OPTION="" IO_CLASS_ID="" ############################################################ # SET_CLEANING_POLICY # ############################################################ DEVICE_ID_OPTION="" CLEAN_POLICY_OPTION="" ############################################################ # GET_CLEANING_POLICY # ############################################################ DEVICE_ID_OPTION="" ############################################################ # SET_FLUSH_PARAMS # ############################################################ DEVICE_ID_OPTION="" CLEAN_POLICY_NS_OPTION="" #Optional WAKE_UP_OPTION="" STALE_TIME_OPTION="" FLUSH_BUFFERS_OPTION="" ACTIVITY_THRESH_OPTION="" ############################################################ # GET_FLUSH_PARAMS # ############################################################ DEVICE_ID_OPTION="" CLEAN_POLICY_NS_OPTION="" ############################################################ # SET_PROMOTION_POLICY # ############################################################ DEVICE_ID_OPTION="" PROMO_POL_OPTION="" ############################################################ # CHECK_PROMOTION_POLICY # ############################################################ DEVICE_ID_OPTION="" PROMO_POL_OPTION="" ############################################################ # SET_PROMOTION_PARAMS # ############################################################ DEVICE_ID_OPTION="" PROMO_POL_NS_OPTION="" #Optional THRESHOLD_OPTION="" TRIGGER_OPTION="" ############################################################ # CHECK_PROMOTION_PARAMS # ############################################################ DEVICE_ID_OPTION="" PROMO_POL_NS_OPTION="" #Optional THRESHOLD_OPTION="" TRIGGER_OPTION="" ############################################################ # CHECK KERNEL VER # ############################################################ KERNEL_VER_OPTION="" KERNEL_MAJOR_OPTION="" ############################################################ # CHECK FIO VER # ############################################################ FIO_MAJOR_OPTION="" FIO_MINOR_OPTION="" ############################################################ # FUNCTIONS # ############################################################ # This function is what exports and sets all the options above. # All options should be automatically cleared after using them in API. clear_options() { for OPTION in $ALL_OPTIONS ; do export $OPTION="" done } # This should be used in all API/system functions to check if all required # options are set. It doesn't check the syntax at all - only if option is set. check_options() { FUNCTION_NAME=$(echo $1 | tr [:lower:] [:upper:]) OPTIONS_NAME="${FUNCTION_NAME}_REQUIRED_OPTIONS" OPTIONS_TO_CHECK="${!OPTIONS_NAME}" for OPTION in $OPTIONS_TO_CHECK ; do if [ -z "${!OPTION}" ] ; then echo -n "Required option $OPTION is not set " echo_red "[ERROR]" end_test 1 fi done } export -f clear_options export -f check_options export CAS_OPTIONS_LOADED="1" echo "--- Open CAS options library loaded ---"