struct pg_shard_t {
+ static const int32_t NO_OSD = 0x7fffffff;
int32_t osd;
shard_id_t shard;
pg_shard_t() : osd(-1), shard(shard_id_t::NO_SHARD) {}
bool is_undefined() const {
return osd == -1;
}
+ string get_osd() const { return (osd == NO_OSD ? "NONE" : to_string(osd)); }
void encode(bufferlist &bl) const;
void decode(bufferlist::iterator &bl);
void dump(Formatter *f) const {
#define PG_STATE_ACTIVE (1<<1) // i am active. (primary: replicas too)
#define PG_STATE_CLEAN (1<<2) // peers are complete, clean of stray replicas.
#define PG_STATE_DOWN (1<<4) // a needed replica is down, PG offline
-//#define PG_STATE_REPLAY (1<<5) // crashed, waiting for replay
-//#define PG_STATE_STRAY (1<<6) // i must notify the primary i exist.
+#define PG_STATE_RECOVERY_UNFOUND (1<<5) // recovery stopped due to unfound
+#define PG_STATE_BACKFILL_UNFOUND (1<<6) // backfill stopped due to unfound
//#define PG_STATE_SPLITTING (1<<7) // i am splitting
#define PG_STATE_SCRUBBING (1<<8) // scrubbing
//#define PG_STATE_SCRUBQ (1<<9) // queued for scrub
int32_t up_primary;
int32_t acting_primary;
+ // snaptrimq.size() is 64bit, but let's be serious - anything over 50k is
+ // absurd already, so cap it to 2^32 and save 4 bytes at the same time
+ uint32_t snaptrimq_len;
+
bool stats_invalid:1;
/// true if num_objects_dirty is not accurate (because it was not
/// maintained starting from pool creation)
mapping_epoch(0),
up_primary(-1),
acting_primary(-1),
+ snaptrimq_len(0),
stats_invalid(false),
dirty_stats_invalid(false),
omap_stats_invalid(false),
log_size = f;
if (ondisk_log_size < f)
ondisk_log_size = f;
+ if (snaptrimq_len < f)
+ snaptrimq_len = f;
}
void add(const pg_stat_t& o) {
stats.add(o.stats);
log_size += o.log_size;
ondisk_log_size += o.ondisk_log_size;
+ if (((uint64_t)snaptrimq_len + (uint64_t)o.snaptrimq_len) > (uint64_t)(1 << 31)) {
+ snaptrimq_len = 1 << 31;
+ } else {
+ snaptrimq_len += o.snaptrimq_len;
+ }
}
void sub(const pg_stat_t& o) {
stats.sub(o.stats);
log_size -= o.log_size;
ondisk_log_size -= o.ondisk_log_size;
+ if (o.snaptrimq_len < snaptrimq_len) {
+ snaptrimq_len -= o.snaptrimq_len;
+ } else {
+ snaptrimq_len = 0;
+ }
}
bool is_acting_osd(int32_t osd, bool primary) const;