1 #include "ceph_releases.h"
7 std::ostream
& operator<<(std::ostream
& os
, const ceph_release_t r
)
9 return os
<< ceph_release_name(static_cast<int>(r
));
12 ceph_release_t
ceph_release()
14 return ceph_release_t
{CEPH_RELEASE
};
17 ceph_release_t
ceph_release_from_name(std::string_view s
)
19 ceph_release_t r
= ceph_release_t::max
;
20 while (--r
!= ceph_release_t::unknown
) {
21 if (s
== to_string(r
)) {
25 return ceph_release_t::unknown
;
28 bool can_upgrade_from(ceph_release_t from_release
,
29 std::string_view from_release_name
,
32 if (from_release
== ceph_release_t::unknown
) {
33 // cannot tell, but i am optimistic
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
<< " "
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
<< "); "
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
) {
47 err
<< to_integer
<int>(release
) << " (" << release
<< ")";
48 if (release
< cutoff
) {