From fd051310daa4006acb98412971a49def62f38a72 Mon Sep 17 00:00:00 2001 From: wangyix Date: Tue, 1 Jul 2014 12:01:51 -0700 Subject: [PATCH] prune missing set before constructing nack packets; make MAX_REASONALBE_SEQUENCE_GAP global and sentPacketHistory to use that value as the default history size --- .../src/octree/OctreeInboundPacketProcessor.cpp | 6 +++++- .../src/octree/OctreeInboundPacketProcessor.h | 1 + assignment-client/src/octree/OctreeQueryNode.cpp | 2 +- interface/src/Application.cpp | 8 ++++---- libraries/networking/src/SentPacketHistory.h | 4 +++- libraries/networking/src/SequenceNumberStats.cpp | 1 - libraries/networking/src/SequenceNumberStats.h | 6 +++--- libraries/octree/src/OctreeSceneStats.h | 1 + 8 files changed, 18 insertions(+), 11 deletions(-) diff --git a/assignment-client/src/octree/OctreeInboundPacketProcessor.cpp b/assignment-client/src/octree/OctreeInboundPacketProcessor.cpp index 3d2ca6ddc3..7716f9e2aa 100644 --- a/assignment-client/src/octree/OctreeInboundPacketProcessor.cpp +++ b/assignment-client/src/octree/OctreeInboundPacketProcessor.cpp @@ -216,9 +216,13 @@ int OctreeInboundPacketProcessor::sendNackPackets() { } const SharedNodePointer& destinationNode = NodeList::getInstance()->getNodeHash().value(nodeUUID); - const QSet& missingSequenceNumbers = nodeStats.getIncomingEditSequenceNumberStats().getMissingSet(); + + // retrieve sequence number stats of node, prune its missing set + SequenceNumberStats& sequenceNumberStats = nodeStats.getIncomingEditSequenceNumberStats(); + sequenceNumberStats.pruneMissingSet(); // construct nack packet(s) for this node + const QSet& missingSequenceNumbers = sequenceNumberStats.getMissingSet(); int numSequenceNumbersAvailable = missingSequenceNumbers.size(); QSet::const_iterator missingSequenceNumberIterator = missingSequenceNumbers.constBegin(); while (numSequenceNumbersAvailable > 0) { diff --git a/assignment-client/src/octree/OctreeInboundPacketProcessor.h b/assignment-client/src/octree/OctreeInboundPacketProcessor.h index 960282384b..2fb83123c4 100644 --- a/assignment-client/src/octree/OctreeInboundPacketProcessor.h +++ b/assignment-client/src/octree/OctreeInboundPacketProcessor.h @@ -35,6 +35,7 @@ public: { return _totalElementsInPacket == 0 ? 0 : _totalLockWaitTime / _totalElementsInPacket; } const SequenceNumberStats& getIncomingEditSequenceNumberStats() const { return _incomingEditSequenceNumberStats; } + SequenceNumberStats& getIncomingEditSequenceNumberStats() { return _incomingEditSequenceNumberStats; } void trackInboundPacket(unsigned short int incomingSequence, quint64 transitTime, int editsInPacket, quint64 processTime, quint64 lockWaitTime); diff --git a/assignment-client/src/octree/OctreeQueryNode.cpp b/assignment-client/src/octree/OctreeQueryNode.cpp index 3531c3f9cb..11783fe7d2 100644 --- a/assignment-client/src/octree/OctreeQueryNode.cpp +++ b/assignment-client/src/octree/OctreeQueryNode.cpp @@ -42,7 +42,7 @@ OctreeQueryNode::OctreeQueryNode() : _lastRootTimestamp(0), _myPacketType(PacketTypeUnknown), _isShuttingDown(false), - _sentPacketHistory(1000) + _sentPacketHistory() { } diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 72ac7ba62a..c17c669149 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -2179,11 +2179,11 @@ int Application::sendNackPackets() { _octreeSceneStatsLock.unlock(); continue; } - OctreeSceneStats& stats = _octreeServerSceneStats[nodeUUID]; - // make copy of missing sequence numbers from stats - const QSet missingSequenceNumbers = - stats.getIncomingOctreeSequenceNumberStats().getMissingSet(); + // get sequence number stats of node, prune its missing set, and make a copy of the missing set + SequenceNumberStats& sequenceNumberStats = _octreeServerSceneStats[nodeUUID].getIncomingOctreeSequenceNumberStats(); + sequenceNumberStats.pruneMissingSet(); + const QSet missingSequenceNumbers = sequenceNumberStats.getMissingSet(); _octreeSceneStatsLock.unlock(); diff --git a/libraries/networking/src/SentPacketHistory.h b/libraries/networking/src/SentPacketHistory.h index 53a6919c42..325f973f7e 100644 --- a/libraries/networking/src/SentPacketHistory.h +++ b/libraries/networking/src/SentPacketHistory.h @@ -15,10 +15,12 @@ #include #include +#include "SequenceNumberStats.h" + class SentPacketHistory { public: - SentPacketHistory(int size = 1000); + SentPacketHistory(int size = MAX_REASONABLE_SEQUENCE_GAP); void packetSent(uint16_t sequenceNumber, const QByteArray& packet); const QByteArray* getPacket(uint16_t sequenceNumber) const; diff --git a/libraries/networking/src/SequenceNumberStats.cpp b/libraries/networking/src/SequenceNumberStats.cpp index 15d3c0542e..5bdeedf39d 100644 --- a/libraries/networking/src/SequenceNumberStats.cpp +++ b/libraries/networking/src/SequenceNumberStats.cpp @@ -39,7 +39,6 @@ void SequenceNumberStats::reset() { } static const int UINT16_RANGE = std::numeric_limits::max() + 1; -static const int MAX_REASONABLE_SEQUENCE_GAP = 1000; // this must be less than UINT16_RANGE / 2 for rollover handling to work void SequenceNumberStats::sequenceNumberReceived(quint16 incoming, QUuid senderUUID, const bool wantExtraDebugging) { diff --git a/libraries/networking/src/SequenceNumberStats.h b/libraries/networking/src/SequenceNumberStats.h index b2561552ef..88c8748b03 100644 --- a/libraries/networking/src/SequenceNumberStats.h +++ b/libraries/networking/src/SequenceNumberStats.h @@ -15,13 +15,15 @@ #include "SharedUtil.h" #include +const int MAX_REASONABLE_SEQUENCE_GAP = 1000; + class SequenceNumberStats { public: SequenceNumberStats(); void reset(); - void sequenceNumberReceived(quint16 incoming, QUuid senderUUID = QUuid(), const bool wantExtraDebugging = false); + void pruneMissingSet(const bool wantExtraDebugging = false); quint32 getNumReceived() const { return _numReceived; } quint32 getNumUnreasonable() const { return _numUnreasonable; } @@ -34,8 +36,6 @@ public: const QSet& getMissingSet() const { return _missingSet; } private: - void pruneMissingSet(const bool wantExtraDebugging); - quint16 _lastReceived; QSet _missingSet; diff --git a/libraries/octree/src/OctreeSceneStats.h b/libraries/octree/src/OctreeSceneStats.h index d7b65c63be..cefaaa5764 100644 --- a/libraries/octree/src/OctreeSceneStats.h +++ b/libraries/octree/src/OctreeSceneStats.h @@ -168,6 +168,7 @@ public: float getIncomingFlightTimeAverage() { return _incomingFlightTimeAverage.getAverage(); } const SequenceNumberStats& getIncomingOctreeSequenceNumberStats() const { return _incomingOctreeSequenceNumberStats; } + SequenceNumberStats& getIncomingOctreeSequenceNumberStats() { return _incomingOctreeSequenceNumberStats; } private: