From e2e1edc8b0c495ee9e494b5338776b1b21e45323 Mon Sep 17 00:00:00 2001 From: Roxanne Skelly Date: Wed, 27 Feb 2019 12:53:30 -0800 Subject: [PATCH] Add test logging, stats, and force domain pings to timer thread Test code for load testing only. --- domain-server/src/DomainServer.cpp | 5 ++++ libraries/networking/src/DomainHandler.cpp | 2 +- libraries/networking/src/NodeList.cpp | 24 ++++++++++++++++++- libraries/networking/src/NodeList.h | 3 +++ .../networking/src/ThreadedAssignment.cpp | 14 ++++++++++- libraries/networking/src/ThreadedAssignment.h | 2 ++ 6 files changed, 47 insertions(+), 3 deletions(-) diff --git a/domain-server/src/DomainServer.cpp b/domain-server/src/DomainServer.cpp index 258038b8f1..052648032d 100644 --- a/domain-server/src/DomainServer.cpp +++ b/domain-server/src/DomainServer.cpp @@ -1055,6 +1055,11 @@ void DomainServer::processListRequestPacket(QSharedPointer mess _gatekeeper.cleanupICEPeerForNode(sendingNode->getUUID()); } + if (sendingNode->getType() == NodeType::AvatarMixer) { + qWarning() << "Avatar Mixer Node Report in."; + } + + // guard against patched agents asking to hear about other agents auto safeInterestSet = nodeRequestData.interestList.toSet(); if (sendingNode->getType() == NodeType::Agent) { diff --git a/libraries/networking/src/DomainHandler.cpp b/libraries/networking/src/DomainHandler.cpp index 2513510b05..af03a3e061 100644 --- a/libraries/networking/src/DomainHandler.cpp +++ b/libraries/networking/src/DomainHandler.cpp @@ -545,7 +545,7 @@ void DomainHandler::processDomainServerConnectionDeniedPacket(QSharedPointer MAX_SILENT_DOMAIN_SERVER_CHECK_INS) { // we haven't heard back from DS in MAX_SILENT_DOMAIN_SERVER_CHECK_INS // so emit our signal that says that diff --git a/libraries/networking/src/NodeList.cpp b/libraries/networking/src/NodeList.cpp index 5e8909db2b..9f1f674501 100644 --- a/libraries/networking/src/NodeList.cpp +++ b/libraries/networking/src/NodeList.cpp @@ -246,6 +246,7 @@ void NodeList::processICEPingPacket(QSharedPointer message) { void NodeList::reset(bool skipDomainHandlerReset) { if (thread() != QThread::currentThread()) { + QMetaObject::invokeMethod(this, "reset", Q_ARG(bool, skipDomainHandlerReset)); return; } @@ -291,16 +292,30 @@ void NodeList::addSetOfNodeTypesToNodeInterestSet(const NodeSet& setOfNodeTypes) void NodeList::sendDomainServerCheckIn() { + static bool foo = false; + + qWarning() << "Send Domain Server Checkin"; + if (!_sendDomainServerCheckInEnabled) { qCDebug(networking) << "Refusing to send a domain-server check in while it is disabled."; return; } - if (thread() != QThread::currentThread()) { + _globalPostedEvents = getGlobalPostedEventCount(); + + if (false && thread() != QThread::currentThread()) { + qWarning() << "Transition threads on send domain server checkin"; QMetaObject::invokeMethod(this, "sendDomainServerCheckIn", Qt::QueuedConnection); + + if (foo) { + qWarning() << "swapping threads before previous call completed"; + } + + foo = true; return; } + foo = false; if (_isShuttingDown) { qCDebug(networking) << "Refusing to send a domain-server check in while shutting down."; return; @@ -433,10 +448,17 @@ void NodeList::sendDomainServerCheckIn() { checkinCount = std::min(checkinCount, MAX_CHECKINS_TOGETHER); for (int i = 1; i < checkinCount; ++i) { auto packetCopy = domainPacket->createCopy(*domainPacket); + qWarning() << "Domain List/Connect"; sendPacket(std::move(packetCopy), _domainHandler.getSockAddr()); } + qWarning() << "Domain List/Connect"; sendPacket(std::move(domainPacket), _domainHandler.getSockAddr()); + } else if (_domainHandler.getIP().isNull()) { + qWarning() << "Domain Handler IP Is Null"; + } + else { + qWarning() << "Checkin packet timed out."; } } diff --git a/libraries/networking/src/NodeList.h b/libraries/networking/src/NodeList.h index e135bc937d..71b17696d3 100644 --- a/libraries/networking/src/NodeList.h +++ b/libraries/networking/src/NodeList.h @@ -100,6 +100,8 @@ public: virtual Node::LocalID getDomainLocalID() const override { return _domainHandler.getLocalID(); } virtual HifiSockAddr getDomainSockAddr() const override { return _domainHandler.getSockAddr(); } + unsigned getGlobalPostedEventCount() { return _globalPostedEvents; } + public slots: void reset(bool skipDomainHandlerReset = false); void resetFromDomainHandler() { reset(true); } @@ -171,6 +173,7 @@ private: bool _isShuttingDown { false }; QTimer _keepAlivePingTimer; bool _requestsDomainListData { false }; + unsigned _globalPostedEvents { 0 }; bool _sendDomainServerCheckInEnabled { true }; diff --git a/libraries/networking/src/ThreadedAssignment.cpp b/libraries/networking/src/ThreadedAssignment.cpp index bdba47f0ed..c14bbf8d2c 100644 --- a/libraries/networking/src/ThreadedAssignment.cpp +++ b/libraries/networking/src/ThreadedAssignment.cpp @@ -37,6 +37,7 @@ ThreadedAssignment::ThreadedAssignment(ReceivedMessage& message) : // if the NL tells us we got a DS response, clear our member variable of queued check-ins auto nodeList = DependencyManager::get(); connect(nodeList.data(), &NodeList::receivedDomainServerList, this, &ThreadedAssignment::clearQueuedCheckIns); + timestamp = p_high_resolution_clock::now(); } void ThreadedAssignment::setFinished(bool isFinished) { @@ -102,6 +103,14 @@ void ThreadedAssignment::addPacketStatsAndSendStatsPacket(QJsonObject statsObjec statsObject["io_stats"] = ioStats; + QJsonObject assignmentStats; + assignmentStats["numQueuedCheckIns"] = _numQueuedCheckIns; + + assignmentStats["globalPostedEventCount"] = (long long)nodeList->getGlobalPostedEventCount(); + + assignmentStats["domainReportDuration"] = domainServerReportPerSec.count(); + statsObject["assignmentStats"] = assignmentStats; + nodeList->sendStatsToDomainServer(statsObject); } @@ -113,13 +122,16 @@ void ThreadedAssignment::sendStatsPacket() { void ThreadedAssignment::checkInWithDomainServerOrExit() { // verify that the number of queued check-ins is not >= our max // the number of queued check-ins is cleared anytime we get a response from the domain-server + + timestamp = p_high_resolution_clock::now(); + if (_numQueuedCheckIns >= MAX_SILENT_DOMAIN_SERVER_CHECK_INS) { qCDebug(networking) << "At least" << MAX_SILENT_DOMAIN_SERVER_CHECK_INS << "have been queued without a response from domain-server" << "Stopping the current assignment"; stop(); } else { auto nodeList = DependencyManager::get(); - QMetaObject::invokeMethod(nodeList.data(), "sendDomainServerCheckIn"); + QMetaObject::invokeMethod(nodeList.data(), "sendDomainServerCheckIn", Qt::DirectConnection); // increase the number of queued check ins _numQueuedCheckIns++; diff --git a/libraries/networking/src/ThreadedAssignment.h b/libraries/networking/src/ThreadedAssignment.h index e76533b2a1..c30ef4169f 100644 --- a/libraries/networking/src/ThreadedAssignment.h +++ b/libraries/networking/src/ThreadedAssignment.h @@ -48,6 +48,8 @@ protected: QTimer _domainServerTimer; QTimer _statsTimer; int _numQueuedCheckIns { 0 }; + p_high_resolution_clock::time_point timestamp; + std::chrono::milliseconds domainServerReportPerSec{ 0 }; protected slots: void domainSettingsRequestFailed();