1 #ifndef __CEPH_SNAP_TYPES_H
2 #define __CEPH_SNAP_TYPES_H
4 #include "include/types.h"
5 #include "include/utime.h"
6 #include "include/fs_types.h"
12 struct SnapRealmInfo
{
13 mutable ceph_mds_snap_realm h
;
14 std::vector
<snapid_t
> my_snaps
;
15 std::vector
<snapid_t
> prior_parent_snaps
; // before parent_since
18 // FIPS zeroization audit 20191115: this memset is not security related.
19 memset(&h
, 0, sizeof(h
));
21 SnapRealmInfo(inodeno_t ino_
, snapid_t created_
, snapid_t seq_
, snapid_t current_parent_since_
) {
22 // FIPS zeroization audit 20191115: this memset is not security related.
23 memset(&h
, 0, sizeof(h
));
27 h
.parent_since
= current_parent_since_
;
30 inodeno_t
ino() const { return inodeno_t(h
.ino
); }
31 inodeno_t
parent() const { return inodeno_t(h
.parent
); }
32 snapid_t
seq() const { return snapid_t(h
.seq
); }
33 snapid_t
parent_since() const { return snapid_t(h
.parent_since
); }
34 snapid_t
created() const { return snapid_t(h
.created
); }
36 void encode(ceph::buffer::list
& bl
) const;
37 void decode(ceph::buffer::list::const_iterator
& bl
);
38 void dump(ceph::Formatter
*f
) const;
39 static void generate_test_instances(std::list
<SnapRealmInfo
*>& o
);
41 WRITE_CLASS_ENCODER(SnapRealmInfo
)
43 // "new* snap realm info - carries additional metadata (last modified,
44 // change_attr) and is version encoded.
45 struct SnapRealmInfoNew
{
47 utime_t last_modified
;
53 SnapRealmInfoNew(const SnapRealmInfo
&info_
, utime_t last_modified_
, uint64_t change_attr_
) {
54 // FIPS zeroization audit 20191115: this memset is not security related.
56 last_modified
= last_modified_
;
57 change_attr
= change_attr_
;
60 inodeno_t
ino() const { return inodeno_t(info
.h
.ino
); }
61 inodeno_t
parent() const { return inodeno_t(info
.h
.parent
); }
62 snapid_t
seq() const { return snapid_t(info
.h
.seq
); }
63 snapid_t
parent_since() const { return snapid_t(info
.h
.parent_since
); }
64 snapid_t
created() const { return snapid_t(info
.h
.created
); }
66 void encode(ceph::buffer::list
& bl
) const;
67 void decode(ceph::buffer::list::const_iterator
& bl
);
68 void dump(ceph::Formatter
*f
) const;
69 static void generate_test_instances(std::list
<SnapRealmInfoNew
*>& o
);
71 WRITE_CLASS_ENCODER(SnapRealmInfoNew
)
74 snapid_t seq
; // 'time' stamp
75 std::vector
<snapid_t
> snaps
; // existent snaps, in descending order
78 SnapContext(snapid_t s
, const std::vector
<snapid_t
>& v
) : seq(s
), snaps(v
) {}
80 bool is_valid() const;
86 bool empty() const { return seq
== 0; }
88 void encode(ceph::buffer::list
& bl
) const {
93 void decode(ceph::buffer::list::const_iterator
& bl
) {
98 void dump(ceph::Formatter
*f
) const;
99 static void generate_test_instances(std::list
<SnapContext
*>& o
);
101 WRITE_CLASS_ENCODER(SnapContext
)
103 inline std::ostream
& operator<<(std::ostream
& out
, const SnapContext
& snapc
) {
104 return out
<< snapc
.seq
<< "=" << snapc
.snaps
;
107 #if FMT_VERSION >= 90000
108 template <> struct fmt::formatter
<SnapContext
> : fmt::ostream_formatter
{};