From 19fcec84d8d7d21e796c7624e521b60d28ee21ed Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 20:45:59 +0200 Subject: Adding upstream version 16.2.11+ds. Signed-off-by: Daniel Baumann --- src/crimson/osd/osdmap_gate.h | 68 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 src/crimson/osd/osdmap_gate.h (limited to 'src/crimson/osd/osdmap_gate.h') diff --git a/src/crimson/osd/osdmap_gate.h b/src/crimson/osd/osdmap_gate.h new file mode 100644 index 000000000..2b73d8959 --- /dev/null +++ b/src/crimson/osd/osdmap_gate.h @@ -0,0 +1,68 @@ +// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- +// vim: ts=8 sw=2 smarttab + +#pragma once + +#include +#include +#include + +#include +#include + +#include "include/types.h" +#include "crimson/osd/osd_operation.h" + +namespace ceph { + class Formatter; +} + +namespace crimson::osd { + +class ShardServices; + +class OSDMapGate { + struct OSDMapBlocker : public Blocker { + const char * type_name; + epoch_t epoch; + + OSDMapBlocker(std::pair args) + : type_name(args.first), epoch(args.second) {} + + OSDMapBlocker(const OSDMapBlocker &) = delete; + OSDMapBlocker(OSDMapBlocker &&) = delete; + OSDMapBlocker &operator=(const OSDMapBlocker &) = delete; + OSDMapBlocker &operator=(OSDMapBlocker &&) = delete; + + seastar::shared_promise promise; + + void dump_detail(Formatter *f) const final; + private: + const char *get_type_name() const final { + return type_name; + } + }; + + // order the promises in ascending order of the waited osdmap epoch, + // so we can access all the waiters expecting a map whose epoch is less + // than or equal to a given epoch + using waiting_peering_t = std::map; + const char *blocker_type; + waiting_peering_t waiting_peering; + epoch_t current = 0; + std::optional> shard_services; + bool stopping = false; +public: + OSDMapGate( + const char *blocker_type, + std::optional> shard_services) + : blocker_type(blocker_type), shard_services(shard_services) {} + + // wait for an osdmap whose epoch is greater or equal to given epoch + blocking_future wait_for_map(epoch_t epoch); + void got_map(epoch_t epoch); + seastar::future<> stop(); +}; + +} -- cgit v1.2.3