]> git.proxmox.com Git - ceph.git/blame - ceph/src/common/ceph_releases.cc
update ceph source to reef 18.2.0
[ceph.git] / ceph / src / common / ceph_releases.cc
CommitLineData
9f95a23c
TL
1#include "ceph_releases.h"
2
3#include <ostream>
4
5#include "ceph_ver.h"
6
7std::ostream& operator<<(std::ostream& os, const ceph_release_t r)
8{
9 return os << ceph_release_name(static_cast<int>(r));
10}
11
12ceph_release_t ceph_release()
13{
14 return ceph_release_t{CEPH_RELEASE};
15}
16
17ceph_release_t ceph_release_from_name(std::string_view s)
18{
19 ceph_release_t r = ceph_release_t::max;
20 while (--r != ceph_release_t::unknown) {
f67539c2 21 if (s == to_string(r)) {
9f95a23c
TL
22 return r;
23 }
24 }
25 return ceph_release_t::unknown;
26}
27
28bool can_upgrade_from(ceph_release_t from_release,
29 std::string_view from_release_name,
30 std::ostream& err)
31{
32 if (from_release == ceph_release_t::unknown) {
33 // cannot tell, but i am optimistic
34 return true;
35 }
36 const ceph_release_t cutoff{static_cast<uint8_t>(static_cast<uint8_t>(from_release) + 2)};
37 const auto to_release = ceph_release();
38 if (cutoff < to_release) {
39 err << "recorded " << from_release_name << " "
f67539c2
TL
40 << to_integer<int>(from_release) << " (" << from_release << ") "
41 << "is more than two releases older than installed "
42 << to_integer<int>(to_release) << " (" << to_release << "); "
9f95a23c
TL
43 << "you can only upgrade 2 releases at a time\n"
44 << "you should first upgrade to ";
45 auto release = from_release;
46 while (++release <= cutoff) {
f67539c2 47 err << to_integer<int>(release) << " (" << release << ")";
9f95a23c
TL
48 if (release < cutoff) {
49 err << " or ";
50 } else {
51 err << "\n";
52 }
53 }
54 return false;
55 } else {
56 return true;
57 }
58}