}
std::unique_lock async_request_locker{m_async_request_lock};
- mark_async_request_complete(request);
+ mark_async_request_complete(request, r);
m_async_op_tracker.finish_op();
}
}
template <typename I>
-bool ImageWatcher<I>::mark_async_request_complete(const AsyncRequestId &id) {
+bool ImageWatcher<I>::mark_async_request_complete(const AsyncRequestId &id,
+ int r) {
ceph_assert(ceph_mutex_is_locked(m_async_request_lock));
bool found = m_async_pending.erase(id);
it = m_async_complete_expiration.erase(it);
}
- if (m_async_complete.insert(id).second) {
+ if (m_async_complete.insert({id, r}).second) {
auto expiration_time = now;
expiration_time += 600;
m_async_complete_expiration.insert({expiration_time, id});
*ctx = new RemoteContext(*this, async_request_id, *prog_ctx);
} else {
*new_request = false;
+ auto it = m_async_complete.find(async_request_id);
+ if (it != m_async_complete.end()) {
+ return it->second;
+ }
}
}
return 0;
ceph::shared_mutex m_async_request_lock;
std::map<watch_notify::AsyncRequestId, AsyncRequest> m_async_requests;
std::set<watch_notify::AsyncRequestId> m_async_pending;
- std::set<watch_notify::AsyncRequestId> m_async_complete;
+ std::map<watch_notify::AsyncRequestId, int> m_async_complete;
std::set<std::pair<utime_t,
watch_notify::AsyncRequestId>> m_async_complete_expiration;
Context *on_finish);
bool is_new_request(const watch_notify::AsyncRequestId &id) const;
- bool mark_async_request_complete(const watch_notify::AsyncRequestId &id);
+ bool mark_async_request_complete(const watch_notify::AsyncRequestId &id,
+ int r);
Context *remove_async_request(const watch_notify::AsyncRequestId &id);
void schedule_async_request_timed_out(const watch_notify::AsyncRequestId &id);
void async_request_timed_out(const watch_notify::AsyncRequestId &id);