MCPcopy Create free account
hub / github.com/Snapchat/KeyDB / initServer

Function initServer

src/server.cpp:3912–4130  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

3910}
3911
3912void initServer(void) {
3913 signal(SIGHUP, SIG_IGN);
3914 signal(SIGPIPE, SIG_IGN);
3915 setupSignalHandlers();
3916 makeThreadKillable();
3917
3918 zfree(g_pserver->db); // initServerConfig created a dummy array, free that now
3919 g_pserver->db = (redisDb**)zmalloc(sizeof(redisDb*)*cserver.dbnum, MALLOC_LOCAL);
3920
3921 /* Create the Redis databases, and initialize other internal state. */
3922 if (g_pserver->m_pstorageFactory == nullptr) {
3923 for (int j = 0; j < cserver.dbnum; j++) {
3924 g_pserver->db[j] = new (MALLOC_LOCAL) redisDb();
3925 g_pserver->db[j]->initialize(j);
3926 }
3927 } else {
3928 // Read FLASH metadata and load the appropriate dbid into each databse index, as each DB index can have different dbid mapped due to the swapdb command.
3929 g_pserver->metadataDb = g_pserver->m_pstorageFactory->createMetadataDb();
3930 for (int idb = 0; idb < cserver.dbnum; ++idb)
3931 {
3932 int dbid = idb;
3933 std::string dbid_key = "db-" + std::to_string(idb);
3934 g_pserver->metadataDb->retrieve(dbid_key.c_str(), dbid_key.length(), [&](const char *, size_t, const void *data, size_t){
3935 dbid = *(int*)data;
3936 });
3937
3938 g_pserver->db[idb] = new (MALLOC_LOCAL) redisDb();
3939 g_pserver->db[idb]->initialize(dbid);
3940 }
3941 }
3942
3943 for (int i = 0; i < MAX_EVENT_LOOPS; ++i)
3944 {
3945 g_pserver->rgthreadvar[i].rgdbSnapshot = (const redisDbPersistentDataSnapshot**)zcalloc(sizeof(redisDbPersistentDataSnapshot*)*cserver.dbnum, MALLOC_LOCAL);
3946 serverAssert(g_pserver->rgthreadvar[i].rgdbSnapshot != nullptr);
3947 }
3948 g_pserver->modulethreadvar.rgdbSnapshot = (const redisDbPersistentDataSnapshot**)zcalloc(sizeof(redisDbPersistentDataSnapshot*)*cserver.dbnum, MALLOC_LOCAL);
3949 serverAssert(g_pserver->modulethreadvar.rgdbSnapshot != nullptr);
3950
3951 serverAssert(g_pserver->rgthreadvar[0].rgdbSnapshot != nullptr);
3952
3953 /* Fixup Master Client Database */
3954 listIter li;
3955 listNode *ln;
3956 listRewind(g_pserver->masters, &li);
3957 while ((ln = listNext(&li)))
3958 {
3959 redisMaster *mi = (redisMaster*)listNodeValue(ln);
3960 serverAssert(mi->master == nullptr);
3961 if (mi->cached_master != nullptr)
3962 selectDb(mi->cached_master, 0);
3963 }
3964
3965 g_pserver->aof_state = g_pserver->aof_enabled ? AOF_ON : AOF_OFF;
3966 g_pserver->hz = g_pserver->config_hz;
3967 cserver.pid = getpid();
3968 g_pserver->in_fork_child = CHILD_TYPE_NONE;
3969 cserver.main_thread_id = pthread_self();

Callers 1

mainFunction · 0.85

Calls 15

setupSignalHandlersFunction · 0.85
makeThreadKillableFunction · 0.85
zfreeFunction · 0.85
zmallocFunction · 0.85
zcallocFunction · 0.85
listRewindFunction · 0.85
listNextFunction · 0.85
selectDbFunction · 0.85
raxNewFunction · 0.85
listCreateFunction · 0.85
zmalloc_get_memory_sizeFunction · 0.85
tlsConfigureFunction · 0.85

Tested by

no test coverage detected