/** * @brief Read the configuration for the Cache inode layer * * @param[in] config Configuration file handle * @param[out] param Read parameters * * @retval CACHE_INODE_SUCCESS on success. * @retval CACHE_INODE_NOT_FOUND if stanza not present * @retval CACHE_INODE_INVALID_ARGUMENT otherwise */ cache_inode_status_t cache_inode_read_conf_parameter(config_file_t config, cache_inode_parameter_t *param) { int var_max; int var_index; int err; char *key_name; char *key_value; config_item_t block; /* Get the config BLOCK */ block = config_FindItemByName(config, CONF_LABEL_CACHE_INODE); if (block == NULL) { LogDebug(COMPONENT_CONFIG, "Cannot read item \"%s\" from configuration file", CONF_LABEL_CACHE_INODE); return CACHE_INODE_NOT_FOUND; } else if (config_ItemType(block) != CONFIG_ITEM_BLOCK) { /* Expected to be a block */ LogCrit(COMPONENT_CONFIG, "Item \"%s\" is expected to be a block", CONF_LABEL_CACHE_INODE); return CACHE_INODE_INVALID_ARGUMENT; } var_max = config_GetNbItems(block); for (var_index = 0; var_index < var_max; var_index++) { config_item_t item; item = config_GetItemByIndex(block, var_index); /* Get key's name */ err = config_GetKeyValue(item, &key_name, &key_value); if (err != 0) { LogCrit(COMPONENT_CONFIG, "Error reading key[%d] from section \"%s\" of " "configuration file.", var_index, CONF_LABEL_CACHE_INODE); return CACHE_INODE_INVALID_ARGUMENT; } else if (!strcasecmp(key_name, "NParts")) { param->nparts = atoi(key_value); } else if (!strcasecmp(key_name, "Attr_Expiration_Time")) { err = parse_cache_expire(¶m->expire_type_attr, ¶m->grace_period_attr, key_value); if (err != CACHE_INODE_SUCCESS) return err; } else if (!strcasecmp (key_name, "Use_Getattr_Directory_Invalidation")) { param->getattr_dir_invalidation = str_to_bool(key_value); } else if (!strcasecmp(key_name, "Entries_HWMark")) { param->entries_hwmark = atoi(key_value); } else if (!strcasecmp(key_name, "LRU_Run_Interval")) { param->lru_run_interval = atoi(key_value); } else if (!strcasecmp(key_name, "Cache_FDs")) { param->use_fd_cache = str_to_bool(key_value); } else if (!strcasecmp(key_name, "FD_Limit_Percent")) { param->fd_limit_percent = atoi(key_value); } else if (!strcasecmp(key_name, "FD_HWMark_Percent")) { param->fd_hwmark_percent = atoi(key_value); } else if (!strcasecmp(key_name, "FD_LWMark_Percent")) { param->fd_lwmark_percent = atoi(key_value); } else if (!strcasecmp(key_name, "Reaper_Work")) { param->reaper_work = atoi(key_value); } else if (!strcasecmp(key_name, "Biggest_Window")) { param->biggest_window = atoi(key_value); } else if (!strcasecmp(key_name, "Required_Progress")) { param->required_progress = atoi(key_value); } else if (!strcasecmp(key_name, "Futility_Count")) { param->futility_count = atoi(key_value); } else if (!strcasecmp(key_name, "DebugLevel") || !strcasecmp(key_name, "LogFile")) { LogWarn(COMPONENT_CONFIG, "Deprecated %s option %s=\'%s\'", CONF_LABEL_CACHE_INODE, key_name, key_value); } else { LogCrit(COMPONENT_CONFIG, "Unknown or unsettable key: %s (item %s)", key_name, CONF_LABEL_CACHE_INODE); return CACHE_INODE_INVALID_ARGUMENT; } } return CACHE_INODE_SUCCESS; }
/** * @brief Read the configuration for the Cache inode layer * * @param[in] config Configuration file handle * @param[out] param Read parameters * * @retval CACHE_INODE_SUCCESS on success. * @retval CACHE_INODE_NOT_FOUND if stanza not present * @retval CACHE_INODE_INVALID_ARGUMENT otherwise */ cache_inode_status_t cache_inode_read_conf_parameter(config_file_t config, cache_inode_parameter_t *param) { int var_max; int var_index; int err; char *key_name; char *key_value; config_item_t block; int DebugLevel = -1; char *LogFile = NULL; /* Is the config tree initialized ? */ if(config == NULL || param == NULL) return CACHE_INODE_INVALID_ARGUMENT; /* Get the config BLOCK */ if((block = config_FindItemByName(config, CONF_LABEL_CACHE_INODE)) == NULL) { LogDebug(COMPONENT_CONFIG, "Cannot read item \"%s\" from configuration file", CONF_LABEL_CACHE_INODE); return CACHE_INODE_NOT_FOUND; } else if(config_ItemType(block) != CONFIG_ITEM_BLOCK) { /* Expected to be a block */ LogCrit(COMPONENT_CONFIG, "Item \"%s\" is expected to be a block", CONF_LABEL_CACHE_INODE); return CACHE_INODE_INVALID_ARGUMENT; } var_max = config_GetNbItems(block); for(var_index = 0; var_index < var_max; var_index++) { config_item_t item; item = config_GetItemByIndex(block, var_index); /* Get key's name */ if((err = config_GetKeyValue(item, &key_name, &key_value)) != 0) { LogCrit(COMPONENT_CONFIG, "Error reading key[%d] from section \"%s\" of configuration file.", var_index, CONF_LABEL_CACHE_INODE); return CACHE_INODE_INVALID_ARGUMENT; } else if(!strcasecmp(key_name, "Attr_Expiration_Time")) { err = parse_cache_expire(¶m->expire_type_attr, ¶m->grace_period_attr, key_value); if(err != CACHE_INODE_SUCCESS) return err; } else if(!strcasecmp(key_name, "Symlink_Expiration_Time")) { err = parse_cache_expire(¶m->expire_type_link, ¶m->grace_period_link, key_value); if(err != CACHE_INODE_SUCCESS) return err; } else if(!strcasecmp(key_name, "Directory_Expiration_Time")) { err = parse_cache_expire(¶m->expire_type_dirent, ¶m->grace_period_dirent, key_value); if(err != CACHE_INODE_SUCCESS) return err; } else if(!strcasecmp(key_name, "Use_Getattr_Directory_Invalidation")) { param->getattr_dir_invalidation = StrToBoolean(key_value); } else if(!strcasecmp(key_name, "Use_Test_Access")) { param->use_test_access = atoi(key_value); } else if(!strcasecmp( key_name, "Use_FSAL_Hash" ) ) { param->use_fsal_hash = StrToBoolean(key_value); } else if(!strcasecmp(key_name, "DebugLevel")) { DebugLevel = ReturnLevelAscii(key_value); if(DebugLevel == -1) { LogDebug(COMPONENT_CACHE_INODE, "cache_inode_read_conf: ERROR: Invalid debug level name: \"%s\".", key_value); return CACHE_INODE_INVALID_ARGUMENT; } } else if(!strcasecmp(key_name, "LogFile")) { LogFile = key_value; } else { LogCrit(COMPONENT_CONFIG, "Unknown or unsettable key: %s (item %s)", key_name, CONF_LABEL_CACHE_INODE); return CACHE_INODE_INVALID_ARGUMENT; } } /* init logging */ if(LogFile) SetComponentLogFile(COMPONENT_CACHE_INODE, LogFile); if(DebugLevel > -1) SetComponentLogLevel(COMPONENT_CACHE_INODE, DebugLevel); return CACHE_INODE_SUCCESS; } /* cache_inode_read_conf_parameter */