From 11a9fdf56e8edc9b286d6e3d114fc85ddedca79d Mon Sep 17 00:00:00 2001 From: Mykola Golub Date: Tue, 29 Sep 2020 10:07:56 +0100 Subject: [PATCH] librbd: reset complete async request expiration time Signed-off-by: Mykola Golub (cherry picked from commit 5c3ba95b4d1208868db1d00d1ba06ed086e1b268) Conflicts: src/librbd/ImageWatcher.cc (no quiesce requests in octopus, AsyncRequestId == operator is not supported, use !=) --- src/librbd/ImageWatcher.cc | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/librbd/ImageWatcher.cc b/src/librbd/ImageWatcher.cc index 02a52a65fa464..50ac0facc4eb0 100644 --- a/src/librbd/ImageWatcher.cc +++ b/src/librbd/ImageWatcher.cc @@ -511,11 +511,18 @@ bool ImageWatcher::mark_async_request_complete(const AsyncRequestId &id, it = m_async_complete_expiration.erase(it); } - if (m_async_complete.insert({id, r}).second) { - auto expiration_time = now; - expiration_time += 600; - m_async_complete_expiration.insert({expiration_time, id}); + if (!m_async_complete.insert({id, r}).second) { + for (it = m_async_complete_expiration.begin(); + it != m_async_complete_expiration.end(); it++) { + if (!(it->second != id)) { + m_async_complete_expiration.erase(it); + break; + } + } } + auto expiration_time = now; + expiration_time += 600; + m_async_complete_expiration.insert({expiration_time, id}); return found; } @@ -610,7 +617,10 @@ int ImageWatcher::prepare_async_request(const AsyncRequestId& async_request_i *new_request = false; auto it = m_async_complete.find(async_request_id); if (it != m_async_complete.end()) { - return it->second; + int r = it->second; + // reset complete request expiration time + mark_async_request_complete(async_request_id, r); + return r; } } } -- 2.39.5