Properly catch and handle database errors

Do not use a singleton for the database.

fix #3203
This commit is contained in:
louiz’
2016-07-12 00:31:57 +02:00
parent 03feb403f8
commit 4c1b9abe7e
6 changed files with 47 additions and 40 deletions
+18 -1
View File
@@ -1,11 +1,28 @@
#include <utils/reload.hpp>
#include <database/database.hpp>
#include <config/config.hpp>
#include <utils/xdg.hpp>
#include <logger/logger.hpp>
void open_database()
{
const auto db_filename = Config::get("db_name", xdg_data_path("biboumi.sqlite"));
log_info("Opening database: ", db_filename);
Database::open(db_filename);
log_info("database successfully opened.");
}
void reload_process()
{
Config::read_conf();
// Destroy the logger instance, to be recreated the next time a log
// line needs to be written
Logger::instance().reset();
log_debug("Configuration and logger reloaded.");
log_info("Configuration and logger reloaded.");
try {
open_database();
} catch (const litesql::DatabaseError&) {
log_warning("Re-using the previous database.");
}
}
+1 -7
View File
@@ -1,10 +1,4 @@
#pragma once
/**
* Reload the server's configuration, and close the logger (so that it
* closes its files etc, to take into account the new configuration)
*/
void open_database();
void reload_process();