summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYehuda Sadeh <yehuda@inktank.com>2013-07-19 21:35:47 -0700
committerYehuda Sadeh <yehuda@inktank.com>2013-07-22 14:44:39 -0700
commitc5025d4ad41a5f1e826094a805e5a46d91df4162 (patch)
tree2c617323883e53d965b9818ab8ac39948e6b6c2e
parent6094685e4f2b87a20febce4686ba88e98dcc6078 (diff)
downloadceph-c5025d4ad41a5f1e826094a805e5a46d91df4162.tar.gz
rgw: dump progress through swift object copy
Signed-off-by: Yehuda Sadeh <yehuda@inktank.com>
-rw-r--r--src/rgw/rgw_rest_swift.cc34
-rw-r--r--src/rgw/rgw_rest_swift.h4
2 files changed, 32 insertions, 6 deletions
diff --git a/src/rgw/rgw_rest_swift.cc b/src/rgw/rgw_rest_swift.cc
index 157158e7ed7..f9d8c2eb3a9 100644
--- a/src/rgw/rgw_rest_swift.cc
+++ b/src/rgw/rgw_rest_swift.cc
@@ -475,13 +475,37 @@ int RGWCopyObj_ObjStore_SWIFT::get_params()
return 0;
}
+void RGWCopyObj_ObjStore_SWIFT::send_partial_response(off_t ofs)
+{
+ if (!sent_header) {
+ if (!ret)
+ ret = STATUS_CREATED;
+ set_req_state_err(s, ret);
+ dump_errno(s);
+ end_header(s);
+
+ if (ret == 0) {
+ s->formatter->open_array_section("progress");
+ }
+ sent_header = true;
+ } else {
+ s->formatter->dump_int("ofs", (uint64_t)ofs);
+ }
+ rgw_flush_formatter(s, s->formatter);
+}
+
void RGWCopyObj_ObjStore_SWIFT::send_response()
{
- if (!ret)
- ret = STATUS_CREATED;
- set_req_state_err(s, ret);
- dump_errno(s);
- end_header(s);
+ if (!sent_header) {
+ if (!ret)
+ ret = STATUS_CREATED;
+ set_req_state_err(s, ret);
+ dump_errno(s);
+ end_header(s);
+ } else {
+ s->formatter->close_section();
+ rgw_flush_formatter(s, s->formatter);
+ }
}
int RGWGetObj_ObjStore_SWIFT::send_response_data(bufferlist& bl, off_t bl_ofs, off_t bl_len)
diff --git a/src/rgw/rgw_rest_swift.h b/src/rgw/rgw_rest_swift.h
index e4b6f0bccee..1c23ab29204 100644
--- a/src/rgw/rgw_rest_swift.h
+++ b/src/rgw/rgw_rest_swift.h
@@ -100,13 +100,15 @@ public:
};
class RGWCopyObj_ObjStore_SWIFT : public RGWCopyObj_ObjStore {
+ bool sent_header;
public:
- RGWCopyObj_ObjStore_SWIFT() {}
+ RGWCopyObj_ObjStore_SWIFT() : sent_header(false) {}
~RGWCopyObj_ObjStore_SWIFT() {}
int init_dest_policy();
int get_params();
void send_response();
+ void send_partial_response(off_t ofs);
};
class RGWGetACLs_ObjStore_SWIFT : public RGWGetACLs_ObjStore {