OPTION(mon_compact_on_start, OPT_BOOL, false) // compact leveldb on ceph-mon start
OPTION(mon_compact_on_bootstrap, OPT_BOOL, false) // trigger leveldb compaction on bootstrap
OPTION(mon_compact_on_trim, OPT_BOOL, true) // compact (a prefix) when we trim old states
+OPTION(mon_osd_cache_size, OPT_INT, 10) // the size of osdmaps cache, not to rely on underlying store's cache
+
OPTION(mon_tick_interval, OPT_INT, 5)
OPTION(mon_subscribe_interval, OPT_DOUBLE, 300)
OPTION(mon_delta_reset_interval, OPT_DOUBLE, 10) // seconds of inactivity before we reset the pg delta to 0
<< ").osd e" << osdmap.get_epoch() << " ";
}
+OSDMonitor::OSDMonitor(CephContext *cct, Monitor *mn, Paxos *p, const string& service_name)
+ : PaxosService(mn, p, service_name),
+ inc_osd_cache(g_conf->mon_osd_cache_size),
+ full_osd_cache(g_conf->mon_osd_cache_size),
+ thrash_map(0), thrash_last_up_osd(-1),
+ op_tracker(cct, true, 1)
+{}
+
bool OSDMonitor::_have_pending_crush()
{
return pending_inc.crush.length();
}
}
+int OSDMonitor::get_version(version_t ver, bufferlist& bl)
+{
+ if (inc_osd_cache.lookup(ver, &bl)) {
+ return 0;
+ }
+ int ret = PaxosService::get_version(ver, bl);
+ if (!ret) {
+ inc_osd_cache.add(ver, bl);
+ }
+ return ret;
+}
+
+int OSDMonitor::get_version_full(version_t ver, bufferlist& bl)
+{
+ if (full_osd_cache.lookup(ver, &bl)) {
+ return 0;
+ }
+ int ret = PaxosService::get_version_full(ver, bl);
+ if (!ret) {
+ full_osd_cache.add(ver, bl);
+ }
+ return ret;
+}
epoch_t OSDMonitor::blacklist(const entity_addr_t& a, utime_t until)
{
using namespace std;
#include "include/types.h"
+#include "common/simple_cache.hpp"
#include "msg/Messenger.h"
#include "osd/OSDMap.h"
map<int,double> osd_weight;
+ SimpleLRU<version_t, bufferlist> inc_osd_cache;
+ SimpleLRU<version_t, bufferlist> full_osd_cache;
+
void check_failures(utime_t now);
bool check_failure(utime_t now, int target_osd, failure_info_t& fi);
void encode_pending(MonitorDBStore::TransactionRef t);
void on_active();
void on_shutdown();
-
/**
* we haven't delegated full version stashing to paxosservice for some time
* now, making this function useless in current context.
int load_metadata(int osd, map<string, string>& m, ostream *err);
public:
- OSDMonitor(CephContext *cct, Monitor *mn, Paxos *p, string service_name)
- : PaxosService(mn, p, service_name),
- thrash_map(0), thrash_last_up_osd(-1),
- op_tracker(cct, true, 1)
- { }
+ OSDMonitor(CephContext *cct, Monitor *mn, Paxos *p, const string& service_name);
void tick(); // check state, take actions
send_incremental(op, start);
}
+ int get_version(version_t ver, bufferlist& bl) override;
+ int get_version_full(version_t ver, bufferlist& bl) override;
+
epoch_t blacklist(const entity_addr_t& a, utime_t until);
void dump_info(Formatter *f);
* @param bl The bufferlist to be populated
* @return 0 on success; <0 otherwise
*/
- int get_version(version_t ver, bufferlist& bl) {
+ virtual int get_version(version_t ver, bufferlist& bl) {
return mon->store->get(get_service_name(), ver, bl);
}
/**
* @param bl The bufferlist to be populated
* @returns 0 on success; <0 otherwise
*/
- int get_version_full(version_t ver, bufferlist& bl) {
+ virtual int get_version_full(version_t ver, bufferlist& bl) {
string key = mon->store->combine_strings(full_prefix_name, ver);
return mon->store->get(get_service_name(), key, bl);
}