2
0
mirror of https://github.com/inspircd/inspircd.git synced 2025-04-01 13:50:04 -04:00

Fix multiple burst notifications in a better way (force EOB was quite often hitting in too quickly, will only trigger on servers not EOB after 60 seconds now)

git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@9358 e03df62e-2008-0410-955e-edbf42e46eb7
This commit is contained in:
w00t 2008-04-05 16:26:03 +00:00
parent 645f0aa634
commit d21682a3a0
2 changed files with 21 additions and 16 deletions
src/modules/m_spanningtree

@ -218,17 +218,25 @@ void ModuleSpanningTree::DoPingChecks(time_t curtime)
} }
} }
/* /*
* Cancel remote burst mode on any servers which still have it enabled due to latency/lack of data. * Cancel remote burst mode on any servers which still have it enabled due to latency/lack of data.
* This prevents lost REMOTECONNECT notices * This prevents lost REMOTECONNECT notices
* XXX this should probably not do this until server has been bursting for, say, 60 seconds or something
*/ */
timeval t;
gettimeofday(&t, NULL);
long ts = (t.tv_sec * 1000) + (t.tv_usec / 1000);
for (server_hash::iterator i = Utils->serverlist.begin(); i != Utils->serverlist.end(); i++) for (server_hash::iterator i = Utils->serverlist.begin(); i != Utils->serverlist.end(); i++)
{ {
if (i->second->bursting) if (i->second->bursting)
{ {
ServerInstance->SNO->WriteToSnoMask('l',"Server \002%s\002 has not finished burst, forcing end of burst.", i->second->GetName().c_str()); unsigned long bursttime = ts - i->second->StartBurst;
i->second->FinishBurst(); if (bursttime > 60000) // A minute
{
ServerInstance->SNO->WriteToSnoMask('l',"Server \002%s\002 has not finished burst, forcing end of burst.", i->second->GetName().c_str());
i->second->FinishBurst();
}
} }
} }
} }

@ -142,19 +142,16 @@ std::string& TreeServer::GetID()
void TreeServer::FinishBurst() void TreeServer::FinishBurst()
{ {
if (!this->bursting) this->bursting = false;
{ ServerInstance->XLines->ApplyLines();
this->bursting = false; timeval t;
ServerInstance->XLines->ApplyLines(); gettimeofday(&t, NULL);
timeval t; long ts = (t.tv_sec * 1000) + (t.tv_usec / 1000);
gettimeofday(&t, NULL); unsigned long bursttime = ts - this->StartBurst;
long ts = (t.tv_sec * 1000) + (t.tv_usec / 1000); ServerInstance->SNO->WriteToSnoMask('l', "Received end of netburst from \2%s\2 (burst time: %lu %s)", ServerName.c_str(),
unsigned long bursttime = ts - this->StartBurst; (bursttime > 1000 ? bursttime / 1000 : bursttime), (bursttime > 1000 ? "secs" : "msecs"));
ServerInstance->SNO->WriteToSnoMask('l', "Received end of netburst from \2%s\2 (burst time: %lu %s)", ServerName.c_str(), Event rmode((char*)ServerName.c_str(), (Module*)Utils->Creator, "new_server");
(bursttime > 1000 ? bursttime / 1000 : bursttime), (bursttime > 1000 ? "secs" : "msecs")); rmode.Send(ServerInstance);
Event rmode((char*)ServerName.c_str(), (Module*)Utils->Creator, "new_server");
rmode.Send(ServerInstance);
}
} }
void TreeServer::SetID(const std::string &id) void TreeServer::SetID(const std::string &id)