diff options
author | Yehuda Sadeh <yehuda.sadeh@dreamhost.com> | 2012-04-13 23:35:04 -0700 |
---|---|---|
committer | Yehuda Sadeh <yehuda@hq.newdream.net> | 2012-04-16 12:32:59 -0700 |
commit | f87a6a0f27c1a805aa370ccb0106c8e875e0be2c (patch) | |
tree | 0fa4f260013ece2311b14de9e18f1401f1c990a2 /src/cls_rgw.cc | |
parent | 73badda69465e09e30b96d11fbf75d6d60979967 (diff) | |
download | ceph-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.cc | 30 |
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); + } } } |