From 7f9ab83d2476576d8d756ddc4f9cab9f6857f38b Mon Sep 17 00:00:00 2001 From: christianEQ Date: Sat, 6 Nov 2021 01:05:47 +0000 Subject: [PATCH] retrieve replid from IStorage rather than at load time Former-commit-id: c25323439ce400ca91b2193aa2f464e7b09978fd --- src/IStorage.h | 1 - src/replication.cpp | 20 ++++++++++++++++++-- src/server.cpp | 12 ++++++++---- src/storage/teststorageprovider.cpp | 5 ----- src/storage/teststorageprovider.h | 1 - 5 files changed, 26 insertions(+), 13 deletions(-) diff --git a/src/IStorage.h b/src/IStorage.h index cd5215b6d..ad956beb6 100644 --- a/src/IStorage.h +++ b/src/IStorage.h @@ -12,7 +12,6 @@ public: virtual ~IStorageFactory() {} virtual class IStorage *create(int db, key_load_iterator itr, void *privdata) = 0; virtual class IStorage *createMetadataDb() = 0; - virtual std::string getMetadata() const = 0; virtual const char *name() const = 0; virtual size_t totalDiskspaceUsed() const = 0; virtual bool FSlow() const = 0; diff --git a/src/replication.cpp b/src/replication.cpp index 4a6e8d5c8..b6607235c 100644 --- a/src/replication.cpp +++ b/src/replication.cpp @@ -3786,8 +3786,24 @@ void disconnectMaster(redisMaster *mi) void saveMasterStatusToStorage() { if (!g_pserver->m_pstorageFactory || !g_pserver->metadataDb) return; + + g_pserver->metadataDb->insert("repl-id", 7, g_pserver->replid, sizeof(g_pserver->replid), true); + if (g_pserver->fActiveReplica || (!listLength(g_pserver->masters) && g_pserver->repl_backlog)) { + g_pserver->metadataDb->insert("repl-stream-db", 14, g_pserver->replicaseldb == -1 ? 0 : &g_pserver->replicaseldb, + g_pserver->replicaseldb == -1 ? 0 : sizeof(g_pserver->replicaseldb), true); + } + + struct redisMaster *miFirst = (redisMaster*)(listLength(g_pserver->masters) ? listNodeValue(listFirst(g_pserver->masters)) : NULL); + + if (miFirst && miFirst->master) { + g_pserver->metadataDb->insert("repl-stream-db", 14, &miFirst->master->db->id, sizeof(miFirst->master->db->id), true); + } + else if (miFirst && miFirst->cached_master) { + g_pserver->metadataDb->insert("repl-stream-db", 14, &miFirst->cached_master->db->id, sizeof(miFirst->cached_master->db->id), true); + } + if (listLength(g_pserver->masters) == 0) { - g_pserver->metadataDb->insert("repl_masters", 12, (void*)"", 0, true); + g_pserver->metadataDb->insert("repl-masters", 12, (void*)"", 0, true); return; } sds val = sds(sdsempty()); @@ -3819,7 +3835,7 @@ void saveMasterStatusToStorage() mi->masterport); } } - g_pserver->metadataDb->insert("repl_masters", 12, (void*)val, sdslen(val), true); + g_pserver->metadataDb->insert("repl-masters", 12, (void*)val, sdslen(val), true); } /* Set replication to the specified master address and port. */ diff --git a/src/server.cpp b/src/server.cpp index d807f4d04..a3fe4773a 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -3985,11 +3985,15 @@ void initServer(void) { latencyMonitorInit(); if (g_pserver->m_pstorageFactory) { - std::string repl_masters = g_pserver->m_pstorageFactory->getMetadata(); - if (!repl_masters.empty()) { - serverLog(LL_NOTICE, "Loaded repl-masters from storage provider: %s", repl_masters); - } g_pserver->metadataDb = g_pserver->m_pstorageFactory->createMetadataDb(); + if (g_pserver->metadataDb) { + g_pserver->metadataDb->retrieve("repl-id", 7, [&](const char *, size_t, const void *data, size_t cb){ + if (cb == sizeof(g_pserver->replid)) { + serverLog(LL_NOTICE, "Retrieved repl-id: %s", (const char*)data); + memcpy(g_pserver->replid, data, cb); + } + }); + } } /* We have to initialize storage providers after the cluster has been initialized */ diff --git a/src/storage/teststorageprovider.cpp b/src/storage/teststorageprovider.cpp index 73a7ef01d..a287397c7 100644 --- a/src/storage/teststorageprovider.cpp +++ b/src/storage/teststorageprovider.cpp @@ -13,11 +13,6 @@ IStorage *TestStorageFactory::createMetadataDb() return metadataDb; } -std::string TestStorageFactory::getMetadata() const -{ - return ""; -} - const char *TestStorageFactory::name() const { return "TEST Storage Provider"; diff --git a/src/storage/teststorageprovider.h b/src/storage/teststorageprovider.h index 40f4a0f9d..2b2b1a38d 100644 --- a/src/storage/teststorageprovider.h +++ b/src/storage/teststorageprovider.h @@ -6,7 +6,6 @@ class TestStorageFactory : public IStorageFactory { virtual class IStorage *create(int db, key_load_iterator itr, void *privdata) override; virtual class IStorage *createMetadataDb() override; - virtual std::string getMetadata() const override; virtual const char *name() const override; virtual size_t totalDiskspaceUsed() const override { return 0; } virtual bool FSlow() const { return false; }