From 269b949ab41aa31285fdb6a13377e6b5aa08195b Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Fri, 26 Jun 2020 17:04:51 -0500 Subject: [PATCH] librados: fall back to legacy blacklist command if blocklist gets EINVAL I would have expected ENOSYS or EOPNOTSUPP or similar, but the mon returns EINVAL on an unrecognized command Signed-off-by: Sage Weil --- src/librados/RadosClient.cc | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/librados/RadosClient.cc b/src/librados/RadosClient.cc index c87e08f22c386..79f83e36873e7 100644 --- a/src/librados/RadosClient.cc +++ b/src/librados/RadosClient.cc @@ -800,8 +800,22 @@ int librados::RadosClient::blocklist_add(const string& client_address, cmds.push_back(cmd.str()); bufferlist inbl; int r = mon_command(cmds, inbl, NULL, NULL); + if (r == -EINVAL) { + // try legacy blacklist command + std::stringstream cmd; + cmd << "{" + << "\"prefix\": \"osd blacklist\", " + << "\"blacklistop\": \"add\", " + << "\"addr\": \"" << client_address << "\""; + if (expire_seconds != 0) { + cmd << ", \"expire\": " << expire_seconds << ".0"; + } + cmd << "}"; + cmds.clear(); + cmds.push_back(cmd.str()); + r = mon_command(cmds, inbl, NULL, NULL); + } if (r < 0) { -#warning blocklist fallback return r; } -- 2.39.5