X-Git-Url: https://git.proxmox.com/?p=ceph.git;a=blobdiff_plain;f=ceph%2Fsrc%2Fosd%2FOSD.cc;h=54fedcddcabf0624d4820294494ee9ab58691a8b;hp=2579e7fdc4b04c3a27b6917c027cbd89e5a608db;hb=28e407b858acd3bddc89f68583571f771bb42e46;hpb=dfcb7b53b2e4fcd2a5af0240d4975adc711ab96e diff --git a/ceph/src/osd/OSD.cc b/ceph/src/osd/OSD.cc index 2579e7fdc..54fedcddc 100644 --- a/ceph/src/osd/OSD.cc +++ b/ceph/src/osd/OSD.cc @@ -1273,10 +1273,12 @@ bool OSDService::can_inc_scrubs_pending() if (scrubs_pending + scrubs_active < cct->_conf->osd_max_scrubs) { dout(20) << __func__ << " " << scrubs_pending << " -> " << (scrubs_pending+1) - << " (max " << cct->_conf->osd_max_scrubs << ", active " << scrubs_active << ")" << dendl; + << " (max " << cct->_conf->osd_max_scrubs << ", active " << scrubs_active + << ")" << dendl; can_inc = true; } else { - dout(20) << __func__ << scrubs_pending << " + " << scrubs_active << " active >= max " << cct->_conf->osd_max_scrubs << dendl; + dout(20) << __func__ << " " << scrubs_pending << " + " << scrubs_active + << " active >= max " << cct->_conf->osd_max_scrubs << dendl; } return can_inc; @@ -1411,7 +1413,8 @@ void OSDService::got_stop_ack() MOSDMap *OSDService::build_incremental_map_msg(epoch_t since, epoch_t to, OSDSuperblock& sblock) { - MOSDMap *m = new MOSDMap(monc->get_fsid()); + MOSDMap *m = new MOSDMap(monc->get_fsid(), + osdmap->get_encoding_features()); m->oldest_map = max_oldest_map; m->newest_map = sblock.newest_map; @@ -1451,7 +1454,8 @@ void OSDService::send_incremental_map(epoch_t since, Connection *con, OSDSuperblock sblock(get_superblock()); if (since < sblock.oldest_map) { // just send latest full map - MOSDMap *m = new MOSDMap(monc->get_fsid()); + MOSDMap *m = new MOSDMap(monc->get_fsid(), + osdmap->get_encoding_features()); m->oldest_map = max_oldest_map; m->newest_map = sblock.newest_map; get_map_bl(to, m->maps[to]); @@ -2660,6 +2664,12 @@ int OSD::init() update_log_config(); peering_tp.start(); + + service.init(); + service.publish_map(osdmap); + service.publish_superblock(superblock); + service.max_oldest_map = superblock.oldest_map; + osd_op_tp.start(); disk_tp.start(); command_tp.start(); @@ -2676,11 +2686,6 @@ int OSD::init() tick_timer_without_osd_lock.add_event_after(cct->_conf->osd_heartbeat_interval, new C_Tick_WithoutOSDLock(this)); } - service.init(); - service.publish_map(osdmap); - service.publish_superblock(superblock); - service.max_oldest_map = superblock.oldest_map; - osd_lock.Unlock(); r = monc->authenticate(); @@ -7233,9 +7238,11 @@ bool OSD::ms_get_authorizer(int dest_type, AuthAuthorizer **authorizer, bool for } -bool OSD::ms_verify_authorizer(Connection *con, int peer_type, - int protocol, bufferlist& authorizer_data, bufferlist& authorizer_reply, - bool& isvalid, CryptoKey& session_key) +bool OSD::ms_verify_authorizer( + Connection *con, int peer_type, + int protocol, bufferlist& authorizer_data, bufferlist& authorizer_reply, + bool& isvalid, CryptoKey& session_key, + std::unique_ptr *challenge) { AuthAuthorizeHandler *authorize_handler = 0; switch (peer_type) { @@ -7267,7 +7274,7 @@ bool OSD::ms_verify_authorizer(Connection *con, int peer_type, isvalid = authorize_handler->verify_authorizer( cct, keys, authorizer_data, authorizer_reply, name, global_id, caps_info, session_key, - &auid); + &auid, challenge); } else { dout(10) << __func__ << " no rotating_keys (yet), denied" << dendl; isvalid = false; @@ -7522,6 +7529,25 @@ bool OSD::scrub_time_permit(utime_t now) struct tm bdt; time_t tt = now.sec(); localtime_r(&tt, &bdt); + + bool day_permit = false; + if (cct->_conf->osd_scrub_begin_week_day < cct->_conf->osd_scrub_end_week_day) { + if (bdt.tm_wday >= cct->_conf->osd_scrub_begin_week_day && bdt.tm_wday < cct->_conf->osd_scrub_end_week_day) { + day_permit = true; + } + } else { + if (bdt.tm_wday >= cct->_conf->osd_scrub_begin_week_day || bdt.tm_wday < cct->_conf->osd_scrub_end_week_day) { + day_permit = true; + } + } + + if (!day_permit) { + dout(20) << __func__ << " should run between week day " << cct->_conf->osd_scrub_begin_week_day + << " - " << cct->_conf->osd_scrub_end_week_day + << " now " << bdt.tm_wday << " = no" << dendl; + return false; + } + bool time_permit = false; if (cct->_conf->osd_scrub_begin_hour < cct->_conf->osd_scrub_end_hour) { if (bdt.tm_hour >= cct->_conf->osd_scrub_begin_hour && bdt.tm_hour < cct->_conf->osd_scrub_end_hour) {