RREPLAY PERF: The UUID stack is unnecessary, RREPLAY itself can detect the cycle and call cancel()

Former-commit-id: b276d803d49339eb30879a3d170ebc480d9430bd
This commit is contained in:
John Sully 2019-04-19 19:36:47 -04:00
parent 9ac793aabb
commit 359e871737

View File

@ -3145,22 +3145,15 @@ redisMaster *MasterInfoFromClient(client *c)
class ReplicaNestState class ReplicaNestState
{ {
public: public:
bool FPush(unsigned char *uuid) bool FPush()
{ {
if (m_cnesting == REPLAY_MAX_NESTING) { if (m_cnesting == REPLAY_MAX_NESTING) {
m_fCancelled = true; m_fCancelled = true;
return false; // overflow return false; // overflow
} }
for (int i = 0; i < m_cnesting; ++i)
{
if (FUuidEqual(m_stackUUID[i], uuid)) {
m_fCancelled = true;
return false; // cycle detected
}
}
if (m_cnesting == 0) if (m_cnesting == 0)
m_fCancelled = false; m_fCancelled = false;
memcpy(m_stackUUID[m_cnesting], uuid, UUID_BINARY_LEN);
++m_cnesting; ++m_cnesting;
return true; return true;
} }
@ -3188,7 +3181,6 @@ public:
private: private:
int m_cnesting = 0; int m_cnesting = 0;
bool m_fCancelled = false; bool m_fCancelled = false;
unsigned char m_stackUUID[REPLAY_MAX_NESTING][UUID_BINARY_LEN];
}; };
void replicaReplayCommand(client *c) void replicaReplayCommand(client *c)
@ -3239,7 +3231,7 @@ void replicaReplayCommand(client *c)
return; // Our own commands have come back to us. Ignore them. return; // Our own commands have come back to us. Ignore them.
} }
if (!s_pstate->FPush(uuid)) if (!s_pstate->FPush())
return; return;
// OK We've recieved a command lets execute // OK We've recieved a command lets execute