#include "rgw_string.h"
#include "rgw_multi.h"
#include "rgw_op.h"
+#include "rgw_bucket_sync.h"
#include "services/svc_zone.h"
#include "services/svc_sys_obj.h"
return choose_oid(bs);
}
-int RGWDataChangesLog::add_entry(const rgw_bucket& bucket, int shard_id) {
- if (!svc.zone->need_to_log_data())
+int RGWDataChangesLog::add_entry(const RGWBucketInfo& bucket_info, int shard_id) {
+ if (!svc.zone->need_to_log_data() &&
+ (!bucket_info.sync_policy || !bucket_info.sync_policy->zone_is_source(svc.zone->zone_id()))) {
return 0;
+ }
+
+ auto& bucket = bucket_info.bucket;
if (observer) {
observer->on_bucket_changed(bucket.get_key());
std::atomic<bool> down_flag = { false };
struct ChangeStatus {
+ std::shared_ptr<const RGWBucketSyncPolicy> sync_policy;
real_time cur_expiration;
real_time cur_sent;
bool pending = false;
int choose_oid(const rgw_bucket_shard& bs);
const std::string& get_oid(int shard_id) const { return oids[shard_id]; }
- int add_entry(const rgw_bucket& bucket, int shard_id);
+ int add_entry(const RGWBucketInfo& bucket_info, int shard_id);
int get_log_shard_id(rgw_bucket& bucket, int shard_id);
int renew_entries();
int list_entries(int shard, const real_time& start_time, const real_time& end_time, int max_entries,
/* ignoring error, can't do anything about it */
continue;
}
- r = store->svc.datalog_rados->add_entry(bs.bucket, bs.shard_id);
+ r = store->svc.datalog_rados->add_entry(bucket_info, bs.shard_id);
if (r < 0) {
lderr(store->ctx()) << "ERROR: failed writing data log" << dendl;
}
}
if (target->bucket_info.datasync_flag_enabled()) {
- r = store->svc.datalog_rados->add_entry(bs->bucket, bs->shard_id);
+ r = store->data_log->add_entry(target->bucket_info, bs->shard_id);
if (r < 0) {
lderr(store->ctx()) << "ERROR: failed writing data log" << dendl;
return r;
ret = store->cls_obj_complete_add(*bs, obj, optag, poolid, epoch, ent, category, remove_objs, bilog_flags, zones_trace);
if (target->bucket_info.datasync_flag_enabled()) {
- int r = store->svc.datalog_rados->add_entry(bs->bucket, bs->shard_id);
+ int r = store->data_log->add_entry(target->bucket_info, bs->shard_id);
if (r < 0) {
lderr(store->ctx()) << "ERROR: failed writing data log" << dendl;
}
ret = store->cls_obj_complete_del(*bs, optag, poolid, epoch, obj, removed_mtime, remove_objs, bilog_flags, zones_trace);
if (target->bucket_info.datasync_flag_enabled()) {
- int r = store->svc.datalog_rados->add_entry(bs->bucket, bs->shard_id);
+ int r = store->data_log->add_entry(target->bucket_info, bs->shard_id);
if (r < 0) {
lderr(store->ctx()) << "ERROR: failed writing data log" << dendl;
}
* have no way to tell that they're all caught up
*/
if (target->bucket_info.datasync_flag_enabled()) {
- int r = store->svc.datalog_rados->add_entry(bs->bucket, bs->shard_id);
+ int r = store->data_log->add_entry(target->bucket_info, bs->shard_id);
if (r < 0) {
lderr(store->ctx()) << "ERROR: failed writing data log" << dendl;
}
}
if (log_data_change && bucket_info.datasync_flag_enabled()) {
- svc.datalog_rados->add_entry(bs.bucket, bs.shard_id);
+ data_log->add_entry(bucket_info, bs.shard_id);
}
return 0;