Create and read persisted config dir
The persisted configuration directory is created and/or read when MaxScale starts. This allows the servers created at runtime to be recreated when MaxScale is restarted.
This commit is contained in:
@ -541,6 +541,46 @@ static bool config_load_dir(const char *dir, DUPLICATE_CONTEXT *dcontext, CONFIG
|
|||||||
return rv == 0;
|
return rv == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if a directory exists
|
||||||
|
*
|
||||||
|
* This function also logs warnings if the directory cannot be accessed or if
|
||||||
|
* the file is not a directory.
|
||||||
|
* @param dir Directory to check
|
||||||
|
* @return True if the file is an existing directory
|
||||||
|
*/
|
||||||
|
static bool is_directory(const char *dir)
|
||||||
|
{
|
||||||
|
bool rval = false;
|
||||||
|
struct stat st;
|
||||||
|
if (stat(dir, &st) == -1)
|
||||||
|
{
|
||||||
|
if (errno == ENOENT)
|
||||||
|
{
|
||||||
|
MXS_NOTICE("%s does not exist, not reading.", dir);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
char errbuf[MXS_STRERROR_BUFLEN];
|
||||||
|
MXS_WARNING("Could not access %s, not reading: %s",
|
||||||
|
dir, strerror_r(errno, errbuf, sizeof(errbuf)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (S_ISDIR(st.st_mode))
|
||||||
|
{
|
||||||
|
rval = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
MXS_WARNING("%s exists, but it is not a directory. Ignoring.", dir);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return rval;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Load the specified configuration file for MaxScale
|
* @brief Load the specified configuration file for MaxScale
|
||||||
*
|
*
|
||||||
@ -574,30 +614,18 @@ config_load_and_process(const char* filename, bool (*process_config)(CONFIG_CONT
|
|||||||
|
|
||||||
rval = true;
|
rval = true;
|
||||||
|
|
||||||
struct stat st;
|
if (is_directory(dir))
|
||||||
if (stat(dir, &st) == -1)
|
|
||||||
{
|
{
|
||||||
if (errno == ENOENT)
|
rval = config_load_dir(dir, &dcontext, &ccontext);
|
||||||
{
|
|
||||||
MXS_NOTICE("%s does not exist, not reading.", dir);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
char errbuf[MXS_STRERROR_BUFLEN];
|
|
||||||
MXS_WARNING("Could not access %s, not reading: %s",
|
|
||||||
dir, strerror_r(errno, errbuf, sizeof(errbuf)));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
|
||||||
|
/** Create the persisted configuration directory if it doesn't exist */
|
||||||
|
const char* persist_cnf = get_config_persistdir();
|
||||||
|
mxs_mkdir_all(persist_cnf, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
|
||||||
|
|
||||||
|
if (is_directory(persist_cnf))
|
||||||
{
|
{
|
||||||
if (S_ISDIR(st.st_mode))
|
rval = config_load_dir(persist_cnf, &dcontext, &ccontext);
|
||||||
{
|
|
||||||
rval = config_load_dir(dir, &dcontext, &ccontext);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
MXS_WARNING("%s exists, but it is not a directory. Ignoring.", dir);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (rval)
|
if (rval)
|
||||||
|
|||||||
Reference in New Issue
Block a user