: vbuckets(vb_map), shardId(sid) { }
bool visitBucket(RCPtr<VBucket> &vb) {
if (vbuckets.getShardByVbId(vb->getId())->getId() == shardId) {
- snapshot_range_t range;
- vb->getPersistedSnapshot(range);
+ const snapshot_range_t range = vb->getPersistedSnapshot();
std::string failovers = vb->failovers->toJSON();
uint64_t chkId = vbuckets.getPersistenceCheckpointId(vb->getId());
uint64_t chkId = vbMap.getPersistenceCheckpointId(vbid);
std::string failovers = vb->failovers->toJSON();
- snapshot_range_t range;
- vb->getPersistedSnapshot(range);
+ const snapshot_range_t range = vb->getPersistedSnapshot();
vbucket_state vb_state(vb->getState(), chkId, 0, vb->getHighSeqno(),
vb->getPurgeSeqno(), range.start, range.end,
vb->getMaxCas(), failovers);
}
if (to == vbucket_state_active && !transfer) {
- snapshot_range_t range;
- vb->getPersistedSnapshot(range);
+ const snapshot_range_t range = vb->getPersistedSnapshot();
if (range.end == vbMap.getPersistenceSeqno(vbid)) {
vb->failovers->createEntry(range.end);
} else {
checked_snprintf(buffer, sizeof(buffer), "vb_%d:purge_seqno",
vb->getId());
add_casted_stat(buffer, vb->getPurgeSeqno(), add_stat, cookie);
- snapshot_range_t range;
- vb->getPersistedSnapshot(range);
+ const snapshot_range_t range = vb->getPersistedSnapshot();
checked_snprintf(buffer, sizeof(buffer),
"vb_%d:last_persisted_snap_start",
vb->getId());
persisted_snapshot_end = end;
}
- void getPersistedSnapshot(snapshot_range_t& range) {
+ snapshot_range_t getPersistedSnapshot() const {
LockHolder lh(snapshotMutex);
- range.start = persisted_snapshot_start;
- range.end = persisted_snapshot_end;
+ return {persisted_snapshot_start, persisted_snapshot_end};
}
uint64_t getMaxCas() {
/* snapshotMutex is used to update/read the pair {start, end} atomically,
but not if reading a single field. */
- Mutex snapshotMutex;
+ mutable Mutex snapshotMutex;
uint64_t persisted_snapshot_start;
uint64_t persisted_snapshot_end;