void object_stat_sum_t::encode(bufferlist& bl) const
{
ENCODE_START(15, 3, bl);
+#if defined(CEPH_LITTLE_ENDIAN)
+ bl.append((char *)(&num_bytes), sizeof(object_stat_sum_t));
+#else
::encode(num_bytes, bl);
::encode(num_objects, bl);
::encode(num_object_clones, bl);
::encode(num_evict_mode_full, bl);
::encode(num_objects_pinned, bl);
::encode(num_objects_missing, bl);
+#endif
ENCODE_FINISH(bl);
}
void object_stat_sum_t::decode(bufferlist::iterator& bl)
{
+ bool decode_finish = false;
DECODE_START_LEGACY_COMPAT_LEN(14, 3, 3, bl);
- ::decode(num_bytes, bl);
- if (struct_v < 3) {
- uint64_t num_kb;
- ::decode(num_kb, bl);
- }
- ::decode(num_objects, bl);
- ::decode(num_object_clones, bl);
- ::decode(num_object_copies, bl);
- ::decode(num_objects_missing_on_primary, bl);
- ::decode(num_objects_degraded, bl);
- if (struct_v >= 2)
- ::decode(num_objects_unfound, bl);
- ::decode(num_rd, bl);
- ::decode(num_rd_kb, bl);
- ::decode(num_wr, bl);
- ::decode(num_wr_kb, bl);
- if (struct_v >= 4)
- ::decode(num_scrub_errors, bl);
- else
- num_scrub_errors = 0;
- if (struct_v >= 5) {
- ::decode(num_objects_recovered, bl);
- ::decode(num_bytes_recovered, bl);
- ::decode(num_keys_recovered, bl);
- } else {
- num_objects_recovered = 0;
- num_bytes_recovered = 0;
- num_keys_recovered = 0;
- }
- if (struct_v >= 6) {
- ::decode(num_shallow_scrub_errors, bl);
- ::decode(num_deep_scrub_errors, bl);
- } else {
- num_shallow_scrub_errors = 0;
- num_deep_scrub_errors = 0;
- }
- if (struct_v >= 7) {
- ::decode(num_objects_dirty, bl);
- ::decode(num_whiteouts, bl);
- } else {
- num_objects_dirty = 0;
- num_whiteouts = 0;
- }
- if (struct_v >= 8) {
- ::decode(num_objects_omap, bl);
- } else {
- num_objects_omap = 0;
- }
- if (struct_v >= 9) {
- ::decode(num_objects_hit_set_archive, bl);
- } else {
- num_objects_hit_set_archive = 0;
- }
- if (struct_v >= 10) {
- ::decode(num_objects_misplaced, bl);
- } else {
- num_objects_misplaced = 0;
- }
- if (struct_v >= 11) {
- ::decode(num_bytes_hit_set_archive, bl);
- } else {
- num_bytes_hit_set_archive = 0;
- }
- if (struct_v >= 12) {
- ::decode(num_flush, bl);
- ::decode(num_flush_kb, bl);
- ::decode(num_evict, bl);
- ::decode(num_evict_kb, bl);
- ::decode(num_promote, bl);
- } else {
- num_flush = 0;
- num_flush_kb = 0;
- num_evict = 0;
- num_evict_kb = 0;
- num_promote = 0;
- }
- if (struct_v >= 13) {
- ::decode(num_flush_mode_high, bl);
- ::decode(num_flush_mode_low, bl);
- ::decode(num_evict_mode_some, bl);
- ::decode(num_evict_mode_full, bl);
- } else {
- num_flush_mode_high = 0;
- num_flush_mode_low = 0;
- num_evict_mode_some = 0;
- num_evict_mode_full = 0;
- }
- if (struct_v >= 14) {
- ::decode(num_objects_pinned, bl);
- } else {
- num_objects_pinned = 0;
- }
+#if defined(CEPH_LITTLE_ENDIAN)
if (struct_v >= 15) {
- ::decode(num_objects_missing, bl);
- } else {
- num_objects_missing = 0;
+ bl.copy(sizeof(object_stat_sum_t), (char*)(&num_bytes));
+ decode_finish = true;
+ }
+#endif
+ if (!decode_finish) {
+ ::decode(num_bytes, bl);
+ if (struct_v < 3) {
+ uint64_t num_kb;
+ ::decode(num_kb, bl);
+ }
+ ::decode(num_objects, bl);
+ ::decode(num_object_clones, bl);
+ ::decode(num_object_copies, bl);
+ ::decode(num_objects_missing_on_primary, bl);
+ ::decode(num_objects_degraded, bl);
+ if (struct_v >= 2)
+ ::decode(num_objects_unfound, bl);
+ ::decode(num_rd, bl);
+ ::decode(num_rd_kb, bl);
+ ::decode(num_wr, bl);
+ ::decode(num_wr_kb, bl);
+ if (struct_v >= 4)
+ ::decode(num_scrub_errors, bl);
+ else
+ num_scrub_errors = 0;
+ if (struct_v >= 5) {
+ ::decode(num_objects_recovered, bl);
+ ::decode(num_bytes_recovered, bl);
+ ::decode(num_keys_recovered, bl);
+ } else {
+ num_objects_recovered = 0;
+ num_bytes_recovered = 0;
+ num_keys_recovered = 0;
+ }
+ if (struct_v >= 6) {
+ ::decode(num_shallow_scrub_errors, bl);
+ ::decode(num_deep_scrub_errors, bl);
+ } else {
+ num_shallow_scrub_errors = 0;
+ num_deep_scrub_errors = 0;
+ }
+ if (struct_v >= 7) {
+ ::decode(num_objects_dirty, bl);
+ ::decode(num_whiteouts, bl);
+ } else {
+ num_objects_dirty = 0;
+ num_whiteouts = 0;
+ }
+ if (struct_v >= 8) {
+ ::decode(num_objects_omap, bl);
+ } else {
+ num_objects_omap = 0;
+ }
+ if (struct_v >= 9) {
+ ::decode(num_objects_hit_set_archive, bl);
+ } else {
+ num_objects_hit_set_archive = 0;
+ }
+ if (struct_v >= 10) {
+ ::decode(num_objects_misplaced, bl);
+ } else {
+ num_objects_misplaced = 0;
+ }
+ if (struct_v >= 11) {
+ ::decode(num_bytes_hit_set_archive, bl);
+ } else {
+ num_bytes_hit_set_archive = 0;
+ }
+ if (struct_v >= 12) {
+ ::decode(num_flush, bl);
+ ::decode(num_flush_kb, bl);
+ ::decode(num_evict, bl);
+ ::decode(num_evict_kb, bl);
+ ::decode(num_promote, bl);
+ } else {
+ num_flush = 0;
+ num_flush_kb = 0;
+ num_evict = 0;
+ num_evict_kb = 0;
+ num_promote = 0;
+ }
+ if (struct_v >= 13) {
+ ::decode(num_flush_mode_high, bl);
+ ::decode(num_flush_mode_low, bl);
+ ::decode(num_evict_mode_some, bl);
+ ::decode(num_evict_mode_full, bl);
+ } else {
+ num_flush_mode_high = 0;
+ num_flush_mode_low = 0;
+ num_evict_mode_some = 0;
+ num_evict_mode_full = 0;
+ }
+ if (struct_v >= 14) {
+ ::decode(num_objects_pinned, bl);
+ } else {
+ num_objects_pinned = 0;
+ }
+ if (struct_v >= 15) {
+ ::decode(num_objects_missing, bl);
+ } else {
+ num_objects_missing = 0;
+ }
}
DECODE_FINISH(bl);
}
* a summation of object stats
*
* This is just a container for object stats; we don't know what for.
+ *
+ * If you add members in object_stat_sum_t, you should make sure there are
+ * not padding among these members.
+ * You should also modify the padding_check function.
+
*/
struct object_stat_sum_t {
/**************************************************************************
int64_t num_object_clones;
int64_t num_object_copies; // num_objects * num_replicas
int64_t num_objects_missing_on_primary;
- int64_t num_objects_missing;
int64_t num_objects_degraded;
- int64_t num_objects_misplaced;
int64_t num_objects_unfound;
int64_t num_rd;
int64_t num_rd_kb;
int64_t num_wr;
int64_t num_wr_kb;
int64_t num_scrub_errors; // total deep and shallow scrub errors
- int64_t num_shallow_scrub_errors;
- int64_t num_deep_scrub_errors;
int64_t num_objects_recovered;
int64_t num_bytes_recovered;
int64_t num_keys_recovered;
+ int64_t num_shallow_scrub_errors;
+ int64_t num_deep_scrub_errors;
int64_t num_objects_dirty;
int64_t num_whiteouts;
int64_t num_objects_omap;
int64_t num_objects_hit_set_archive;
+ int64_t num_objects_misplaced;
int64_t num_bytes_hit_set_archive;
int64_t num_flush;
int64_t num_flush_kb;
int32_t num_evict_mode_some; // 1 when in evict some mode, otherwise 0
int32_t num_evict_mode_full; // 1 when in evict full mode, otherwise 0
int64_t num_objects_pinned;
+ int64_t num_objects_missing;
object_stat_sum_t()
: num_bytes(0),
num_objects(0), num_object_clones(0), num_object_copies(0),
- num_objects_missing_on_primary(0), num_objects_missing(0),
- num_objects_degraded(0),
- num_objects_misplaced(0),
+ num_objects_missing_on_primary(0), num_objects_degraded(0),
num_objects_unfound(0),
num_rd(0), num_rd_kb(0), num_wr(0), num_wr_kb(0),
- num_scrub_errors(0), num_shallow_scrub_errors(0),
- num_deep_scrub_errors(0),
+ num_scrub_errors(0),
num_objects_recovered(0),
num_bytes_recovered(0),
num_keys_recovered(0),
+ num_shallow_scrub_errors(0),
+ num_deep_scrub_errors(0),
num_objects_dirty(0),
num_whiteouts(0),
num_objects_omap(0),
num_objects_hit_set_archive(0),
+ num_objects_misplaced(0),
num_bytes_hit_set_archive(0),
num_flush(0),
num_flush_kb(0),
num_promote(0),
num_flush_mode_high(0), num_flush_mode_low(0),
num_evict_mode_some(0), num_evict_mode_full(0),
- num_objects_pinned(0)
+ num_objects_pinned(0),
+ num_objects_missing(0)
{}
void floor(int64_t f) {
void sub(const object_stat_sum_t& o);
void dump(Formatter *f) const;
+ void padding_check() {
+ static_assert(
+ sizeof(object_stat_sum_t) ==
+ sizeof(num_bytes) +
+ sizeof(num_objects) +
+ sizeof(num_object_clones) +
+ sizeof(num_object_copies) +
+ sizeof(num_objects_missing_on_primary) +
+ sizeof(num_objects_degraded) +
+ sizeof(num_objects_unfound) +
+ sizeof(num_rd) +
+ sizeof(num_rd_kb) +
+ sizeof(num_wr) +
+ sizeof(num_wr_kb) +
+ sizeof(num_scrub_errors) +
+ sizeof(num_objects_recovered) +
+ sizeof(num_bytes_recovered) +
+ sizeof(num_keys_recovered) +
+ sizeof(num_shallow_scrub_errors) +
+ sizeof(num_deep_scrub_errors) +
+ sizeof(num_objects_dirty) +
+ sizeof(num_whiteouts) +
+ sizeof(num_objects_omap) +
+ sizeof(num_objects_hit_set_archive) +
+ sizeof(num_objects_misplaced) +
+ sizeof(num_bytes_hit_set_archive) +
+ sizeof(num_flush) +
+ sizeof(num_flush_kb) +
+ sizeof(num_evict) +
+ sizeof(num_evict_kb) +
+ sizeof(num_promote) +
+ sizeof(num_flush_mode_high) +
+ sizeof(num_flush_mode_low) +
+ sizeof(num_evict_mode_some) +
+ sizeof(num_evict_mode_full) +
+ sizeof(num_objects_pinned) +
+ sizeof(num_objects_missing)
+ ,
+ "object_stat_sum_t have padding");
+ }
void encode(bufferlist& bl) const;
void decode(bufferlist::iterator& bl);
static void generate_test_instances(list<object_stat_sum_t*>& o);