From 9712301172a515c196a0eca9c6e0098fdf4c0160 Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Mon, 10 Oct 2016 11:54:33 -0700 Subject: [PATCH] avoid a race that can cause metaverse to not have correct ice-server information about a domain --- domain-server/src/DomainServer.cpp | 21 +++++++++++++++++++++ domain-server/src/DomainServer.h | 4 ++++ 2 files changed, 25 insertions(+) diff --git a/domain-server/src/DomainServer.cpp b/domain-server/src/DomainServer.cpp index d7bcaa838e..c6425f5016 100644 --- a/domain-server/src/DomainServer.cpp +++ b/domain-server/src/DomainServer.cpp @@ -1278,6 +1278,13 @@ void DomainServer::handleMetaverseHeartbeatError(QNetworkReply& requestReply) { } void DomainServer::sendICEServerAddressToMetaverseAPI() { + if (_sendICEServerAddressToMetaverseAPIInProgress) { + // don't have more than one of these in-flight at a time. set a flag to indicate that once the current one + // is done, we need to do update metaverse again. + _sendICEServerAddressToMetaverseAPIRedo = true; + return; + } + _sendICEServerAddressToMetaverseAPIInProgress = true; const QString ICE_SERVER_ADDRESS = "ice_server_address"; QJsonObject domainObject; @@ -1302,6 +1309,8 @@ void DomainServer::sendICEServerAddressToMetaverseAPI() { JSONCallbackParameters callbackParameters; callbackParameters.errorCallbackReceiver = this; callbackParameters.errorCallbackMethod = "handleFailedICEServerAddressUpdate"; + callbackParameters.jsonCallbackReceiver = this; + callbackParameters.jsonCallbackMethod = "handleSuccessfulICEServerAddressUpdate"; static QString repeatedMessage = LogHandler::getInstance().addOnlyOnceMessageRegex ("Updating ice-server address in High Fidelity Metaverse API to [^ \n]+"); @@ -1317,7 +1326,19 @@ void DomainServer::sendICEServerAddressToMetaverseAPI() { domainUpdateJSON.toUtf8()); } +void DomainServer::handleSuccessfulICEServerAddressUpdate(QNetworkReply& requestReply) { + _sendICEServerAddressToMetaverseAPIInProgress = false; + if (_sendICEServerAddressToMetaverseAPIRedo) { + qDebug() << "ice-server address updated with metaverse, but has since changed. redoing update..."; + _sendICEServerAddressToMetaverseAPIRedo = false; + sendICEServerAddressToMetaverseAPI(); + } else { + qDebug() << "ice-server address updated with metaverse."; + } +} + void DomainServer::handleFailedICEServerAddressUpdate(QNetworkReply& requestReply) { + _sendICEServerAddressToMetaverseAPIInProgress = false; const int ICE_SERVER_UPDATE_RETRY_MS = 2 * 1000; qWarning() << "Failed to update ice-server address with High Fidelity Metaverse - error was" << requestReply.errorString(); diff --git a/domain-server/src/DomainServer.h b/domain-server/src/DomainServer.h index 066f2be0d1..6330cf51a5 100644 --- a/domain-server/src/DomainServer.h +++ b/domain-server/src/DomainServer.h @@ -96,6 +96,7 @@ private slots: void handleICEHostInfo(const QHostInfo& hostInfo); void sendICEServerAddressToMetaverseAPI(); + void handleSuccessfulICEServerAddressUpdate(QNetworkReply& requestReply); void handleFailedICEServerAddressUpdate(QNetworkReply& requestReply); signals: @@ -211,6 +212,9 @@ private: int _iceServerPort; bool _overrideDomainID { false }; // should we override the domain-id from settings? QUuid _overridingDomainID { QUuid() }; // what should we override it with? + + bool _sendICEServerAddressToMetaverseAPIInProgress { false }; + bool _sendICEServerAddressToMetaverseAPIRedo { false }; };