retrieve replid from IStorage rather than at load time
Former-commit-id: c25323439ce400ca91b2193aa2f464e7b09978fd
This commit is contained in:
parent
ebb0e08d94
commit
7f9ab83d24
@ -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;
|
||||
|
@ -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. */
|
||||
|
@ -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 */
|
||||
|
@ -13,11 +13,6 @@ IStorage *TestStorageFactory::createMetadataDb()
|
||||
return metadataDb;
|
||||
}
|
||||
|
||||
std::string TestStorageFactory::getMetadata() const
|
||||
{
|
||||
return "";
|
||||
}
|
||||
|
||||
const char *TestStorageFactory::name() const
|
||||
{
|
||||
return "TEST Storage Provider";
|
||||
|
@ -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; }
|
||||
|
Loading…
x
Reference in New Issue
Block a user