Prevent 0.6.x OSDs from talking to 0.5.x
The new protocol is almost compatible - it has bitmaps, but also it has a "bitmap_length" field. It's not hard to make 0.5-0.6 OSDs and clients compatible, but for now I just assume nobody needs it. If I'm wrong and anybody requests to upgrade their production 0.5.x system to 0.6.x I'll fix it.rdma-zerocopy
parent
2a02f3c4c7
commit
64eeb79051
|
@ -349,6 +349,15 @@ void osd_messenger_t::check_peer_config(osd_client_t *cl)
|
||||||
err = true;
|
err = true;
|
||||||
printf("Connected to OSD %lu instead of OSD %lu, peer state is outdated, disconnecting peer\n", config["osd_num"].uint64_value(), cl->osd_num);
|
printf("Connected to OSD %lu instead of OSD %lu, peer state is outdated, disconnecting peer\n", config["osd_num"].uint64_value(), cl->osd_num);
|
||||||
}
|
}
|
||||||
|
else if (config["protocol_version"].uint64_value() != OSD_PROTOCOL_VERSION)
|
||||||
|
{
|
||||||
|
err = true;
|
||||||
|
printf(
|
||||||
|
"OSD %lu protocol version is %lu, but only version %u is supported.\n"
|
||||||
|
" If you need to upgrade from 0.5.x please request it via the issue tracker.\n",
|
||||||
|
cl->osd_num, config["protocol_version"].uint64_value(), OSD_PROTOCOL_VERSION
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (err)
|
if (err)
|
||||||
{
|
{
|
||||||
|
|
|
@ -35,6 +35,7 @@
|
||||||
#define MEM_ALIGNMENT 512
|
#define MEM_ALIGNMENT 512
|
||||||
#endif
|
#endif
|
||||||
#define OSD_RW_MAX 64*1024*1024
|
#define OSD_RW_MAX 64*1024*1024
|
||||||
|
#define OSD_PROTOCOL_VERSION 1
|
||||||
|
|
||||||
// common request and reply headers
|
// common request and reply headers
|
||||||
struct __attribute__((__packed__)) osd_op_header_t
|
struct __attribute__((__packed__)) osd_op_header_t
|
||||||
|
|
|
@ -145,7 +145,9 @@ void osd_t::exec_secondary(osd_op_t *cur_op)
|
||||||
void osd_t::exec_show_config(osd_op_t *cur_op)
|
void osd_t::exec_show_config(osd_op_t *cur_op)
|
||||||
{
|
{
|
||||||
// FIXME: Send the real config, not its source
|
// FIXME: Send the real config, not its source
|
||||||
std::string cfg_str = json11::Json(config).dump();
|
auto cfg_copy = config;
|
||||||
|
cfg_copy["protocol_version"] = std::to_string(OSD_PROTOCOL_VERSION);
|
||||||
|
std::string cfg_str = json11::Json(cfg_copy).dump();
|
||||||
cur_op->buf = malloc_or_die(cfg_str.size()+1);
|
cur_op->buf = malloc_or_die(cfg_str.size()+1);
|
||||||
memcpy(cur_op->buf, cfg_str.c_str(), cfg_str.size()+1);
|
memcpy(cur_op->buf, cfg_str.c_str(), cfg_str.size()+1);
|
||||||
cur_op->iov.push_back(cur_op->buf, cfg_str.size()+1);
|
cur_op->iov.push_back(cur_op->buf, cfg_str.size()+1);
|
||||||
|
|
Loading…
Reference in New Issue