summaryrefslogtreecommitdiff
path: root/src/cls_rgw.cc
diff options
context:
space:
mode:
authorYehuda Sadeh <yehuda.sadeh@dreamhost.com>2012-04-13 23:35:04 -0700
committerYehuda Sadeh <yehuda@hq.newdream.net>2012-04-16 12:32:59 -0700
commitf87a6a0f27c1a805aa370ccb0106c8e875e0be2c (patch)
tree0fa4f260013ece2311b14de9e18f1401f1c990a2 /src/cls_rgw.cc
parent73badda69465e09e30b96d11fbf75d6d60979967 (diff)
downloadceph-f87a6a0f27c1a805aa370ccb0106c8e875e0be2c.tar.gz
cls_rgw: rgw_dir_suggest_changes() don't try to decode cur_disk
don't try to decode cur_disk if bufferlist is zero sized. Signed-off-by: Yehuda Sadeh <yehuda.sadeh@dreamhost.com>
Diffstat (limited to 'src/cls_rgw.cc')
-rw-r--r--src/cls_rgw.cc30
1 files changed, 16 insertions, 14 deletions
diff --git a/src/cls_rgw.cc b/src/cls_rgw.cc
index 06746d51270..ffaf57f17ca 100644
--- a/src/cls_rgw.cc
+++ b/src/cls_rgw.cc
@@ -347,21 +347,23 @@ int rgw_dir_suggest_changes(cls_method_context_t hctx, bufferlist *in, bufferlis
}
cls_cxx_map_read_key(hctx, cur_change.name, &cur_disk_bl);
- bufferlist::iterator cur_disk_iter = cur_disk_bl.begin();
- try {
- ::decode(cur_disk, cur_disk_iter);
- } catch (buffer::error& error) {
- CLS_LOG("ERROR: rgw_dir_suggest_changes(): failed to decode cur_disk\n");
- return -EINVAL;
- }
+ if (cur_disk_bl.length()) {
+ bufferlist::iterator cur_disk_iter = cur_disk_bl.begin();
+ try {
+ ::decode(cur_disk, cur_disk_iter);
+ } catch (buffer::error& error) {
+ CLS_LOG("ERROR: rgw_dir_suggest_changes(): failed to decode cur_disk\n");
+ return -EINVAL;
+ }
- utime_t cur_time = ceph_clock_now(g_ceph_context);
- map<string, struct rgw_bucket_pending_info>::iterator iter =
- cur_disk.pending_map.begin();
- while(iter != cur_disk.pending_map.end()) {
- map<string, struct rgw_bucket_pending_info>::iterator cur_iter=iter++;
- if (cur_time > (cur_iter->second.timestamp + CEPH_RGW_TAG_TIMEOUT)) {
- cur_disk.pending_map.erase(cur_iter);
+ utime_t cur_time = ceph_clock_now(g_ceph_context);
+ map<string, struct rgw_bucket_pending_info>::iterator iter =
+ cur_disk.pending_map.begin();
+ while(iter != cur_disk.pending_map.end()) {
+ map<string, struct rgw_bucket_pending_info>::iterator cur_iter=iter++;
+ if (cur_time > (cur_iter->second.timestamp + CEPH_RGW_TAG_TIMEOUT)) {
+ cur_disk.pending_map.erase(cur_iter);
+ }
}
}