mirror of
https://github.com/JulianGro/overte.git
synced 2025-04-26 03:55:08 +02:00
prune missing set before constructing nack packets;
make MAX_REASONALBE_SEQUENCE_GAP global and sentPacketHistory to use that value as the default history size
This commit is contained in:
parent
df51d26625
commit
fd051310da
8 changed files with 18 additions and 11 deletions
|
@ -216,9 +216,13 @@ int OctreeInboundPacketProcessor::sendNackPackets() {
|
||||||
}
|
}
|
||||||
|
|
||||||
const SharedNodePointer& destinationNode = NodeList::getInstance()->getNodeHash().value(nodeUUID);
|
const SharedNodePointer& destinationNode = NodeList::getInstance()->getNodeHash().value(nodeUUID);
|
||||||
const QSet<unsigned short int>& 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
|
// construct nack packet(s) for this node
|
||||||
|
const QSet<unsigned short int>& missingSequenceNumbers = sequenceNumberStats.getMissingSet();
|
||||||
int numSequenceNumbersAvailable = missingSequenceNumbers.size();
|
int numSequenceNumbersAvailable = missingSequenceNumbers.size();
|
||||||
QSet<unsigned short int>::const_iterator missingSequenceNumberIterator = missingSequenceNumbers.constBegin();
|
QSet<unsigned short int>::const_iterator missingSequenceNumberIterator = missingSequenceNumbers.constBegin();
|
||||||
while (numSequenceNumbersAvailable > 0) {
|
while (numSequenceNumbersAvailable > 0) {
|
||||||
|
|
|
@ -35,6 +35,7 @@ public:
|
||||||
{ return _totalElementsInPacket == 0 ? 0 : _totalLockWaitTime / _totalElementsInPacket; }
|
{ return _totalElementsInPacket == 0 ? 0 : _totalLockWaitTime / _totalElementsInPacket; }
|
||||||
|
|
||||||
const SequenceNumberStats& getIncomingEditSequenceNumberStats() const { return _incomingEditSequenceNumberStats; }
|
const SequenceNumberStats& getIncomingEditSequenceNumberStats() const { return _incomingEditSequenceNumberStats; }
|
||||||
|
SequenceNumberStats& getIncomingEditSequenceNumberStats() { return _incomingEditSequenceNumberStats; }
|
||||||
|
|
||||||
void trackInboundPacket(unsigned short int incomingSequence, quint64 transitTime,
|
void trackInboundPacket(unsigned short int incomingSequence, quint64 transitTime,
|
||||||
int editsInPacket, quint64 processTime, quint64 lockWaitTime);
|
int editsInPacket, quint64 processTime, quint64 lockWaitTime);
|
||||||
|
|
|
@ -42,7 +42,7 @@ OctreeQueryNode::OctreeQueryNode() :
|
||||||
_lastRootTimestamp(0),
|
_lastRootTimestamp(0),
|
||||||
_myPacketType(PacketTypeUnknown),
|
_myPacketType(PacketTypeUnknown),
|
||||||
_isShuttingDown(false),
|
_isShuttingDown(false),
|
||||||
_sentPacketHistory(1000)
|
_sentPacketHistory()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2179,11 +2179,11 @@ int Application::sendNackPackets() {
|
||||||
_octreeSceneStatsLock.unlock();
|
_octreeSceneStatsLock.unlock();
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
OctreeSceneStats& stats = _octreeServerSceneStats[nodeUUID];
|
|
||||||
|
|
||||||
// make copy of missing sequence numbers from stats
|
// get sequence number stats of node, prune its missing set, and make a copy of the missing set
|
||||||
const QSet<OCTREE_PACKET_SEQUENCE> missingSequenceNumbers =
|
SequenceNumberStats& sequenceNumberStats = _octreeServerSceneStats[nodeUUID].getIncomingOctreeSequenceNumberStats();
|
||||||
stats.getIncomingOctreeSequenceNumberStats().getMissingSet();
|
sequenceNumberStats.pruneMissingSet();
|
||||||
|
const QSet<OCTREE_PACKET_SEQUENCE> missingSequenceNumbers = sequenceNumberStats.getMissingSet();
|
||||||
|
|
||||||
_octreeSceneStatsLock.unlock();
|
_octreeSceneStatsLock.unlock();
|
||||||
|
|
||||||
|
|
|
@ -15,10 +15,12 @@
|
||||||
#include <qbytearray.h>
|
#include <qbytearray.h>
|
||||||
#include <qvector.h>
|
#include <qvector.h>
|
||||||
|
|
||||||
|
#include "SequenceNumberStats.h"
|
||||||
|
|
||||||
class SentPacketHistory {
|
class SentPacketHistory {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
SentPacketHistory(int size = 1000);
|
SentPacketHistory(int size = MAX_REASONABLE_SEQUENCE_GAP);
|
||||||
|
|
||||||
void packetSent(uint16_t sequenceNumber, const QByteArray& packet);
|
void packetSent(uint16_t sequenceNumber, const QByteArray& packet);
|
||||||
const QByteArray* getPacket(uint16_t sequenceNumber) const;
|
const QByteArray* getPacket(uint16_t sequenceNumber) const;
|
||||||
|
|
|
@ -39,7 +39,6 @@ void SequenceNumberStats::reset() {
|
||||||
}
|
}
|
||||||
|
|
||||||
static const int UINT16_RANGE = std::numeric_limits<uint16_t>::max() + 1;
|
static const int UINT16_RANGE = std::numeric_limits<uint16_t>::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) {
|
void SequenceNumberStats::sequenceNumberReceived(quint16 incoming, QUuid senderUUID, const bool wantExtraDebugging) {
|
||||||
|
|
||||||
|
|
|
@ -15,13 +15,15 @@
|
||||||
#include "SharedUtil.h"
|
#include "SharedUtil.h"
|
||||||
#include <quuid.h>
|
#include <quuid.h>
|
||||||
|
|
||||||
|
const int MAX_REASONABLE_SEQUENCE_GAP = 1000;
|
||||||
|
|
||||||
class SequenceNumberStats {
|
class SequenceNumberStats {
|
||||||
public:
|
public:
|
||||||
SequenceNumberStats();
|
SequenceNumberStats();
|
||||||
|
|
||||||
void reset();
|
void reset();
|
||||||
|
|
||||||
void sequenceNumberReceived(quint16 incoming, QUuid senderUUID = QUuid(), const bool wantExtraDebugging = false);
|
void sequenceNumberReceived(quint16 incoming, QUuid senderUUID = QUuid(), const bool wantExtraDebugging = false);
|
||||||
|
void pruneMissingSet(const bool wantExtraDebugging = false);
|
||||||
|
|
||||||
quint32 getNumReceived() const { return _numReceived; }
|
quint32 getNumReceived() const { return _numReceived; }
|
||||||
quint32 getNumUnreasonable() const { return _numUnreasonable; }
|
quint32 getNumUnreasonable() const { return _numUnreasonable; }
|
||||||
|
@ -34,8 +36,6 @@ public:
|
||||||
const QSet<quint16>& getMissingSet() const { return _missingSet; }
|
const QSet<quint16>& getMissingSet() const { return _missingSet; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void pruneMissingSet(const bool wantExtraDebugging);
|
|
||||||
|
|
||||||
quint16 _lastReceived;
|
quint16 _lastReceived;
|
||||||
QSet<quint16> _missingSet;
|
QSet<quint16> _missingSet;
|
||||||
|
|
||||||
|
|
|
@ -168,6 +168,7 @@ public:
|
||||||
float getIncomingFlightTimeAverage() { return _incomingFlightTimeAverage.getAverage(); }
|
float getIncomingFlightTimeAverage() { return _incomingFlightTimeAverage.getAverage(); }
|
||||||
|
|
||||||
const SequenceNumberStats& getIncomingOctreeSequenceNumberStats() const { return _incomingOctreeSequenceNumberStats; }
|
const SequenceNumberStats& getIncomingOctreeSequenceNumberStats() const { return _incomingOctreeSequenceNumberStats; }
|
||||||
|
SequenceNumberStats& getIncomingOctreeSequenceNumberStats() { return _incomingOctreeSequenceNumberStats; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue