From c090077f17ae7b6bbcb7e298d1c8bf1a22909216 Mon Sep 17 00:00:00 2001 From: Arsentiy Milchakov Date: Mon, 8 Jun 2020 22:26:59 +0300 Subject: [PATCH] [guides on map] network errors frequency is reduced review fix --- map/guides_manager.cpp | 34 +++++++++++++++++++++------------- map/guides_manager.hpp | 2 +- 2 files changed, 22 insertions(+), 14 deletions(-) diff --git a/map/guides_manager.cpp b/map/guides_manager.cpp index bb9cf01e96..5471e2e2f5 100644 --- a/map/guides_manager.cpp +++ b/map/guides_manager.cpp @@ -206,12 +206,20 @@ void GuidesManager::RequestGuides(bool suggestZoom) void GuidesManager::OnRequestSucceed(guides_on_map::GuidesOnMap const & guides, bool suggestZoom, uint64_t requestNumber) { - if (m_state == GuidesState::Disabled || requestNumber != m_requestCounter) + if (m_state == GuidesState::Disabled) + return; + + m_errorRequestsCount = 0; + if (m_retryAfterErrorRequestId != base::TaskLoop::kIncorrectId) + { + GetPlatform().CancelTask(Platform::Thread::Background, m_retryAfterErrorRequestId); + m_retryAfterErrorRequestId = base::TaskLoop::kIncorrectId; + } + + if (requestNumber != m_requestCounter) return; m_guides = guides; - m_errorRequestsCount = 0; - m_errorTimeoutExceeded = true; if (!m_guides.m_nodes.empty()) { @@ -247,7 +255,7 @@ void GuidesManager::OnRequestSucceed(guides_on_map::GuidesOnMap const & guides, void GuidesManager::OnRequestError() { if (m_state == GuidesState::Disabled || m_state == GuidesState::FatalNetworkError || - !m_errorTimeoutExceeded) + m_retryAfterErrorRequestId != base::TaskLoop::kIncorrectId) { return; } @@ -261,16 +269,16 @@ void GuidesManager::OnRequestError() ChangeState(GuidesState::NetworkError, true /* force */); - m_errorTimeoutExceeded = false; - GetPlatform().RunDelayedTask(Platform::Thread::Background, kErrorTimeout, [this]() { - GetPlatform().RunTask(Platform::Thread::Gui, [this]() { - if (m_state != GuidesState::NetworkError && m_state != GuidesState::FatalNetworkError) - return; + m_retryAfterErrorRequestId = + GetPlatform().RunDelayedTask(Platform::Thread::Background, kErrorTimeout, [this]() { + GetPlatform().RunTask(Platform::Thread::Gui, [this]() { + if (m_state != GuidesState::NetworkError) + return; - m_errorTimeoutExceeded = true; - RequestGuides(); - }); - }); + m_retryAfterErrorRequestId = base::TaskLoop::kIncorrectId; + RequestGuides(); + }); + }); } void GuidesManager::Clear() diff --git a/map/guides_manager.hpp b/map/guides_manager.hpp index 5460f2bc2b..cde7fe6e86 100644 --- a/map/guides_manager.hpp +++ b/map/guides_manager.hpp @@ -146,7 +146,7 @@ private: uint64_t m_requestCounter = 0; uint8_t m_errorRequestsCount = 0; - bool m_errorTimeoutExceeded = true; + base::TaskLoop::TaskId m_retryAfterErrorRequestId = base::TaskLoop::kIncorrectId; base::TaskLoop::TaskId m_previousRequestsId = base::TaskLoop::kIncorrectId; guides_on_map::Api m_api;