This overrides what the CephContext believes to be the current quorum of
monitors (retrieved from other instances of the MonClient), introduced
by [1]. Tests need to be able to target a specific monitor for
exercising forwarding and other things.
[1]
731e2db9fb4611f767446a3c8e778a097ce70d35
Fixes: https://tracker.ceph.com/issues/47180
Signed-off-by: Patrick Donnelly <pdonnell@redhat.com>
Signed-off-by: Shyamsundar Ranganathan <srangana@redhat.com>
(cherry picked from commit
ed3782e60afa0da2f523fc6df7b593fe7a57646a)
Conflicts:
PendingReleaseNotes
Retained nautilus release notes with the required addition as above
* Now when noscrub and/or nodeep-scrub flags are set globally or per pool,
scheduled scrubs of the type disabled will be aborted. All user initiated
scrubs are NOT interrupted.
+
+* It is now possible to specify the initial monitor to contact for Ceph tools
+ and daemons using the ``mon_host_override`` config option or
+ ``--mon-host-override <ip>`` command-line switch. This generally should only
+ be used for debugging and only affects initial communication with Ceph's
+ monitor cluster.
in a local configuration file. These options include:
- ``mon_host``, the list of monitors for the cluster
+ - ``mon_host_override``, the list of monitors for the cluster to
+ **initially** contact when beginning a new instance of communication with the
+ Ceph cluster. This overrides the known monitor list derived from MonMap
+ updates sent to older Ceph instances (like librados cluster handles). It is
+ expected this option is primarily useful for debugging.
- ``mon_dns_serv_name`` (default: `ceph-mon`), the name of the DNS
SRV record to check to identify the cluster monitors via DNS
- ``mon_data``, ``osd_data``, ``mds_data``, ``mgr_data``, and
run_mon $dir b --public-addr $MONB || return 1
)
- timeout 360 ceph --mon-host $MONA mon stat || return 1
+ timeout 360 ceph --mon-host-override $MONA mon stat || return 1
# check that MONB is indeed a peon
ceph --admin-daemon $(get_asok_path mon.b) mon_status |
grep '"peon"' || return 1
# when the leader ( MONA ) is used, there is no message forwarding
- ceph --mon-host $MONA osd pool create POOL1 12
+ ceph --mon-host-override $MONA osd pool create POOL1 12
CEPH_ARGS='' ceph --admin-daemon $(get_asok_path mon.a) log flush || return 1
grep 'mon_command(.*"POOL1"' $dir/mon.a.log || return 1
CEPH_ARGS='' ceph --admin-daemon $(get_asok_path mon.b) log flush || return 1
grep 'mon_command(.*"POOL1"' $dir/mon.b.log && return 1
# when the peon ( MONB ) is used, the message is forwarded to the leader
- ceph --mon-host $MONB osd pool create POOL2 12
+ ceph --mon-host-override $MONB osd pool create POOL2 12
CEPH_ARGS='' ceph --admin-daemon $(get_asok_path mon.b) log flush || return 1
grep 'forward_request.*mon_command(.*"POOL2"' $dir/mon.b.log || return 1
CEPH_ARGS='' ceph --admin-daemon $(get_asok_path mon.a) log flush || return 1
.set_flag(Option::FLAG_STARTUP)
.add_service("common"),
+ Option("mon_host_override", Option::TYPE_STR, Option::LEVEL_ADVANCED)
+ .set_description("monitor(s) to use overriding the MonMap")
+ .set_flag(Option::FLAG_NO_MON_UPDATE)
+ .set_flag(Option::FLAG_STARTUP)
+ .add_service("common"),
+
Option("mon_dns_srv_name", Option::TYPE_STR, Option::LEVEL_ADVANCED)
.set_default("ceph-mon")
.set_description("name of DNS SRV record to check for monitor addresses")
{
const auto& conf = cct->_conf;
+ // mon_host_override?
+ auto mon_host_override = conf.get_val<std::string>("mon_host_override");
+ if (!mon_host_override.empty()) {
+ lgeneric_dout(cct, 1) << "Using mon_host_override " << mon_host_override << dendl;
+ auto ret = init_with_ips(mon_host_override, for_mkfs, "noname-");
+ if (ret == -EINVAL) {
+ ret = init_with_hosts(mon_host_override, for_mkfs, "noname-");
+ }
+ if (ret < 0) {
+ errout << "unable to parse addrs in '" << mon_host_override << "'"
+ << std::endl;
+ }
+ return ret;
+ }
+
// cct?
auto addrs = cct->get_mon_addrs();
if (addrs != nullptr && (addrs->size() > 0)) {