Merge PR #39206 into master

* refs/pull/39206/head:
	mgr/MetricTypes: condition encoding on feature bits

Reviewed-by: Josh Durgin <jdurgin@redhat.com>
Reviewed-by: Venky Shankar <vshankar@redhat.com>
This commit is contained in:
Sage Weil 2021-02-02 17:47:52 -05:00
commit cced65aab7
3 changed files with 29 additions and 2 deletions

View File

@ -59,7 +59,12 @@ public:
encode(stats_period, payload);
encode(stats_threshold, payload);
encode(osd_perf_metric_queries, payload);
encode(metric_config_message, payload);
if (metric_config_message && metric_config_message->should_encode(features)) {
encode(metric_config_message, payload);
} else {
boost::optional<MetricConfigMessage> empty;
encode(empty, payload);
}
}
std::string_view get_type_name() const override { return "mgrconfigure"; }

View File

@ -157,7 +157,12 @@ public:
encode(config_bl, payload);
encode(osd_perf_metric_reports, payload);
encode(task_status, payload);
encode(metric_report_message, payload);
if (metric_report_message && metric_report_message->should_encode(features)) {
encode(metric_report_message, payload);
} else {
boost::optional<MetricReportMessage> empty;
encode(empty, payload);
}
}
std::string_view get_type_name() const override { return "mgrreport"; }

View File

@ -6,6 +6,7 @@
#include <boost/variant.hpp>
#include "include/denc.h"
#include "include/ceph_features.h"
#include "mgr/OSDPerfMetricTypes.h"
#include "mgr/MDSPerfMetricTypes.h"
@ -104,6 +105,14 @@ struct MetricReportMessage {
: payload(payload) {
}
bool should_encode(uint64_t features) const {
if (!HAVE_FEATURE(features, SERVER_PACIFIC) &&
boost::get<MDSMetricPayload>(&payload)) {
return false;
}
return true;
}
void encode(ceph::buffer::list &bl) const {
boost::apply_visitor(EncodeMetricPayloadVisitor(bl), payload);
}
@ -229,6 +238,14 @@ struct MetricConfigMessage {
: payload(payload) {
}
bool should_encode(uint64_t features) const {
if (!HAVE_FEATURE(features, SERVER_PACIFIC) &&
boost::get<MDSConfigPayload>(&payload)) {
return false;
}
return true;
}
void encode(ceph::buffer::list &bl) const {
boost::apply_visitor(EncodeConfigPayloadVisitor(bl), payload);
}