#include "osd.h"
+#include "messages/MOSDBeacon.h"
#include "messages/MOSDBoot.h"
#include "messages/MOSDMap.h"
#include "crimson/net/Connection.h"
dispatchers.push_front(this);
dispatchers.push_front(&monc);
osdmaps[0] = seastar::make_lw_shared<OSDMap>();
+ beacon_timer.set_callback([this] {
+ send_beacon();
+ });
}
OSD::~OSD() = default;
if (state.is_booting()) {
logger().info("osd.{}: activating...", whoami);
state.set_active();
+ beacon_timer.arm_periodic(
+ std::chrono::seconds(local_conf()->osd_beacon_report_interval));
}
}
superblock.clean_thru = osdmap->get_epoch();
return seastar::now();
}
+
+seastar::future<> OSD::send_beacon()
+{
+ // FIXME: min lec should be calculated from pg_stat
+ // and should set m->pgs
+ epoch_t min_last_epoch_clean = osdmap->get_epoch();
+ auto m = make_message<MOSDBeacon>(osdmap->get_epoch(),
+ min_last_epoch_clean);
+ return monc.send_message(m);
+}
#include <seastar/core/future.hh>
#include <seastar/core/gate.hh>
#include <seastar/core/shared_ptr.hh>
+#include <seastar/core/timer.hh>
#include "crimson/mon/MonClient.h"
#include "crimson/net/Dispatcher.h"
class OSD : public ceph::net::Dispatcher {
seastar::gate gate;
+ seastar::timer<seastar::lowres_clock> beacon_timer;
const int whoami;
// talk with osd
std::unique_ptr<ceph::net::Messenger> cluster_msgr;
bool should_restart() const;
seastar::future<> restart();
seastar::future<> shutdown();
+
+ seastar::future<> send_beacon();
};