]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
rgw: Check for lost lease more often
authorAdam C. Emerson <aemerson@redhat.com>
Fri, 14 Oct 2022 16:49:03 +0000 (12:49 -0400)
committerAdam C. Emerson <aemerson@redhat.com>
Fri, 13 Jan 2023 14:19:53 +0000 (09:19 -0500)
Flush the marker tracker and abort if we don't still have it.

Resolves: rhbz#2129718
Signed-off-by: Adam C. Emerson <aemerson@redhat.com>
src/rgw/driver/rados/rgw_data_sync.cc

index 9ecd09363064de75104d251f7288a8c85465f028..5e91f3d24b658f5dd8dfb805bb17826289caa15a 100644 (file)
@@ -1919,6 +1919,11 @@ public:
         for (modified_iter = current_modified.begin();
             modified_iter != current_modified.end();
             ++modified_iter) {
+         if (!lease_cr->is_locked()) {
+           yield call(marker_tracker->flush());
+           drain_all();
+           return set_cr_error(-ECANCELED);
+         }
           retcode = parse_bucket_key(modified_iter->key, source_bs);
           if (retcode < 0) {
             tn->log(1, SSTR("failed to parse bucket shard: "
@@ -1944,6 +1949,11 @@ public:
                           << " entries"));
           iter = error_entries.begin();
           for (; iter != error_entries.end(); ++iter) {
+           if (!lease_cr->is_locked()) {
+             yield call(marker_tracker->flush());
+             drain_all();
+             return set_cr_error(-ECANCELED);
+           }
             error_marker = iter->first;
             entry_timestamp = rgw::error_repo::decode_value(iter->second);
             retcode = rgw::error_repo::decode_key(iter->first, source_bs, gen);
@@ -2002,9 +2012,13 @@ public:
         for (log_iter = log_entries.begin();
             log_iter != log_entries.end();
             ++log_iter) {
-          tn->log(20, SSTR("shard_id=" << shard_id << " log_entry: "
-                          << log_iter->log_id << ":" << log_iter->log_timestamp
-                          << ":" << log_iter->entry.key));
+         if (!lease_cr->is_locked()) {
+           yield call(marker_tracker->flush());
+           drain_all();
+           return set_cr_error(-ECANCELED);
+         }
+
+          tn->log(20, SSTR("shard_id=" << shard_id << " log_entry: " << log_iter->log_id << ":" << log_iter->log_timestamp << ":" << log_iter->entry.key));
           retcode = parse_bucket_key(log_iter->entry.key, source_bs);
           if (retcode < 0) {
             tn->log(1, SSTR("failed to parse bucket shard: "