Skip to content

Commit

Permalink
Library reloading on SIGHUP
Browse files Browse the repository at this point in the history
  • Loading branch information
veloman-yunkan committed Nov 21, 2021
1 parent 7659efa commit 2f24407
Showing 1 changed file with 23 additions and 25 deletions.
48 changes: 23 additions & 25 deletions src/server/kiwix-serve.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
#include <kiwix/server.h>
#include <kiwix/name_mapper.h>
#include <kiwix/tools.h>
#include <kiwix/reloadable_library.h>

#ifdef _WIN32
# include <windows.h>
Expand Down Expand Up @@ -99,6 +100,7 @@ string loadCustomTemplate (string customIndexPath) {
}

volatile sig_atomic_t waiting = false;
volatile sig_atomic_t library_reload_requested = false;

#ifndef _WIN32
void handle_sigterm(int signum)
Expand All @@ -109,6 +111,11 @@ void handle_sigterm(int signum)
waiting = false;
}

void handle_sighup(int signum)
{
library_reload_requested = true;
}

typedef void (*SignalHandler)(int);

void set_signal_handler(int sig, SignalHandler handler)
Expand All @@ -123,6 +130,7 @@ void setup_sighandlers()
{
set_signal_handler(SIGTERM, &handle_sigterm);
set_signal_handler(SIGINT, &handle_sigterm);
set_signal_handler(SIGHUP, &handle_sighup);
}
#endif

Expand Down Expand Up @@ -243,31 +251,15 @@ int main(int argc, char** argv)
}

/* Setup the library manager and get the list of books */
kiwix::Manager manager(&library);
kiwix::LibraryManipulator libraryManipulator(&library);
std::shared_ptr<kiwix::ReloadableLibrary> reloadableLibrary;
if (libraryFlag) {
vector<string> libraryPaths = kiwix::split(libraryPath, ";");
vector<string>::iterator itr;

for (itr = libraryPaths.begin(); itr != libraryPaths.end(); ++itr) {
if (!itr->empty()) {
bool retVal = false;

try {
string libraryPath
= kiwix::isRelativePath(*itr)
? kiwix::computeAbsolutePath(kiwix::getCurrentDirectory(), *itr)
: *itr;
retVal = manager.readFile(libraryPath, true, trustlibrary);
} catch (...) {
retVal = false;
}

if (!retVal) {
cerr << "Unable to open the XML library file '" << *itr << "'."
<< endl;
exit(1);
}
}
const vector<string> libraryPaths = kiwix::split(libraryPath, ";");
try {
reloadableLibrary.reset(new kiwix::ReloadableLibrary(libraryPaths, &libraryManipulator, trustlibrary));
} catch ( const std::runtime_error& err ) {
cerr << err.what() << endl;
exit(1);
}

/* Check if the library is not empty (or only remote books)*/
Expand All @@ -276,6 +268,7 @@ int main(int argc, char** argv)
<< "' is empty (or has only remote books)." << endl;
}
} else {
kiwix::Manager manager(&library);
std::vector<std::string>::iterator it;
for (it = zimPathes.begin(); it != zimPathes.end(); it++) {
if (!manager.addBookFromPath(*it, *it, "", false)) {
Expand Down Expand Up @@ -305,7 +298,7 @@ int main(int argc, char** argv)
}
#endif

kiwix::HumanReadableNameMapper nameMapper(library, noDateAliasesFlag);
kiwix::NameMapperProxy nameMapper(library, noDateAliasesFlag);
kiwix::Server server(&library, &nameMapper);

if (!customIndexPath.empty()) {
Expand Down Expand Up @@ -361,6 +354,11 @@ int main(int argc, char** argv)
}

kiwix::sleep(1000);
if ( library_reload_requested && reloadableLibrary ) {
reloadableLibrary->reload();
nameMapper.update();
library_reload_requested = false;
}
} while (waiting);

/* Stop the daemon */
Expand Down

0 comments on commit 2f24407

Please sign in to comment.