diff options
author | Yehuda Sadeh <yehuda@inktank.com> | 2013-06-20 14:42:17 -0700 |
---|---|---|
committer | Yehuda Sadeh <yehuda@inktank.com> | 2013-06-20 14:42:17 -0700 |
commit | 234fab09025852ed57672032e715f0faa8f24b1a (patch) | |
tree | 293d1bf9875f909cd2b55e913b3a5241374b916b | |
parent | 6d6dc42ee06af0015a08d38334c2348deb50f213 (diff) | |
parent | 0deb6d4093d20e8783f012cf91f87604081e0e57 (diff) | |
download | ceph-234fab09025852ed57672032e715f0faa8f24b1a.tar.gz |
Merge branch 'wip-rgw-geo-enovance' into wip-rgw-geo-2
-rw-r--r-- | src/rgw/rgw_admin.cc | 3 | ||||
-rw-r--r-- | src/rgw/rgw_bucket.cc | 3 | ||||
-rw-r--r-- | src/rgw/rgw_bucket.h | 8 | ||||
-rw-r--r-- | src/rgw/rgw_metadata.cc | 24 | ||||
-rw-r--r-- | src/rgw/rgw_metadata.h | 9 | ||||
-rw-r--r-- | src/rgw/rgw_rados.cc | 17 | ||||
-rw-r--r-- | src/rgw/rgw_rados.h | 5 | ||||
-rw-r--r-- | src/rgw/rgw_rest_log.cc | 136 | ||||
-rw-r--r-- | src/test/test_rgw_admin_log.cc | 137 |
9 files changed, 218 insertions, 124 deletions
diff --git a/src/rgw/rgw_admin.cc b/src/rgw/rgw_admin.cc index eff8a6889e5..435013b1e8d 100644 --- a/src/rgw/rgw_admin.cc +++ b/src/rgw/rgw_admin.cc @@ -1840,7 +1840,6 @@ next: if (ret < 0) return -ret; - int i = (specified_shard_id ? shard_id : 0); formatter->open_array_section("entries"); @@ -1850,7 +1849,7 @@ next: list<cls_log_entry> entries; - meta_log->init_list_entries(i, start_time, end_time, &handle); + meta_log->init_list_entries(i, start_time, end_time, marker, &handle); bool truncated; do { diff --git a/src/rgw/rgw_bucket.cc b/src/rgw/rgw_bucket.cc index 7a6423f660b..7b758b08fd1 100644 --- a/src/rgw/rgw_bucket.cc +++ b/src/rgw/rgw_bucket.cc @@ -1159,7 +1159,7 @@ int RGWDataChangesLog::list_entries(int shard, utime_t& start_time, utime_t& end list<cls_log_entry> log_entries; int ret = store->time_log_list(oids[shard], start_time, end_time, - max_entries, log_entries, marker, truncated); + max_entries, log_entries, marker, truncated); if (ret < 0) return ret; @@ -1182,7 +1182,6 @@ int RGWDataChangesLog::list_entries(int shard, utime_t& start_time, utime_t& end int RGWDataChangesLog::list_entries(utime_t& start_time, utime_t& end_time, int max_entries, list<rgw_data_change>& entries, LogMarker& marker, bool *ptruncated) { bool truncated; - entries.clear(); for (; marker.shard < num_shards && (int)entries.size() < max_entries; diff --git a/src/rgw/rgw_bucket.h b/src/rgw/rgw_bucket.h index 4431c77f97e..f4ff4ec15cc 100644 --- a/src/rgw/rgw_bucket.h +++ b/src/rgw/rgw_bucket.h @@ -344,11 +344,11 @@ public: list<rgw_data_change>& entries, string& marker, bool *truncated); int trim_entries(int shard_id, utime_t& start_time, utime_t& end_time); int trim_entries(utime_t& start_time, utime_t& end_time); - int lock_exclusive(int shard_id, utime_t& duration, string& owner_id) { - return store->lock_exclusive(store->zone.log_pool, oids[shard_id], duration, owner_id); + int lock_exclusive(int shard_id, utime_t& duration, string& zone_id, string& owner_id) { + return store->lock_exclusive(store->zone.log_pool, oids[shard_id], duration, zone_id, owner_id); } - int unlock(int shard_id, string& owner_id) { - return store->unlock(store->zone.log_pool, oids[shard_id], owner_id); + int unlock(int shard_id, string& zone_id, string& owner_id) { + return store->unlock(store->zone.log_pool, oids[shard_id], zone_id, owner_id); } struct LogMarker { int shard; diff --git a/src/rgw/rgw_metadata.cc b/src/rgw/rgw_metadata.cc index 2a90f0d0e0c..6242806ef4d 100644 --- a/src/rgw/rgw_metadata.cc +++ b/src/rgw/rgw_metadata.cc @@ -79,13 +79,15 @@ int RGWMetadataLog::add_entry(RGWRados *store, string& section, string& key, buf return store->time_log_add(oid, now, section, key, bl); } -void RGWMetadataLog::init_list_entries(int shard_id, utime_t& from_time, utime_t& end_time, void **handle) +void RGWMetadataLog::init_list_entries(int shard_id, utime_t& from_time, utime_t& end_time, + string& marker, void **handle) { LogListCtx *ctx = new LogListCtx(); ctx->cur_shard = shard_id; ctx->from_time = from_time; - ctx->end_time = end_time; + ctx->end_time = end_time; + ctx->marker = marker; get_shard_oid(ctx->cur_shard, ctx->cur_oid); @@ -99,7 +101,7 @@ void RGWMetadataLog::complete_list_entries(void *handle) { int RGWMetadataLog::list_entries(void *handle, int max_entries, - list<cls_log_entry>& entries, + list<cls_log_entry>& entries, bool *truncated) { LogListCtx *ctx = (LogListCtx *)handle; @@ -108,8 +110,6 @@ int RGWMetadataLog::list_entries(void *handle, return 0; } - entries.clear(); - int ret = store->time_log_list(ctx->cur_oid, ctx->from_time, ctx->end_time, max_entries, entries, ctx->marker, truncated); if ((ret < 0) && (ret != -ENOENT)) @@ -136,18 +136,18 @@ int RGWMetadataLog::trim(int shard_id, utime_t& from_time, utime_t& end_time) return ret; } -int RGWMetadataLog::lock_exclusive(int shard_id, utime_t& duration, string& owner_id) { +int RGWMetadataLog::lock_exclusive(int shard_id, utime_t& duration, string& zone_id, string& owner_id) { string oid; get_shard_oid(shard_id, oid); - return store->lock_exclusive(store->zone.log_pool, oid, duration, owner_id); + return store->lock_exclusive(store->zone.log_pool, oid, duration, zone_id, owner_id); } -int RGWMetadataLog::unlock(int shard_id, string& owner_id) { +int RGWMetadataLog::unlock(int shard_id, string& zone_id, string& owner_id) { string oid; get_shard_oid(shard_id, oid); - return store->unlock(store->zone.log_pool, oid, owner_id); + return store->unlock(store->zone.log_pool, oid, zone_id, owner_id); } obj_version& RGWMetadataObject::get_version() @@ -359,6 +359,7 @@ int RGWMetadataManager::remove(string& metadata_key) int RGWMetadataManager::lock_exclusive(string& metadata_key, utime_t duration, string& owner_id) { RGWMetadataHandler *handler; string entry; + string zone_id; int ret = find_handler(metadata_key, &handler, entry); if (ret < 0) @@ -369,13 +370,14 @@ int RGWMetadataManager::lock_exclusive(string& metadata_key, utime_t duration, s handler->get_pool_and_oid(store, entry, pool, oid); - return store->lock_exclusive(pool, oid, duration, owner_id); + return store->lock_exclusive(pool, oid, duration, zone_id, owner_id); } int RGWMetadataManager::unlock(string& metadata_key, string& owner_id) { librados::IoCtx io_ctx; RGWMetadataHandler *handler; string entry; + string zone_id; int ret = find_handler(metadata_key, &handler, entry); if (ret < 0) @@ -386,7 +388,7 @@ int RGWMetadataManager::unlock(string& metadata_key, string& owner_id) { handler->get_pool_and_oid(store, entry, pool, oid); - return store->unlock(pool, oid, owner_id); + return store->unlock(pool, oid, zone_id, owner_id); } struct list_keys_handle { diff --git a/src/rgw/rgw_metadata.h b/src/rgw/rgw_metadata.h index eaac1fac987..ba12decdd41 100644 --- a/src/rgw/rgw_metadata.h +++ b/src/rgw/rgw_metadata.h @@ -91,16 +91,15 @@ public: LogListCtx() : done(false) {} }; - void init_list_entries(int shard_id, utime_t& from_time, utime_t& end_time, void **handle); + void init_list_entries(int shard_id, utime_t& from_time, utime_t& end_time, string& marker, void **handle); void complete_list_entries(void *handle); int list_entries(void *handle, int max_entries, - list<cls_log_entry>& entries, - bool *truncated); + list<cls_log_entry>& entries, bool *truncated); int trim(int shard_id, utime_t& from_time, utime_t& end_time); - int lock_exclusive(int shard_id, utime_t& duration, string& owner_id); - int unlock(int shard_id, string& owner_id); + int lock_exclusive(int shard_id, utime_t& duration, string&zone_id, string& owner_id); + int unlock(int shard_id, string& zone_id, string& owner_id); }; class RGWMetadataLogData; diff --git a/src/rgw/rgw_rados.cc b/src/rgw/rgw_rados.cc index 7ad84c44617..055e7ad0283 100644 --- a/src/rgw/rgw_rados.cc +++ b/src/rgw/rgw_rados.cc @@ -60,6 +60,7 @@ static string region_info_oid_prefix = "region_info."; static string default_region_info_oid = "default.region"; static string region_map_oid = "region_map"; +static string log_lock_name = "rgw_log_lock"; static RGWObjCategory main_category = RGW_OBJ_CATEGORY_MAIN; @@ -1454,8 +1455,8 @@ int RGWRados::time_log_list(const string& oid, utime_t& start_time, utime_t& end int r = rados->ioctx_create(log_pool, io_ctx); if (r < 0) return r; - librados::ObjectReadOperation op; + cls_log_list(op, start_time, end_time, marker, max_entries, entries, &marker, truncated); bufferlist obl; @@ -1480,7 +1481,8 @@ int RGWRados::time_log_trim(const string& oid, utime_t& start_time, utime_t& end } -int RGWRados::lock_exclusive(rgw_bucket& pool, const string& oid, utime_t& duration, string& owner_id) { +int RGWRados::lock_exclusive(rgw_bucket& pool, const string& oid, utime_t& duration, + string& zone_id, string& owner_id) { librados::IoCtx io_ctx; const char *pool_name = pool.name.c_str(); @@ -1489,15 +1491,16 @@ int RGWRados::lock_exclusive(rgw_bucket& pool, const string& oid, utime_t& durat if (r < 0) return r; - string lock_name = RGW_INDEX_LOCK_NAME; - rados::cls::lock::Lock l(lock_name); + rados::cls::lock::Lock l(log_lock_name); l.set_duration(duration); l.set_cookie(owner_id); + l.set_tag(zone_id); + l.set_renew(true); return l.lock_exclusive(&io_ctx, oid); } -int RGWRados::unlock(rgw_bucket& pool, const string& oid, string& owner_id) { +int RGWRados::unlock(rgw_bucket& pool, const string& oid, string& zone_id, string& owner_id) { librados::IoCtx io_ctx; const char *pool_name = pool.name.c_str(); @@ -1506,8 +1509,8 @@ int RGWRados::unlock(rgw_bucket& pool, const string& oid, string& owner_id) { if (r < 0) return r; - string lock_name = RGW_INDEX_LOCK_NAME; - rados::cls::lock::Lock l(lock_name); + rados::cls::lock::Lock l(log_lock_name); + l.set_tag(zone_id); l.set_cookie(owner_id); return l.unlock(&io_ctx, oid); diff --git a/src/rgw/rgw_rados.h b/src/rgw/rgw_rados.h index 70537ba5bef..b267ae2f86d 100644 --- a/src/rgw/rgw_rados.h +++ b/src/rgw/rgw_rados.h @@ -25,7 +25,6 @@ class RGWGC; #define RGW_OBJ_NS_MULTIPART "multipart" #define RGW_OBJ_NS_SHADOW "shadow" -#define RGW_INDEX_LOCK_NAME "rgw_process" static inline void prepend_bucket_marker(rgw_bucket& bucket, string& orig_oid, string& oid) { @@ -1216,8 +1215,8 @@ public: int time_log_list(const string& oid, utime_t& start_time, utime_t& end_time, int max_entries, list<cls_log_entry>& entries, string& marker, bool *truncated); int time_log_trim(const string& oid, utime_t& start_time, utime_t& end_time); - int lock_exclusive(rgw_bucket& pool, const string& oid, utime_t& duration, string& owner_id); - int unlock(rgw_bucket& pool, const string& oid, string& owner_id); + int lock_exclusive(rgw_bucket& pool, const string& oid, utime_t& duration, string& zone_id, string& owner_id); + int unlock(rgw_bucket& pool, const string& oid, string& zone_id, string& owner_id); /// clean up/process any temporary objects older than given date[/time] int remove_temp_objects(string date, string time); diff --git a/src/rgw/rgw_rest_log.cc b/src/rgw/rgw_rest_log.cc index ba821c9b9a2..43bb84fc763 100644 --- a/src/rgw/rgw_rest_log.cc +++ b/src/rgw/rgw_rest_log.cc @@ -20,6 +20,7 @@ #include "rgw_client_io.h" #include "common/errno.h" +#define LOG_CLASS_LIST_MAX_ENTRIES (1000) #define dout_subsys ceph_subsys_rgw static int parse_date_str(string& in, utime_t& out) { @@ -37,16 +38,17 @@ static int parse_date_str(string& in, utime_t& out) { void RGWOp_MDLog_List::execute() { string shard = s->info.args.get("id"); - + string max_entries_str = s->info.args.get("max-entries"); string st = s->info.args.get("start-time"), et = s->info.args.get("end-time"), + marker = s->info.args.get("marker"), err; utime_t ut_st, ut_et; void *handle; - int shard_id; + unsigned shard_id, max_entries = LOG_CLASS_LIST_MAX_ENTRIES; - shard_id = strict_strtol(shard.c_str(), 10, &err); + shard_id = (unsigned)strict_strtol(shard.c_str(), 10, &err); if (!err.empty()) { dout(5) << "Error parsing shard_id " << shard << dendl; http_ret = -EINVAL; @@ -63,13 +65,28 @@ void RGWOp_MDLog_List::execute() { return; } + if (!max_entries_str.empty()) { + max_entries = (unsigned)strict_strtol(max_entries_str.c_str(), 10, &err); + if (!err.empty()) { + dout(5) << "Error parsing max-entries " << max_entries_str << dendl; + http_ret = -EINVAL; + return; + } + } + RGWMetadataLog *meta_log = store->meta_mgr->get_log(); - meta_log->init_list_entries(shard_id, ut_st, ut_et, &handle); + meta_log->init_list_entries(shard_id, ut_st, ut_et, marker, &handle); bool truncated; + do { + http_ret = meta_log->list_entries(handle, max_entries, entries, &truncated); + if (http_ret < 0) + break; - http_ret = meta_log->list_entries(handle, 1000, entries, &truncated); + if (!max_entries_str.empty()) + max_entries -= entries.size(); + } while (truncated && (max_entries > 0)); } void RGWOp_MDLog_List::send_response() { @@ -114,11 +131,11 @@ void RGWOp_MDLog_Delete::execute() { err; utime_t ut_st, ut_et; - int shard_id; + unsigned shard_id; http_ret = 0; - shard_id = strict_strtol(shard.c_str(), 10, &err); + shard_id = (unsigned)strict_strtol(shard.c_str(), 10, &err); if (!err.empty()) { dout(5) << "Error parsing shard_id " << shard << dendl; http_ret = -EINVAL; @@ -144,25 +161,27 @@ void RGWOp_MDLog_Delete::execute() { } void RGWOp_MDLog_Lock::execute() { - string shard_id_str, duration_str, lock_id; - int shard_id; + string shard_id_str, duration_str, locker_id, zone_id; + unsigned shard_id; http_ret = 0; shard_id_str = s->info.args.get("id"); duration_str = s->info.args.get("length"); - lock_id = s->info.args.get("lock_id"); + locker_id = s->info.args.get("locker-id"); + zone_id = s->info.args.get("zone-id"); if (shard_id_str.empty() || (duration_str.empty()) || - lock_id.empty()) { + locker_id.empty() || + zone_id.empty()) { dout(5) << "Error invalid parameter list" << dendl; http_ret = -EINVAL; return; } string err; - shard_id = strict_strtol(shard_id_str.c_str(), 10, &err); + shard_id = (unsigned)strict_strtol(shard_id_str.c_str(), 10, &err); if (!err.empty()) { dout(5) << "Error parsing shard_id param " << shard_id_str << dendl; http_ret = -EINVAL; @@ -170,35 +189,37 @@ void RGWOp_MDLog_Lock::execute() { } RGWMetadataLog *meta_log = store->meta_mgr->get_log(); - int dur; - dur = strict_strtol(duration_str.c_str(), 10, &err); + unsigned dur; + dur = (unsigned)strict_strtol(duration_str.c_str(), 10, &err); if (!err.empty() || dur <= 0) { dout(5) << "invalid length param " << duration_str << dendl; http_ret = -EINVAL; return; } utime_t time(dur, 0); - http_ret = meta_log->lock_exclusive(shard_id, time, lock_id); + http_ret = meta_log->lock_exclusive(shard_id, time, zone_id, locker_id); } void RGWOp_MDLog_Unlock::execute() { - string shard_id_str, lock_id; - int shard_id; + string shard_id_str, locker_id, zone_id; + unsigned shard_id; http_ret = 0; shard_id_str = s->info.args.get("id"); - lock_id = s->info.args.get("lock_id"); + locker_id = s->info.args.get("locker-id"); + zone_id = s->info.args.get("zone-id"); if (shard_id_str.empty() || - lock_id.empty()) { + locker_id.empty() || + zone_id.empty()) { dout(5) << "Error invalid parameter list" << dendl; http_ret = -EINVAL; return; } string err; - shard_id = strict_strtol(shard_id_str.c_str(), 10, &err); + shard_id = (unsigned)strict_strtol(shard_id_str.c_str(), 10, &err); if (!err.empty()) { dout(5) << "Error parsing shard_id param " << shard_id_str << dendl; http_ret = -EINVAL; @@ -206,7 +227,7 @@ void RGWOp_MDLog_Unlock::execute() { } RGWMetadataLog *meta_log = store->meta_mgr->get_log(); - http_ret = meta_log->unlock(shard_id, lock_id); + http_ret = meta_log->unlock(shard_id, zone_id, locker_id); } void RGWOp_BILog_List::execute() { @@ -214,7 +235,7 @@ void RGWOp_BILog_List::execute() { marker = s->info.args.get("marker"), max_entries_str = s->info.args.get("max-entries"); RGWBucketInfo bucket_info; - int max_entries; + unsigned max_entries; if (bucket_name.empty()) { dout(5) << "ERROR: bucket not specified" << dendl; @@ -229,12 +250,12 @@ void RGWOp_BILog_List::execute() { } bool truncated; - int count = 0; + unsigned count = 0; string err; - max_entries = strict_strtol(max_entries_str.c_str(), 10, &err); + max_entries = (unsigned)strict_strtol(max_entries_str.c_str(), 10, &err); if (!err.empty()) - max_entries = 1000; + max_entries = LOG_CLASS_LIST_MAX_ENTRIES; send_response(); do { @@ -318,12 +339,14 @@ void RGWOp_DATALog_List::execute() { string st = s->info.args.get("start-time"), et = s->info.args.get("end-time"), + max_entries_str = s->info.args.get("max-entries"), + marker = s->info.args.get("marker"), err; utime_t ut_st, ut_et; - int shard_id; + unsigned shard_id, max_entries = LOG_CLASS_LIST_MAX_ENTRIES; - shard_id = strict_strtol(shard.c_str(), 10, &err); + shard_id = (unsigned)strict_strtol(shard.c_str(), 10, &err); if (!err.empty()) { dout(5) << "Error parsing shard_id " << shard << dendl; http_ret = -EINVAL; @@ -340,12 +363,25 @@ void RGWOp_DATALog_List::execute() { return; } - string marker; + if (!max_entries_str.empty()) { + max_entries = (unsigned)strict_strtol(max_entries_str.c_str(), 10, &err); + if (!err.empty()) { + dout(5) << "Error parsing max-entries " << max_entries_str << dendl; + http_ret = -EINVAL; + return; + } + } + bool truncated; -#define DATALOG_LIST_MAX_ENTRIES 1000 - - http_ret = store->data_log->list_entries(shard_id, ut_st, ut_et, - DATALOG_LIST_MAX_ENTRIES, entries, marker, &truncated); + do { + http_ret = store->data_log->list_entries(shard_id, ut_st, ut_et, + max_entries, entries, marker, &truncated); + if (http_ret < 0) + break; + + if (!max_entries_str.empty()) + max_entries -= entries.size(); + } while (truncated && (max_entries > 0)); } void RGWOp_DATALog_List::send_response() { @@ -385,67 +421,71 @@ void RGWOp_DATALog_GetShardsInfo::send_response() { } void RGWOp_DATALog_Lock::execute() { - string shard_id_str, duration_str, lock_id; - int shard_id; + string shard_id_str, duration_str, locker_id, zone_id; + unsigned shard_id; http_ret = 0; shard_id_str = s->info.args.get("id"); duration_str = s->info.args.get("length"); - lock_id = s->info.args.get("lock_id"); + locker_id = s->info.args.get("locker-id"); + zone_id = s->info.args.get("zone-id"); if (shard_id_str.empty() || (duration_str.empty()) || - lock_id.empty()) { + locker_id.empty() || + zone_id.empty()) { dout(5) << "Error invalid parameter list" << dendl; http_ret = -EINVAL; return; } string err; - shard_id = strict_strtol(shard_id_str.c_str(), 10, &err); + shard_id = (unsigned)strict_strtol(shard_id_str.c_str(), 10, &err); if (!err.empty()) { dout(5) << "Error parsing shard_id param " << shard_id_str << dendl; http_ret = -EINVAL; return; } - int dur; - dur = strict_strtol(duration_str.c_str(), 10, &err); + unsigned dur; + dur = (unsigned)strict_strtol(duration_str.c_str(), 10, &err); if (!err.empty() || dur <= 0) { dout(5) << "invalid length param " << duration_str << dendl; http_ret = -EINVAL; return; } utime_t time(dur, 0); - http_ret = store->data_log->lock_exclusive(shard_id, time, lock_id); + http_ret = store->data_log->lock_exclusive(shard_id, time, zone_id, locker_id); } void RGWOp_DATALog_Unlock::execute() { - string shard_id_str, lock_id; - int shard_id; + string shard_id_str, locker_id, zone_id; + unsigned shard_id; http_ret = 0; shard_id_str = s->info.args.get("id"); - lock_id = s->info.args.get("lock_id"); + locker_id = s->info.args.get("locker-id"); + zone_id = s->info.args.get("zone-id"); if (shard_id_str.empty() || - lock_id.empty()) { + locker_id.empty() || + zone_id.empty()) { dout(5) << "Error invalid parameter list" << dendl; http_ret = -EINVAL; return; } string err; - shard_id = strict_strtol(shard_id_str.c_str(), 10, &err); + shard_id = (unsigned)strict_strtol(shard_id_str.c_str(), 10, &err); if (!err.empty()) { dout(5) << "Error parsing shard_id param " << shard_id_str << dendl; http_ret = -EINVAL; return; } - http_ret = store->data_log->unlock(shard_id, lock_id); + http_ret = store->data_log->unlock(shard_id, zone_id, locker_id); } void RGWOp_DATALog_Delete::execute() { @@ -455,11 +495,11 @@ void RGWOp_DATALog_Delete::execute() { err; utime_t ut_st, ut_et; - int shard_id; + unsigned shard_id; http_ret = 0; - shard_id = strict_strtol(shard.c_str(), 10, &err); + shard_id = (unsigned)strict_strtol(shard.c_str(), 10, &err); if (!err.empty()) { dout(5) << "Error parsing shard_id " << shard << dendl; http_ret = -EINVAL; diff --git a/src/test/test_rgw_admin_log.cc b/src/test/test_rgw_admin_log.cc index 40d0f70c3bc..7c419e7d3c4 100644 --- a/src/test/test_rgw_admin_log.cc +++ b/src/test/test_rgw_admin_log.cc @@ -799,6 +799,16 @@ TEST(TestRGWAdmin, datalog_list) { } ss.str(""); + ss << "/admin/log?type=data&id=" << shard_id << "&start-time=" << start_time + << "&max-entries=1"; + rest_req = ss.str(); + g_test->send_request(string("GET"), rest_req); + EXPECT_EQ(200U, g_test->get_resp_code()); + entries.clear(); + get_datalog_list(entries); + EXPECT_EQ(1U, entries.size()); + + ss.str(""); ss << "/admin/log?type=data&id=" << shard_id << "&start-time=" << start_time << "&end-time=" << end_time; rest_req = ss.str(); @@ -837,92 +847,104 @@ TEST(TestRGWAdmin, datalog_lock_unlock) { ASSERT_EQ(0, user_create(uid, display_name)); ASSERT_EQ(0, caps_add(cname, perm)); - rest_req = "/admin/log?type=data&lock&length=3&lock_id=ceph"; + rest_req = "/admin/log?type=data&lock&length=3&locker-id=ceph&zone-id=1"; + g_test->send_request(string("POST"), rest_req, read_dummy_post, NULL, sizeof(int)); + EXPECT_EQ(400U, g_test->get_resp_code()); /*Bad request*/ + + rest_req = "/admin/log?type=data&lock&id=3&locker-id=ceph&zone-id=1"; g_test->send_request(string("POST"), rest_req, read_dummy_post, NULL, sizeof(int)); EXPECT_EQ(400U, g_test->get_resp_code()); /*Bad request*/ - rest_req = "/admin/log?type=data&lock&id=3&lock_id=ceph"; + rest_req = "/admin/log?type=data&lock&length=3&id=1&zone-id=1"; g_test->send_request(string("POST"), rest_req, read_dummy_post, NULL, sizeof(int)); EXPECT_EQ(400U, g_test->get_resp_code()); /*Bad request*/ - rest_req = "/admin/log?type=data&lock&length=3&id=1"; + rest_req = "/admin/log?type=data&lock&length=3&id=1&locker-id=1"; g_test->send_request(string("POST"), rest_req, read_dummy_post, NULL, sizeof(int)); EXPECT_EQ(400U, g_test->get_resp_code()); /*Bad request*/ - rest_req = "/admin/log?type=data&unlock&id=1"; + rest_req = "/admin/log?type=data&unlock&id=1&zone-id=1"; g_test->send_request(string("POST"), rest_req, read_dummy_post, NULL, sizeof(int)); EXPECT_EQ(400U, g_test->get_resp_code()); /*Bad request*/ - rest_req = "/admin/log?type=data&unlock&lock_id=ceph"; + rest_req = "/admin/log?type=data&unlock&locker-id=ceph&zone-id=1"; g_test->send_request(string("POST"), rest_req, read_dummy_post, NULL, sizeof(int)); EXPECT_EQ(400U, g_test->get_resp_code()); /*Bad request*/ - rest_req = "/admin/log?type=data&lock&id=1&length=3&lock_id=ceph"; + rest_req = "/admin/log?type=data&unlock&locker-id=ceph&id=1"; + g_test->send_request(string("POST"), rest_req, read_dummy_post, NULL, sizeof(int)); + EXPECT_EQ(400U, g_test->get_resp_code()); /*Bad request*/ + + rest_req = "/admin/log?type=data&lock&id=1&length=3&locker-id=ceph&zone-id=1"; g_test->send_request(string("POST"), rest_req, read_dummy_post, NULL, sizeof(int)); EXPECT_EQ(200U, g_test->get_resp_code()); - rest_req = "/admin/log?type=data&unlock&id=1&lock_id=ceph"; + rest_req = "/admin/log?type=data&unlock&id=1&locker-id=ceph&zone-id=1"; g_test->send_request(string("POST"), rest_req, read_dummy_post, NULL, sizeof(int)); EXPECT_EQ(200U, g_test->get_resp_code()); - rest_req = "/admin/log?type=data&lock&id=1&length=3&lock_id=ceph1"; + rest_req = "/admin/log?type=data&lock&id=1&length=3&locker-id=ceph1&zone-id=1"; g_test->send_request(string("POST"), rest_req, read_dummy_post, NULL, sizeof(int)); EXPECT_EQ(200U, g_test->get_resp_code()); - rest_req = "/admin/log?type=data&unlock&id=1&lock_id=ceph1"; + rest_req = "/admin/log?type=data&unlock&id=1&locker-id=ceph1&zone-id=1"; g_test->send_request(string("POST"), rest_req, read_dummy_post, NULL, sizeof(int)); EXPECT_EQ(200U, g_test->get_resp_code()); - rest_req = "/admin/log?type=data&lock&id=1&length=3&lock_id=ceph"; + rest_req = "/admin/log?type=data&lock&id=1&length=3&locker-id=ceph&zone-id=1"; g_test->send_request(string("POST"), rest_req, read_dummy_post, NULL, sizeof(int)); EXPECT_EQ(200U, g_test->get_resp_code()); utime_t sleep_time(3, 0); - rest_req = "/admin/log?type=data&lock&id=1&length=3&lock_id=ceph1"; + rest_req = "/admin/log?type=data&lock&id=1&length=3&locker-id=ceph1&zone-id=1"; + g_test->send_request(string("POST"), rest_req, read_dummy_post, NULL, sizeof(int)); + EXPECT_EQ(500U, g_test->get_resp_code()); + + rest_req = "/admin/log?type=data&lock&id=1&length=3&locker-id=ceph1&zone-id=2"; g_test->send_request(string("POST"), rest_req, read_dummy_post, NULL, sizeof(int)); EXPECT_EQ(500U, g_test->get_resp_code()); - rest_req = "/admin/log?type=data&lock&id=1&length=3&lock_id=ceph"; + rest_req = "/admin/log?type=data&lock&id=1&length=3&locker-id=ceph&zone-id=1"; g_test->send_request(string("POST"), rest_req, read_dummy_post, NULL, sizeof(int)); - EXPECT_EQ(409U, g_test->get_resp_code()); + EXPECT_EQ(200U, g_test->get_resp_code()); sleep_time.sleep(); - rest_req = "/admin/log?type=data&lock&id=1&length=3&lock_id=ceph1"; + rest_req = "/admin/log?type=data&lock&id=1&length=3&locker-id=ceph1&zone-id=1"; g_test->send_request(string("POST"), rest_req, read_dummy_post, NULL, sizeof(int)); EXPECT_EQ(200U, g_test->get_resp_code()); - rest_req = "/admin/log?type=data&unlock&id=1&lock_id=ceph1"; + rest_req = "/admin/log?type=data&unlock&id=1&locker-id=ceph1&zone-id=1"; g_test->send_request(string("POST"), rest_req, read_dummy_post, NULL, sizeof(int)); EXPECT_EQ(200U, g_test->get_resp_code()); ASSERT_EQ(0, caps_rm(cname, perm)); perm = "read"; ASSERT_EQ(0, caps_add(cname, perm)); - rest_req = "/admin/log?type=data&lock&id=1&length=3&lock_id=ceph"; + rest_req = "/admin/log?type=data&lock&id=1&length=3&locker-id=ceph&zone-id=1"; g_test->send_request(string("POST"), rest_req, read_dummy_post, NULL, sizeof(int)); EXPECT_EQ(403U, g_test->get_resp_code()); - rest_req = "/admin/log?type=data&unlock&id=1&lock_id=ceph"; + rest_req = "/admin/log?type=data&unlock&id=1&locker-id=ceph&zone-id=1"; g_test->send_request(string("POST"), rest_req, read_dummy_post, NULL, sizeof(int)); EXPECT_EQ(403U, g_test->get_resp_code()); ASSERT_EQ(0, caps_rm(cname, perm)); perm = "write"; ASSERT_EQ(0, caps_add(cname, perm)); - rest_req = "/admin/log?type=data&lock&id=1&length=3&lock_id=ceph"; + rest_req = "/admin/log?type=data&lock&id=1&length=3&locker-id=ceph&zone-id=1"; g_test->send_request(string("POST"), rest_req, read_dummy_post, NULL, sizeof(int)); EXPECT_EQ(200U, g_test->get_resp_code()); - rest_req = "/admin/log?type=data&unlock&id=1&lock_id=ceph"; + rest_req = "/admin/log?type=data&unlock&id=1&locker-id=ceph&zone-id=1"; g_test->send_request(string("POST"), rest_req, read_dummy_post, NULL, sizeof(int)); EXPECT_EQ(200U, g_test->get_resp_code()); ASSERT_EQ(0, caps_rm(cname, perm)); - rest_req = "/admin/log?type=data&lock&id=1&length=3&lock_id=ceph"; + rest_req = "/admin/log?type=data&lock&id=1&length=3&locker-id=ceph&zone-id=1"; g_test->send_request(string("POST"), rest_req, read_dummy_post, NULL, sizeof(int)); EXPECT_EQ(403U, g_test->get_resp_code()); - rest_req = "/admin/log?type=data&unlock&id=1&lock_id=ceph"; + rest_req = "/admin/log?type=data&unlock&id=1&locker-id=ceph&zone-id=1"; g_test->send_request(string("POST"), rest_req, read_dummy_post, NULL, sizeof(int)); EXPECT_EQ(403U, g_test->get_resp_code()); @@ -1157,6 +1179,25 @@ TEST(TestRGWAdmin, mdlog_list) { EXPECT_EQ(get_log_list(entries), 0); EXPECT_EQ(entries.size(), 14U); + ss.str(""); + ss << "/admin/log?type=metadata&id=" << shard_id << "&start-time=" << start_time + << "&max-entries=" << 1; + rest_req = ss.str(); + g_test->send_request(string("GET"), rest_req); + EXPECT_EQ(200U, g_test->get_resp_code()); + entries.clear(); + EXPECT_EQ(get_log_list(entries), 0); + EXPECT_EQ(entries.size(), 1U); + + ss.str(""); + ss << "/admin/log?type=metadata&id=" << shard_id << "&start-time=" << start_time + << "&max-entries=" << 6; + rest_req = ss.str(); + g_test->send_request(string("GET"), rest_req); + EXPECT_EQ(200U, g_test->get_resp_code()); + entries.clear(); + EXPECT_EQ(get_log_list(entries), 0); + EXPECT_EQ(entries.size(), 6U); ASSERT_EQ(0, caps_rm(cname, perm)); ss.str(""); @@ -1247,92 +1288,104 @@ TEST(TestRGWAdmin, mdlog_lock_unlock) { ASSERT_EQ(0, user_create(uid, display_name)); ASSERT_EQ(0, caps_add(cname, perm)); - rest_req = "/admin/log?type=metadata&lock&length=3&lock_id=ceph"; + rest_req = "/admin/log?type=metadata&lock&length=3&locker-id=ceph&zone-id=1"; g_test->send_request(string("POST"), rest_req, read_dummy_post, NULL, sizeof(int)); EXPECT_EQ(400U, g_test->get_resp_code()); /*Bad request*/ - rest_req = "/admin/log?type=metadata&lock&id=3&lock_id=ceph"; + rest_req = "/admin/log?type=metadata&lock&id=3&locker-id=ceph&zone-id=1"; g_test->send_request(string("POST"), rest_req, read_dummy_post, NULL, sizeof(int)); EXPECT_EQ(400U, g_test->get_resp_code()); /*Bad request*/ - rest_req = "/admin/log?type=metadata&lock&length=3&id=1"; + rest_req = "/admin/log?type=metadata&lock&length=3&id=1&zone-id=1"; g_test->send_request(string("POST"), rest_req, read_dummy_post, NULL, sizeof(int)); EXPECT_EQ(400U, g_test->get_resp_code()); /*Bad request*/ - rest_req = "/admin/log?type=metadata&unlock&id=1"; + rest_req = "/admin/log?type=metadata&lock&id=3&locker-id=ceph&length=1"; + g_test->send_request(string("POST"), rest_req, read_dummy_post, NULL, sizeof(int)); + EXPECT_EQ(400U, g_test->get_resp_code()); /*Bad request*/ + + rest_req = "/admin/log?type=metadata&unlock&id=1&zone-id=1"; g_test->send_request(string("POST"), rest_req, read_dummy_post, NULL, sizeof(int)); EXPECT_EQ(400U, g_test->get_resp_code()); /*Bad request*/ - rest_req = "/admin/log?type=metadata&unlock&lock_id=ceph"; + rest_req = "/admin/log?type=metadata&unlock&locker-id=ceph&zone-id=1"; g_test->send_request(string("POST"), rest_req, read_dummy_post, NULL, sizeof(int)); EXPECT_EQ(400U, g_test->get_resp_code()); /*Bad request*/ - rest_req = "/admin/log?type=metadata&lock&id=1&length=3&lock_id=ceph"; + rest_req = "/admin/log?type=metadata&unlock&locker-id=ceph&id=1"; + g_test->send_request(string("POST"), rest_req, read_dummy_post, NULL, sizeof(int)); + EXPECT_EQ(400U, g_test->get_resp_code()); /*Bad request*/ + + rest_req = "/admin/log?type=metadata&lock&id=1&length=3&locker-id=ceph&zone-id=1"; g_test->send_request(string("POST"), rest_req, read_dummy_post, NULL, sizeof(int)); EXPECT_EQ(200U, g_test->get_resp_code()); - rest_req = "/admin/log?type=metadata&unlock&id=1&lock_id=ceph"; + rest_req = "/admin/log?type=metadata&unlock&id=1&locker-id=ceph&zone-id=1"; g_test->send_request(string("POST"), rest_req, read_dummy_post, NULL, sizeof(int)); EXPECT_EQ(200U, g_test->get_resp_code()); - rest_req = "/admin/log?type=metadata&lock&id=1&length=3&lock_id=ceph1"; + rest_req = "/admin/log?type=metadata&lock&id=1&length=3&locker-id=ceph1&zone-id=1"; g_test->send_request(string("POST"), rest_req, read_dummy_post, NULL, sizeof(int)); EXPECT_EQ(200U, g_test->get_resp_code()); - rest_req = "/admin/log?type=metadata&unlock&id=1&lock_id=ceph1"; + rest_req = "/admin/log?type=metadata&unlock&id=1&locker-id=ceph1&zone-id=1"; g_test->send_request(string("POST"), rest_req, read_dummy_post, NULL, sizeof(int)); EXPECT_EQ(200U, g_test->get_resp_code()); - rest_req = "/admin/log?type=metadata&lock&id=1&length=3&lock_id=ceph"; + rest_req = "/admin/log?type=metadata&lock&id=1&length=3&locker-id=ceph&zone-id=1"; g_test->send_request(string("POST"), rest_req, read_dummy_post, NULL, sizeof(int)); EXPECT_EQ(200U, g_test->get_resp_code()); utime_t sleep_time(3, 0); - rest_req = "/admin/log?type=metadata&lock&id=1&length=3&lock_id=ceph1"; + rest_req = "/admin/log?type=metadata&lock&id=1&length=3&locker-id=ceph1&zone-id=1"; g_test->send_request(string("POST"), rest_req, read_dummy_post, NULL, sizeof(int)); EXPECT_EQ(500U, g_test->get_resp_code()); - rest_req = "/admin/log?type=metadata&lock&id=1&length=3&lock_id=ceph"; + rest_req = "/admin/log?type=metadata&lock&id=1&length=3&locker-id=ceph&zone-id=2"; g_test->send_request(string("POST"), rest_req, read_dummy_post, NULL, sizeof(int)); - EXPECT_EQ(409U, g_test->get_resp_code()); + EXPECT_EQ(500U, g_test->get_resp_code()); + + rest_req = "/admin/log?type=metadata&lock&id=1&length=3&locker-id=ceph&zone-id=1"; + g_test->send_request(string("POST"), rest_req, read_dummy_post, NULL, sizeof(int)); + EXPECT_EQ(200U, g_test->get_resp_code()); sleep_time.sleep(); - rest_req = "/admin/log?type=metadata&lock&id=1&length=3&lock_id=ceph1"; + rest_req = "/admin/log?type=metadata&lock&id=1&length=3&locker-id=ceph1&zone-id=1"; g_test->send_request(string("POST"), rest_req, read_dummy_post, NULL, sizeof(int)); EXPECT_EQ(200U, g_test->get_resp_code()); - rest_req = "/admin/log?type=metadata&unlock&id=1&lock_id=ceph1"; + rest_req = "/admin/log?type=metadata&unlock&id=1&locker-id=ceph1&zone-id=1"; g_test->send_request(string("POST"), rest_req, read_dummy_post, NULL, sizeof(int)); EXPECT_EQ(200U, g_test->get_resp_code()); ASSERT_EQ(0, caps_rm(cname, perm)); perm = "read"; ASSERT_EQ(0, caps_add(cname, perm)); - rest_req = "/admin/log?type=metadata&lock&id=1&length=3&lock_id=ceph"; + rest_req = "/admin/log?type=metadata&lock&id=1&length=3&locker-id=ceph&zone-id=1"; g_test->send_request(string("POST"), rest_req, read_dummy_post, NULL, sizeof(int)); EXPECT_EQ(403U, g_test->get_resp_code()); - rest_req = "/admin/log?type=metadata&unlock&id=1&lock_id=ceph"; + rest_req = "/admin/log?type=metadata&unlock&id=1&locker-id=ceph&zone-id=1"; g_test->send_request(string("POST"), rest_req, read_dummy_post, NULL, sizeof(int)); EXPECT_EQ(403U, g_test->get_resp_code()); ASSERT_EQ(0, caps_rm(cname, perm)); perm = "write"; ASSERT_EQ(0, caps_add(cname, perm)); - rest_req = "/admin/log?type=metadata&lock&id=1&length=3&lock_id=ceph"; + rest_req = "/admin/log?type=metadata&lock&id=1&length=3&locker-id=ceph&zone-id=1"; g_test->send_request(string("POST"), rest_req, read_dummy_post, NULL, sizeof(int)); EXPECT_EQ(200U, g_test->get_resp_code()); - rest_req = "/admin/log?type=metadata&unlock&id=1&lock_id=ceph"; + rest_req = "/admin/log?type=metadata&unlock&id=1&locker-id=ceph&zone-id=1"; g_test->send_request(string("POST"), rest_req, read_dummy_post, NULL, sizeof(int)); EXPECT_EQ(200U, g_test->get_resp_code()); ASSERT_EQ(0, caps_rm(cname, perm)); - rest_req = "/admin/log?type=metadata&lock&id=1&length=3&lock_id=ceph"; + rest_req = "/admin/log?type=metadata&lock&id=1&length=3&locker-id=ceph&zone-id=1"; g_test->send_request(string("POST"), rest_req, read_dummy_post, NULL, sizeof(int)); EXPECT_EQ(403U, g_test->get_resp_code()); - rest_req = "/admin/log?type=metadata&unlock&id=1&lock_id=ceph"; + rest_req = "/admin/log?type=metadata&unlock&id=1&locker-id=ceph&zone-id=1"; g_test->send_request(string("POST"), rest_req, read_dummy_post, NULL, sizeof(int)); EXPECT_EQ(403U, g_test->get_resp_code()); |