Initialize the storage provider after daemonize

Former-commit-id: 5910af623b024b087c69b17ec32ce351fc4d00c2
This commit is contained in:
John Sully 2020-01-30 22:26:44 -05:00
parent 6587134416
commit 8a1cca9756
2 changed files with 22 additions and 6 deletions

View File

@ -293,15 +293,20 @@ void queueLoadModule(sds path, sds *argv, int argc) {
listAddNodeTail(g_pserver->loadmodule_queue,loadmod);
}
static bool initializeStorageProvider(sds *argv, int argc, const char **err)
sds g_sdsProvider = nullptr;
sds g_sdsArgs = nullptr;
bool initializeStorageProvider(const char **err)
{
bool fTest = false;
if (!strcasecmp(argv[0], "flash") && argc == 2)
if (g_sdsProvider == nullptr)
return true;
if (!strcasecmp(g_sdsProvider, "flash") && g_sdsArgs != nullptr)
{
// Create The Storage Factory (if necessary)
g_pserver->m_pstorageFactory = CreateRocksDBStorageFactory(argv[1], cserver.dbnum);
g_pserver->m_pstorageFactory = CreateRocksDBStorageFactory(g_sdsArgs, cserver.dbnum);
}
else if (!strcasecmp(argv[0], "test") && argc == 1)
else if (!strcasecmp(g_sdsProvider, "test") && g_sdsArgs == nullptr)
{
g_pserver->m_pstorageFactory = new (MALLOC_LOCAL) TestStorageFactory();
fTest = true;
@ -578,8 +583,9 @@ void loadServerConfigFromString(char *config) {
} else if (!strcasecmp(argv[0],"rdbfuzz-mode")) {
// NOP, handled in main
} else if (!strcasecmp(argv[0],"storage-provider") && argc >= 2) {
if (!initializeStorageProvider(argv+1, argc-1, &err))
goto loaderr;
g_sdsProvider = sdsdup(argv[1]);
if (argc > 2)
g_sdsArgs = sdsdup(argv[2]);
} else if (!strcasecmp(argv[0],"enable-pro") && (argc == 1 || argc == 2)) {
if (argc == 2)
{

View File

@ -5357,6 +5357,8 @@ static void validateConfiguration()
}
}
bool initializeStorageProvider(const char **err);
int main(int argc, char **argv) {
struct timeval tv;
int j;
@ -5530,6 +5532,14 @@ int main(int argc, char **argv) {
int background = cserver.daemonize && !cserver.supervised;
if (background) daemonize();
const char *err;
if (!initializeStorageProvider(&err))
{
serverLog(LL_WARNING, "Failed to initialize storage provider: %s",err);
exit(EXIT_FAILURE);
}
initServer();
initNetworking(cserver.cthreads > 1 /* fReusePort */);