Skip to content
This repository was archived by the owner on Feb 8, 2024. It is now read-only.

Commit f39063a

Browse files
shriya-deshmukhjjxsg
authored andcommitted
rgw_sal_motr:[CORTX-33799] Handle progress_cb response in case of copy-object operation failure. (#386)
Problem: If copy operation failed after copying some data, then it was throwing an invalid XML error due to partial progress response. i.e rgw was not closing 'CopyObjectResult' tag in case of failure. Solution: Remove progress_cb call from rgw_sal_motr layer, and send 'dump_continue' signal to avoid client timeout during copy operation. Signed-off-by: Shriya Deshmukh <[email protected]>
1 parent e0f7d3d commit f39063a

File tree

2 files changed

+9
-12
lines changed

2 files changed

+9
-12
lines changed

src/rgw/rgw_sal_motr.cc

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ extern "C" {
4141
#include "rgw_bucket.h"
4242
#include "rgw_quota.h"
4343
#include "motr/addb/rgw_addb.h"
44+
#include "rgw_rest.h"
4445

4546
#define dout_subsys ceph_subsys_rgw
4647

@@ -2295,12 +2296,10 @@ int MotrObject::delete_obj_aio(const DoutPrefixProvider* dpp, RGWObjState* astat
22952296

22962297
int MotrCopyObj_CB::handle_data(bufferlist& bl, off_t bl_ofs, off_t bl_len)
22972298
{
2298-
progress_cb progress_CB = this->get_progress_cb();
22992299
int rc = 0;
23002300
ldpp_dout(m_dpp, 20) << "Offset=" << bl_ofs << " Length = "
23012301
<< " Write Offset=" << write_offset << bl_len << dendl;
23022302

2303-
23042303
//offset is zero and bufferlength is equal to bl_len
23052304
if (!bl_ofs && bl_len == bl.length()) {
23062305
bufferptr bptr(bl.c_str(), bl_len);
@@ -2313,9 +2312,7 @@ int MotrCopyObj_CB::handle_data(bufferlist& bl, off_t bl_ofs, off_t bl_len)
23132312
write_offset << "failed rc=" << rc << dendl;
23142313
}
23152314
write_offset += bl_len;
2316-
if(progress_CB){
2317-
progress_CB(write_offset, this->get_progress_data());
2318-
}
2315+
dump_continue(s);
23192316
return rc;
23202317
}
23212318

@@ -2329,6 +2326,7 @@ int MotrCopyObj_CB::handle_data(bufferlist& bl, off_t bl_ofs, off_t bl_len)
23292326
<< " Write Offset=" << write_offset << dendl;
23302327
return rc;
23312328
}
2329+
dump_continue(s);
23322330
write_offset += bl_len;
23332331

23342332
ldpp_dout(m_dpp, 20) << "MotrCopyObj_CB handle_data called rc=" << rc << dendl;
@@ -2411,7 +2409,7 @@ int MotrObject::copy_object_same_zone(RGWObjectCtx& obj_ctx,
24112409
}
24122410

24132411
// Create filter object.
2414-
MotrCopyObj_CB cb(dpp, dst_writer);
2412+
MotrCopyObj_CB cb(dpp, dst_writer, obj_ctx);
24152413
MotrCopyObj_Filter* filter = &cb;
24162414

24172415
// Get offsets.
@@ -2422,9 +2420,6 @@ int MotrObject::copy_object_same_zone(RGWObjectCtx& obj_ctx,
24222420
return rc;
24232421
}
24242422

2425-
//setting the values of progress_cb and progress_data in MotrCopyObj_Filter class
2426-
filter->set_progress_callback(progress_cb, progress_data);
2427-
24282423
// read::iterate -> handle_data() -> write::process
24292424
rc = read_op->iterate(dpp, cur_ofs, cur_end, filter, y);
24302425
if (rc < 0){

src/rgw/rgw_sal_motr.h

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -531,13 +531,15 @@ class MotrCopyObj_CB : public MotrCopyObj_Filter
531531
const DoutPrefixProvider* m_dpp;
532532
std::shared_ptr<rgw::sal::Writer> m_dst_writer;
533533
off_t write_offset;
534-
534+
struct req_state *s;
535535
public:
536536
explicit MotrCopyObj_CB(const DoutPrefixProvider* dpp,
537-
std::shared_ptr<rgw::sal::Writer> dst_writer) :
537+
std::shared_ptr<rgw::sal::Writer> dst_writer, RGWObjectCtx& obj_ctx) :
538538
m_dpp(dpp),
539539
m_dst_writer(dst_writer),
540-
write_offset(0) {}
540+
write_offset(0) {
541+
s = static_cast<req_state*>(obj_ctx.get_private());
542+
}
541543
virtual ~MotrCopyObj_CB() override {}
542544
int handle_data(bufferlist& bl, off_t bl_ofs, off_t bl_len) override;
543545
};

0 commit comments

Comments
 (0)