RGWCoroutine *store_marker(const string& new_marker, uint64_t index_pos, const real_time& timestamp) override {
sync_marker.position = new_marker;
+ sync_marker.timestamp = timestamp;
map<string, bufferlist> attrs;
sync_marker.encode_attr(attrs);
- tn->log(20, SSTR("updating marker marker_oid=" << marker_oid << " marker=" << new_marker));
+ tn->log(20, SSTR("updating marker marker_oid=" << marker_oid << " marker=" << new_marker << " timestamp=" << timestamp));
return new RGWSimpleRadosWriteAttrsCR(sync_env->async_rados,
sync_env->svc->sysobj,
rgw_raw_obj(sync_env->svc->zone->get_zone_params().log_pool, marker_oid),
struct rgw_bucket_shard_inc_sync_marker {
string position;
-
- rgw_bucket_shard_inc_sync_marker() {}
+ ceph::real_time timestamp;
void encode_attr(map<string, bufferlist>& attrs);
void encode(bufferlist& bl) const {
- ENCODE_START(1, 1, bl);
+ ENCODE_START(2, 1, bl);
encode(position, bl);
+ encode(timestamp, bl);
ENCODE_FINISH(bl);
}
void decode(bufferlist::const_iterator& bl) {
- DECODE_START(1, bl);
+ DECODE_START(2, bl);
decode(position, bl);
- DECODE_FINISH(bl);
+ if (struct_v >= 2) {
+ decode(timestamp, bl);
+ }
+ DECODE_FINISH(bl);
}
void dump(Formatter *f) const;
void decode_json(JSONObj *obj);
-
- bool operator<(const rgw_bucket_shard_inc_sync_marker& m) const {
- return (position < m.position);
- }
};
WRITE_CLASS_ENCODER(rgw_bucket_shard_inc_sync_marker)
void rgw_bucket_shard_inc_sync_marker::decode_json(JSONObj *obj)
{
JSONDecoder::decode_json("position", position, obj);
+ JSONDecoder::decode_json("timestamp", timestamp, obj);
}
void rgw_bucket_shard_inc_sync_marker::dump(Formatter *f) const
{
encode_json("position", position, f);
+ encode_json("timestamp", timestamp, f);
}
void rgw_bucket_shard_sync_info::decode_json(JSONObj *obj)