diff options
Diffstat (limited to 'src/test')
-rw-r--r-- | src/test/bufferlist.cc | 11 | ||||
-rw-r--r-- | src/test/erasure-code/ErasureCodeExample.h | 10 | ||||
-rw-r--r-- | src/test/erasure-code/TestErasureCodeExample.cc | 6 | ||||
-rw-r--r-- | src/test/erasure-code/ceph_erasure_code_benchmark.cc | 11 | ||||
-rw-r--r-- | src/test/erasure-code/ceph_erasure_code_benchmark.h | 22 | ||||
-rw-r--r-- | src/test/kv_store_bench.h | 25 | ||||
-rw-r--r-- | src/test/librados_test_stub/NeoradosTestStub.cc | 4 | ||||
-rw-r--r-- | src/test/objectstore/allocator_replay_test.cc | 104 | ||||
-rw-r--r-- | src/test/osd/RadosModel.h | 731 | ||||
-rw-r--r-- | src/test/osd/TestOpStat.cc | 14 |
10 files changed, 518 insertions, 420 deletions
diff --git a/src/test/bufferlist.cc b/src/test/bufferlist.cc index 99e954ff597..1b604f7bde4 100644 --- a/src/test/bufferlist.cc +++ b/src/test/bufferlist.cc @@ -1853,13 +1853,14 @@ TEST(BufferList, rebuild_aligned_size_and_memory) { * scenario where the first bptr is both size and memory aligned and * the second is 0-length */ bl.clear(); - bufferptr ptr1(buffer::create_aligned(4096, 4096)); - bl.append(ptr1); - bufferptr ptr(10); - /* bl.back().length() must be 0 */ - bl.append(ptr, 0, 0); + bl.append(bufferptr{buffer::create_aligned(4096, 4096)}); + bufferptr ptr(buffer::create_aligned(42, 4096)); + /* bl.back().length() must be 0. offset set to 42 guarantees + * the entire list is unaligned. */ + bl.append(ptr, 42, 0); EXPECT_EQ(bl.get_num_buffers(), 2); EXPECT_EQ(bl.back().length(), 0); + EXPECT_FALSE(bl.is_aligned(4096)); /* rebuild_aligned() calls rebuild_aligned_size_and_memory(). * we assume the rebuild always happens. */ EXPECT_TRUE(bl.rebuild_aligned(4096)); diff --git a/src/test/erasure-code/ErasureCodeExample.h b/src/test/erasure-code/ErasureCodeExample.h index 1185b38d736..4226361c47e 100644 --- a/src/test/erasure-code/ErasureCodeExample.h +++ b/src/test/erasure-code/ErasureCodeExample.h @@ -35,15 +35,13 @@ #define MINIMUM_TO_RECOVER 2u -using namespace std; - class ErasureCodeExample final : public ErasureCode { public: ~ErasureCodeExample() override {} int create_rule(const std::string &name, CrushWrapper &crush, - ostream *ss) const override { + std::ostream *ss) const override { return crush.add_simple_rule(name, "default", "host", "", "indep", pg_pool_t::TYPE_ERASURE, ss); } @@ -70,7 +68,7 @@ public: c2c[CODING_CHUNK] > c2c[SECOND_DATA_CHUNK]) c2c.erase(CODING_CHUNK); } - set <int> available_chunks; + std::set <int> available_chunks; for (std::map<int, int>::const_iterator i = c2c.begin(); i != c2c.end(); ++i) @@ -116,7 +114,7 @@ public: // to chunk boundaries // const bufferptr &ptr = out.front(); - for (set<int>::iterator j = want_to_encode.begin(); + for (auto j = want_to_encode.begin(); j != want_to_encode.end(); ++j) { bufferlist tmp; @@ -136,7 +134,7 @@ public: int _decode(const std::set<int> &want_to_read, const std::map<int, bufferlist> &chunks, - std::map<int, bufferlist> *decoded) { + std::map<int, bufferlist> *decoded) override { // // All chunks have the same size // diff --git a/src/test/erasure-code/TestErasureCodeExample.cc b/src/test/erasure-code/TestErasureCodeExample.cc index 826f3bef177..b488a604b61 100644 --- a/src/test/erasure-code/TestErasureCodeExample.cc +++ b/src/test/erasure-code/TestErasureCodeExample.cc @@ -1,4 +1,4 @@ -// -*- mode:C; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- +// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- // vim: ts=8 sw=2 smarttab /* * Ceph distributed storage system @@ -11,7 +11,7 @@ * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. - * + * */ #include <stdlib.h> @@ -20,6 +20,8 @@ #include "global/global_context.h" #include "gtest/gtest.h" +using namespace std; + TEST(ErasureCodeExample, chunk_size) { ErasureCodeExample example; diff --git a/src/test/erasure-code/ceph_erasure_code_benchmark.cc b/src/test/erasure-code/ceph_erasure_code_benchmark.cc index 2bcb5f3cd3b..c86e58697c0 100644 --- a/src/test/erasure-code/ceph_erasure_code_benchmark.cc +++ b/src/test/erasure-code/ceph_erasure_code_benchmark.cc @@ -35,6 +35,15 @@ #include "erasure-code/ErasureCode.h" #include "ceph_erasure_code_benchmark.h" +using std::endl; +using std::cerr; +using std::cout; +using std::map; +using std::set; +using std::string; +using std::stringstream; +using std::vector; + namespace po = boost::program_options; int ErasureCodeBench::setup(int argc, char** argv) { @@ -175,7 +184,7 @@ int ErasureCodeBench::encode() } utime_t begin_time = ceph_clock_now(); for (int i = 0; i < max_iterations; i++) { - map<int,bufferlist> encoded; + std::map<int,bufferlist> encoded; code = erasure_code->encode(want_to_encode, in, &encoded); if (code) return code; diff --git a/src/test/erasure-code/ceph_erasure_code_benchmark.h b/src/test/erasure-code/ceph_erasure_code_benchmark.h index c65f716b1e1..59149a74c16 100644 --- a/src/test/erasure-code/ceph_erasure_code_benchmark.h +++ b/src/test/erasure-code/ceph_erasure_code_benchmark.h @@ -19,8 +19,16 @@ #define CEPH_ERASURE_CODE_BENCHMARK_H #include <string> +#include <map> +#include <vector> -using namespace std; +#include <boost/intrusive_ptr.hpp> + +#include "include/buffer.h" + +#include "common/ceph_context.h" + +#include "erasure-code/ErasureCodeInterface.h" class ErasureCodeBench { int in_size; @@ -29,21 +37,21 @@ class ErasureCodeBench { int k; int m; - string plugin; + std::string plugin; bool exhaustive_erasures; - vector<int> erased; - string workload; + std::vector<int> erased; + std::string workload; - ErasureCodeProfile profile; + ceph::ErasureCodeProfile profile; bool verbose; boost::intrusive_ptr<CephContext> cct; public: int setup(int argc, char** argv); int run(); - int decode_erasures(const map<int,bufferlist> &all_chunks, - const map<int,bufferlist> &chunks, + int decode_erasures(const std::map<int, ceph::buffer::list> &all_chunks, + const std::map<int, ceph::buffer::list> &chunks, unsigned i, unsigned want_erasures, ErasureCodeInterfaceRef erasure_code); diff --git a/src/test/kv_store_bench.h b/src/test/kv_store_bench.h index 733594b70c5..689c769ce52 100644 --- a/src/test/kv_store_bench.h +++ b/src/test/kv_store_bench.h @@ -25,9 +25,6 @@ #include <cfloat> #include <iostream> -using namespace std; -using ceph::bufferlist; - /** * stores pairings from op type to time taken for that op (for latency), and to * time that op completed to the nearest second (for throughput). @@ -69,7 +66,7 @@ struct timed_args { StopWatch sw; //kv_bench_data data; KvStoreBench * kvsb; - bufferlist val; + ceph::buffer::list val; int err; char op; @@ -86,7 +83,7 @@ struct timed_args { {} }; -typedef pair<string, bufferlist> (KvStoreBench::*next_gen_t)(bool new_elem); +typedef std::pair<std::string, ceph::buffer::list> (KvStoreBench::*next_gen_t)(bool new_elem); class KvStoreBench { @@ -107,13 +104,13 @@ protected: int cache_size; //number of index entries to store in cache double cache_refresh; //cache_size / cache_refresh entries are read each time //the index is read - string client_name; + std::string client_name; bool verbose;//if true, display debug output //internal - map<int, char> probs;//map of numbers from 1 to 100 to chars representing + std::map<int, char> probs;//map of numbers from 1 to 100 to chars representing //operation types - used to generate random operations - set<string> key_set;//set of keys already in the data set + std::set<std::string> key_set;//set of keys already in the data set KeyValueStructure * kvs; kv_bench_data data;//stores throughput and latency from completed tests ceph::mutex data_lock = ceph::make_mutex("data lock"); @@ -123,8 +120,8 @@ protected: ceph::make_mutex("KvStoreBench::ops_in_flight_lock"); //these are used for cleanup and setup purposes - they are NOT passed to kvs! librados::Rados rados; - string rados_id; - string pool_name; + std::string rados_id; + std::string pool_name; bool io_ctx_ready; librados::IoCtx io_ctx; @@ -153,7 +150,7 @@ public: /** * Returns a string of random characters of length len */ - string random_string(int len); + std::string random_string(int len); /** * Inserts entries random keys and values asynchronously. @@ -164,20 +161,20 @@ public: * calls test_random_insertions, then does ops randomly chosen operations * asynchronously, with max_ops_in_flight operations at a time. */ - int test_teuthology_aio(next_gen_t distr, const map<int, char> &probs); + int test_teuthology_aio(next_gen_t distr, const std::map<int, char> &probs); /** * calls test_random_insertions, then does ops randomly chosen operations * synchronously. */ - int test_teuthology_sync(next_gen_t distr, const map<int, char> &probs); + int test_teuthology_sync(next_gen_t distr, const std::map<int, char> &probs); /** * returns a key-value pair. If new_elem is true, the key is randomly * generated. If it is false, the key is selected from the keys currently in * the key set. */ - pair<string, bufferlist> rand_distr(bool new_elem); + std::pair<std::string, ceph::buffer::list> rand_distr(bool new_elem); /** * Called when aio operations complete. Updates data. diff --git a/src/test/librados_test_stub/NeoradosTestStub.cc b/src/test/librados_test_stub/NeoradosTestStub.cc index 882e80820c7..c46660c6cd1 100644 --- a/src/test/librados_test_stub/NeoradosTestStub.cc +++ b/src/test/librados_test_stub/NeoradosTestStub.cc @@ -22,12 +22,14 @@ #include <boost/system/system_error.hpp> namespace bs = boost::system; +using namespace std::literals; using namespace std::placeholders; namespace neorados { namespace detail { -struct Client { +class Client { +public: ceph::mutex mutex = ceph::make_mutex("NeoradosTestStub::Client"); librados::TestRadosClient* test_rados_client; diff --git a/src/test/objectstore/allocator_replay_test.cc b/src/test/objectstore/allocator_replay_test.cc index 811cc92cdea..401eaa42703 100644 --- a/src/test/objectstore/allocator_replay_test.cc +++ b/src/test/objectstore/allocator_replay_test.cc @@ -18,8 +18,14 @@ using namespace std; void usage(const string &name) { - cerr << "Usage: " << name << " <log_to_replay> <raw_duplicate|free_dump|try_alloc count want alloc_unit>" - << std::endl; + cerr << "Usage: " << name << " <log_to_replay> <raw_duplicate|free_dump|try_alloc count want alloc_unit|replay_alloc alloc_list_file>" << std::endl; +} + +void usage_replay_alloc(const string &name) { + cerr << "Detailed replay_alloc usage: " << name << " <allocator_dump_JSON> replay_alloc <alloc_list_file> [number of replays]" << std::endl; + cerr << "The number of replays defaults to 1." << std::endl; + cerr << "The \"alloc_list_file\" parameter should be a file with allocation requests, one per line." << std::endl; + cerr << "Allocation request format (space separated, optional parameters are 0 if not given): want unit [max] [hint]" << std::endl; } int replay_and_check_for_duplicate(char* fname) @@ -389,5 +395,99 @@ int main(int argc, char **argv) << ", unit:" << alloc_unit << std::endl; return 0; }); + } else if (strcmp(argv[2], "replay_alloc") == 0) { + if (argc < 4) { + std::cerr << "Error: insufficient arguments for \"replay_alloc\" option." + << std::endl; + usage_replay_alloc(argv[0]); + return 1; + } + return replay_free_dump_and_apply(argv[1], + [&](Allocator *a, const string &aname) { + ceph_assert(a); + std::cout << "Fragmentation:" << a->get_fragmentation() + << std::endl; + std::cout << "Fragmentation score:" << a->get_fragmentation_score() + << std::endl; + std::cout << "Free:" << std::hex << a->get_free() << std::dec + << std::endl; + { + /* replay a set of allocation requests */ + char s[4096]; + + FILE *f_alloc_list = fopen(argv[3], "r"); + if (!f_alloc_list) { + std::cerr << "error: unable to open " << argv[3] << std::endl; + return -1; + } + + /* Replay user specified number of times to simulate extended activity + * Defaults to 1 replay. + */ + auto replay_count = 1; + if (argc == 5) { + replay_count = atoi(argv[4]); + } + + for (auto i = 0; i < replay_count; ++i) { + while (fgets(s, sizeof(s), f_alloc_list) != nullptr) { + /* parse allocation request */ + uint64_t want = 0, unit = 0, max = 0, hint = 0; + + if (std::sscanf(s, "%ji %ji %ji %ji", &want, &unit, &max, &hint) < 2) + { + cerr << "Error: malformed allocation request:" << std::endl; + cerr << s << std::endl; + /* do not attempt to allocate a malformed request */ + continue; + } + + /* timestamp for allocation start */ + auto t0 = ceph::mono_clock::now(); + + /* allocate */ + PExtentVector extents; + auto r = a->allocate(want, unit, max, hint, &extents); + if (r < 0) { + /* blind replays of allocations may run out of space, provide info for easy confirmation */ + std::cerr << "Error: allocation failure code: " << r + << " requested want/unit/max/hint (hex): " << std::hex + << want << "/" << unit << "/" << max << "/" << hint + << std::dec << std::endl; + std::cerr << "Fragmentation:" << a->get_fragmentation() + << std::endl; + std::cerr << "Fragmentation score:" << a->get_fragmentation_score() + << std::endl; + std::cerr << "Free:" << std::hex << a->get_free() << std::dec + << std::endl; + /* return 0 if the allocator ran out of space */ + if (r == -ENOSPC) { + return 0; + } + return -1; + } + + /* Outputs the allocation's duration in nanoseconds and the allocation request parameters */ + std::cout << "Duration (ns): " << (ceph::mono_clock::now() - t0).count() + << " want/unit/max/hint (hex): " << std::hex + << want << "/" << unit << "/" << max << "/" << hint + << std::dec << std::endl; + + /* Do not release. */ + //alloc->release(extents); + extents.clear(); + } + fseek(f_alloc_list, 0, SEEK_SET); + } + fclose(f_alloc_list); + std::cout << "Fragmentation:" << a->get_fragmentation() + << std::endl; + std::cout << "Fragmentation score:" << a->get_fragmentation_score() + << std::endl; + std::cout << "Free:" << std::hex << a->get_free() << std::dec + << std::endl; + } + return 0; + }); } } diff --git a/src/test/osd/RadosModel.h b/src/test/osd/RadosModel.h index a429476749d..7f4de6162fe 100644 --- a/src/test/osd/RadosModel.h +++ b/src/test/osd/RadosModel.h @@ -30,8 +30,6 @@ #ifndef RADOSMODEL_H #define RADOSMODEL_H -using namespace std; - class RadosTestContext; class TestOpStat; @@ -90,7 +88,7 @@ public: } void handle_error(uint64_t cookie, int err) override { std::lock_guard l{lock}; - cout << "watch handle_error " << err << std::endl; + std::cout << "watch handle_error " << err << std::endl; } void start() { std::lock_guard l{lock}; @@ -143,7 +141,7 @@ public: { return; } - virtual string getType() = 0; + virtual std::string getType() = 0; virtual bool finished() { return true; @@ -165,29 +163,29 @@ public: ceph::mutex state_lock = ceph::make_mutex("Context Lock"); ceph::condition_variable wait_cond; // snap => {oid => desc} - map<int, map<string,ObjectDesc> > pool_obj_cont; - set<string> oid_in_use; - set<string> oid_not_in_use; - set<string> oid_flushing; - set<string> oid_not_flushing; - set<string> oid_redirect_not_in_use; - set<string> oid_redirect_in_use; - set<string> oid_set_chunk_tgt_pool; + std::map<int, std::map<std::string,ObjectDesc> > pool_obj_cont; + std::set<std::string> oid_in_use; + std::set<std::string> oid_not_in_use; + std::set<std::string> oid_flushing; + std::set<std::string> oid_not_flushing; + std::set<std::string> oid_redirect_not_in_use; + std::set<std::string> oid_redirect_in_use; + std::set<std::string> oid_set_chunk_tgt_pool; SharedPtrRegistry<int, int> snaps_in_use; int current_snap; - string pool_name; + std::string pool_name; librados::IoCtx io_ctx; librados::Rados rados; int next_oid; - string prefix; + std::string prefix; int errors; int max_in_flight; int seq_num; - map<int,uint64_t> snaps; + std::map<int,uint64_t> snaps; uint64_t seq; const char *rados_id; bool initialized; - map<string, TestWatchContext*> watches; + std::map<std::string, TestWatchContext*> watches; const uint64_t max_size; const uint64_t min_stride_size; const uint64_t max_stride_size; @@ -196,15 +194,15 @@ public: const bool no_sparse; bool pool_snaps; bool write_fadvise_dontneed; - string low_tier_pool_name; + std::string low_tier_pool_name; librados::IoCtx low_tier_io_ctx; int snapname_num; - map<string,string > redirect_objs; + std::map<std::string, std::string> redirect_objs; bool enable_dedup; - string chunk_algo; - string chunk_size; + std::string chunk_algo; + std::string chunk_size; - RadosTestContext(const string &pool_name, + RadosTestContext(const std::string &pool_name, int max_in_flight, uint64_t max_size, uint64_t min_stride_size, @@ -213,10 +211,10 @@ public: bool no_sparse, bool pool_snaps, bool write_fadvise_dontneed, - const string &low_tier_pool_name, + const std::string &low_tier_pool_name, bool enable_dedup, - string chunk_algo, - string chunk_size, + std::string chunk_algo, + std::string chunk_size, const char *id = 0) : pool_obj_cont(), current_snap(0), @@ -313,7 +311,7 @@ public: char hostname_cstr[100]; gethostname(hostname_cstr, 100); - stringstream hostpid; + std::stringstream hostpid; hostpid << hostname_cstr << getpid() << "-"; prefix = hostpid.str(); ceph_assert(!initialized); @@ -331,7 +329,7 @@ public: void loop(TestOpGenerator *gen) { ceph_assert(initialized); - list<TestOp*> inflight; + std::list<TestOp*> inflight; std::unique_lock state_locker{state_lock}; TestOp *next = gen->next(*this); @@ -351,19 +349,19 @@ public: } state_lock.lock(); while (1) { - for (list<TestOp*>::iterator i = inflight.begin(); + for (auto i = inflight.begin(); i != inflight.end();) { if ((*i)->finished()) { - cout << (*i)->num << ": done (" << (inflight.size()-1) << " left)" << std::endl; + std::cout << (*i)->num << ": done (" << (inflight.size()-1) << " left)" << std::endl; delete *i; inflight.erase(i++); } else { ++i; } } - + if (inflight.size() >= (unsigned) max_in_flight || (!next && !inflight.empty())) { - cout << " waiting on " << inflight.size() << std::endl; + std::cout << " waiting on " << inflight.size() << std::endl; wait_cond.wait(state_locker); } else { break; @@ -383,28 +381,27 @@ public: wait_cond.notify_all(); } - TestWatchContext *get_watch_context(const string &oid) { + TestWatchContext *get_watch_context(const std::string &oid) { return watches.count(oid) ? watches[oid] : 0; } - TestWatchContext *watch(const string &oid) { + TestWatchContext *watch(const std::string &oid) { ceph_assert(!watches.count(oid)); return (watches[oid] = new TestWatchContext); } - void unwatch(const string &oid) { + void unwatch(const std::string &oid) { ceph_assert(watches.count(oid)); delete watches[oid]; watches.erase(oid); } - ObjectDesc get_most_recent(const string &oid) { + ObjectDesc get_most_recent(const std::string &oid) { ObjectDesc new_obj; - for (map<int, map<string,ObjectDesc> >::reverse_iterator i = - pool_obj_cont.rbegin(); + for (auto i = pool_obj_cont.rbegin(); i != pool_obj_cont.rend(); ++i) { - map<string,ObjectDesc>::iterator j = i->second.find(oid); + std::map<std::string,ObjectDesc>::iterator j = i->second.find(oid); if (j != i->second.end()) { new_obj = j->second; break; @@ -413,10 +410,10 @@ public: return new_obj; } - void rm_object_attrs(const string &oid, const set<string> &attrs) + void rm_object_attrs(const std::string &oid, const std::set<std::string> &attrs) { ObjectDesc new_obj = get_most_recent(oid); - for (set<string>::const_iterator i = attrs.begin(); + for (std::set<std::string>::const_iterator i = attrs.begin(); i != attrs.end(); ++i) { new_obj.attrs.erase(*i); @@ -426,7 +423,7 @@ public: pool_obj_cont[current_snap].insert_or_assign(oid, new_obj); } - void remove_object_header(const string &oid) + void remove_object_header(const std::string &oid) { ObjectDesc new_obj = get_most_recent(oid); new_obj.header = bufferlist(); @@ -436,7 +433,7 @@ public: } - void update_object_header(const string &oid, const bufferlist &bl) + void update_object_header(const std::string &oid, const bufferlist &bl) { ObjectDesc new_obj = get_most_recent(oid); new_obj.header = bl; @@ -446,11 +443,11 @@ public: pool_obj_cont[current_snap].insert_or_assign(oid, new_obj); } - void update_object_attrs(const string &oid, const map<string, ContDesc> &attrs) + void update_object_attrs(const std::string &oid, const std::map<std::string, ContDesc> &attrs) { ObjectDesc new_obj = get_most_recent(oid); - for (map<string, ContDesc>::const_iterator i = attrs.begin(); - i != attrs.end(); + for (auto i = attrs.cbegin(); + i != attrs.cend(); ++i) { new_obj.attrs[i->first] = i->second; } @@ -461,7 +458,7 @@ public: } void update_object(ContentsGenerator *cont_gen, - const string &oid, const ContDesc &contents) + const std::string &oid, const ContDesc &contents) { ObjectDesc new_obj = get_most_recent(oid); new_obj.exists = true; @@ -472,54 +469,52 @@ public: pool_obj_cont[current_snap].insert_or_assign(oid, new_obj); } - void update_object_full(const string &oid, const ObjectDesc &contents) + void update_object_full(const std::string &oid, const ObjectDesc &contents) { pool_obj_cont[current_snap].insert_or_assign(oid, contents); pool_obj_cont[current_snap][oid].dirty = true; } - void update_object_undirty(const string &oid) + void update_object_undirty(const std::string &oid) { ObjectDesc new_obj = get_most_recent(oid); new_obj.dirty = false; pool_obj_cont[current_snap].insert_or_assign(oid, new_obj); } - void update_object_version(const string &oid, uint64_t version, + void update_object_version(const std::string &oid, uint64_t version, int snap = -1) { - for (map<int, map<string,ObjectDesc> >::reverse_iterator i = - pool_obj_cont.rbegin(); + for (auto i = pool_obj_cont.rbegin(); i != pool_obj_cont.rend(); ++i) { if (snap != -1 && snap < i->first) continue; - map<string,ObjectDesc>::iterator j = i->second.find(oid); + std::map<std::string,ObjectDesc>::iterator j = i->second.find(oid); if (j != i->second.end()) { if (version) j->second.version = version; - cout << __func__ << " oid " << oid - << " v " << version << " " << j->second.most_recent() - << " " << (j->second.dirty ? "dirty" : "clean") - << " " << (j->second.exists ? "exists" : "dne") - << std::endl; + std::cout << __func__ << " oid " << oid + << " v " << version << " " << j->second.most_recent() + << " " << (j->second.dirty ? "dirty" : "clean") + << " " << (j->second.exists ? "exists" : "dne") + << std::endl; break; } } } - void remove_object(const string &oid) + void remove_object(const std::string &oid) { ceph_assert(!get_watch_context(oid)); ObjectDesc new_obj; pool_obj_cont[current_snap].insert_or_assign(oid, new_obj); } - bool find_object(const string &oid, ObjectDesc *contents, int snap = -1) const + bool find_object(const std::string &oid, ObjectDesc *contents, int snap = -1) const { - for (map<int, map<string,ObjectDesc> >::const_reverse_iterator i = - pool_obj_cont.rbegin(); - i != pool_obj_cont.rend(); + for (auto i = pool_obj_cont.crbegin(); + i != pool_obj_cont.crend(); ++i) { if (snap != -1 && snap < i->first) continue; if (i->second.count(oid) != 0) { @@ -530,16 +525,15 @@ public: return false; } - void update_object_redirect_target(const string &oid, const string &target) + void update_object_redirect_target(const std::string &oid, const std::string &target) { redirect_objs[oid] = target; } - void update_object_chunk_target(const string &oid, uint64_t offset, const ChunkDesc &info) + void update_object_chunk_target(const std::string &oid, uint64_t offset, const ChunkDesc &info) { - for (map<int, map<string,ObjectDesc> >::const_reverse_iterator i = - pool_obj_cont.rbegin(); - i != pool_obj_cont.rend(); + for (auto i = pool_obj_cont.crbegin(); + i != pool_obj_cont.crend(); ++i) { if (i->second.count(oid) != 0) { ObjectDesc obj_desc = i->second.find(oid)->second; @@ -551,7 +545,7 @@ public: return; } - bool object_existed_at(const string &oid, int snap = -1) const + bool object_existed_at(const std::string &oid, int snap = -1) const { ObjectDesc contents; bool found = find_object(oid, &contents, snap); @@ -560,17 +554,15 @@ public: void remove_snap(int snap) { - map<int, map<string,ObjectDesc> >::iterator next_iter = pool_obj_cont.find(snap); + std::map<int, std::map<std::string,ObjectDesc> >::iterator next_iter = pool_obj_cont.find(snap); ceph_assert(next_iter != pool_obj_cont.end()); - map<int, map<string,ObjectDesc> >::iterator current_iter = next_iter++; + std::map<int, std::map<std::string,ObjectDesc> >::iterator current_iter = next_iter++; ceph_assert(current_iter != pool_obj_cont.end()); - map<string,ObjectDesc> ¤t = current_iter->second; - map<string,ObjectDesc> &next = next_iter->second; - for (map<string,ObjectDesc>::iterator i = current.begin(); - i != current.end(); - ++i) { + std::map<std::string,ObjectDesc> ¤t = current_iter->second; + std::map<std::string,ObjectDesc> &next = next_iter->second; + for (auto i = current.begin(); i != current.end(); ++i) { if (next.count(i->first) == 0) { - next.insert(pair<string,ObjectDesc>(i->first, i->second)); + next.insert(std::pair<std::string,ObjectDesc>(i->first, i->second)); } } pool_obj_cont.erase(current_iter); @@ -585,7 +577,7 @@ public: seq = snap; } - void roll_back(const string &oid, int snap) + void roll_back(const std::string &oid, int snap) { ceph_assert(!get_watch_context(oid)); ObjectDesc contents; @@ -595,15 +587,14 @@ public: pool_obj_cont.rbegin()->second.insert_or_assign(oid, contents); } - void update_object_tier_flushed(const string &oid, int snap) + void update_object_tier_flushed(const std::string &oid, int snap) { - for (map<int, map<string,ObjectDesc> >::reverse_iterator i = - pool_obj_cont.rbegin(); + for (auto i = pool_obj_cont.rbegin(); i != pool_obj_cont.rend(); ++i) { if (snap != -1 && snap < i->first) continue; - map<string,ObjectDesc>::iterator j = i->second.find(oid); + std::map<std::string,ObjectDesc>::iterator j = i->second.find(oid); if (j != i->second.end()) { j->second.flushed = true; break; @@ -611,20 +602,19 @@ public: } } - bool check_oldest_snap_flushed(const string &oid, int snap) + bool check_oldest_snap_flushed(const std::string &oid, int snap) { - for (map<int, map<string,ObjectDesc> >::reverse_iterator i = - pool_obj_cont.rbegin(); + for (auto i = pool_obj_cont.rbegin(); i != pool_obj_cont.rend(); ++i) { if (snap != -1 && snap < i->first) continue; - map<string,ObjectDesc>::iterator j = i->second.find(oid); + std::map<std::string,ObjectDesc>::iterator j = i->second.find(oid); if (j != i->second.end() && !j->second.flushed) { - cout << __func__ << " oid " << oid - << " v " << j->second.version << " " << j->second.most_recent() - << " " << (j->second.flushed ? "flushed" : "unflushed") - << " " << i->first << std::endl; + std::cout << __func__ << " oid " << oid + << " v " << j->second.version << " " << j->second.most_recent() + << " " << (j->second.flushed ? "flushed" : "unflushed") + << " " << i->first << std::endl; return false; } } @@ -654,7 +644,7 @@ public: std::vector<librados::ObjectItem> result; int r = chunk_pool_ctx.object_list(c, shard_end, 12, {}, &result, &c); if (r < 0) { - cerr << "error object_list : " << cpp_strerror(r) << std::endl; + std::cerr << "error object_list : " << cpp_strerror(r) << std::endl; return false; } @@ -691,7 +681,7 @@ public: break; } if (src_refcount > dst_refcount) { - cerr << " src_object " << pp + std::cerr << " src_object " << pp << ": src_refcount " << src_refcount << ", dst_object " << oid << ": dst_refcount " << dst_refcount @@ -712,11 +702,11 @@ void write_callback(librados::completion_t comp, void *arg); /// entries if @c no_omap is not specified in context class RemoveAttrsOp : public TestOp { public: - string oid; + std::string oid; librados::ObjectWriteOperation op; librados::AioCompletion *comp; RemoveAttrsOp(int n, RadosTestContext *context, - const string &oid, + const std::string &oid, TestOpStat *stat) : TestOp(n, context, stat), oid(oid), comp(NULL) {} @@ -724,7 +714,7 @@ public: void _begin() override { ContDesc cont; - set<string> to_remove; + std::set<std::string> to_remove; { std::lock_guard l{context->state_lock}; ObjectDesc obj; @@ -740,7 +730,7 @@ public: if (rand() % 30) { ContentsGenerator::iterator iter = context->attr_gen.get_iterator(cont); - for (map<string, ContDesc>::iterator i = obj.attrs.begin(); + for (auto i = obj.attrs.begin(); i != obj.attrs.end(); ++i, ++iter) { if (!(*iter % 3)) { @@ -762,7 +752,7 @@ public: if (!context->no_omap) { op.omap_clear(); } - for (map<string, ContDesc>::iterator i = obj.attrs.begin(); + for (auto i = obj.attrs.begin(); i != obj.attrs.end(); ++i) { op.rmxattr(i->first.c_str()); @@ -773,8 +763,8 @@ public: context->rm_object_attrs(oid, to_remove); } - pair<TestOp*, TestOp::CallbackInfo*> *cb_arg = - new pair<TestOp*, TestOp::CallbackInfo*>(this, + std::pair<TestOp*, TestOp::CallbackInfo*> *cb_arg = + new std::pair<TestOp*, TestOp::CallbackInfo*>(this, new TestOp::CallbackInfo(0)); comp = context->rados.aio_create_completion((void*) cb_arg, &write_callback); @@ -796,7 +786,7 @@ public: return done; } - string getType() override + std::string getType() override { return "RemoveAttrsOp"; } @@ -806,12 +796,12 @@ public: /// entries if @c no_omap is not specified in context class SetAttrsOp : public TestOp { public: - string oid; + std::string oid; librados::ObjectWriteOperation op; librados::AioCompletion *comp; SetAttrsOp(int n, RadosTestContext *context, - const string &oid, + const std::string &oid, TestOpStat *stat) : TestOp(n, context, stat), oid(oid), comp(NULL) @@ -828,8 +818,8 @@ public: context->oid_not_in_use.erase(oid); } - map<string, bufferlist> omap_contents; - map<string, ContDesc> omap; + std::map<std::string, bufferlist> omap_contents; + std::map<std::string, ContDesc> omap; bufferlist header; ContentsGenerator::iterator keygen = context->attr_gen.get_iterator(cont); op.create(false); @@ -840,7 +830,7 @@ public: ++keygen; } for (int i = 0; i < 20; ++i) { - string key; + std::string key; while (!*keygen) ++keygen; while (*keygen && key.size() < 40) { key.push_back((*keygen % 20) + 'a'); @@ -865,8 +855,8 @@ public: context->update_object_attrs(oid, omap); } - pair<TestOp*, TestOp::CallbackInfo*> *cb_arg = - new pair<TestOp*, TestOp::CallbackInfo*>(this, + std::pair<TestOp*, TestOp::CallbackInfo*> *cb_arg = + new std::pair<TestOp*, TestOp::CallbackInfo*>(this, new TestOp::CallbackInfo(0)); comp = context->rados.aio_create_completion((void*) cb_arg, &write_callback); context->io_ctx.aio_operate(context->prefix+oid, comp, &op); @@ -877,7 +867,7 @@ public: std::lock_guard l{context->state_lock}; int r; if ((r = comp->get_return_value())) { - cerr << "err " << r << std::endl; + std::cerr << "err " << r << std::endl; ceph_abort(); } done = true; @@ -892,7 +882,7 @@ public: return done; } - string getType() override + std::string getType() override { return "SetAttrsOp"; } @@ -900,9 +890,9 @@ public: class WriteOp : public TestOp { public: - const string oid; + const std::string oid; ContDesc cont; - set<librados::AioCompletion *> waiting; + std::set<librados::AioCompletion *> waiting; librados::AioCompletion *rcompletion = nullptr; // numbers of async ops submitted uint64_t waiting_on = 0; @@ -917,7 +907,7 @@ public: WriteOp(int n, RadosTestContext *context, - const string &oid, + const std::string &oid, bool do_append, bool do_excl, TestOpStat *stat = 0) @@ -930,10 +920,10 @@ public: void _begin() override { assert(!done); - stringstream acc; + std::stringstream acc; std::lock_guard state_locker{context->state_lock}; acc << context->prefix << "OID: " << oid << " snap " << context->current_snap << std::endl; - string prefix = acc.str(); + std::string prefix = acc.str(); cont = ContDesc(context->seq_num, context->current_snap, context->seq_num, prefix); @@ -968,7 +958,7 @@ public: context->oid_in_use.insert(oid); context->oid_not_in_use.erase(oid); - map<uint64_t, uint64_t> ranges; + std::map<uint64_t, uint64_t> ranges; cont_gen->get_ranges_map(cont, ranges); std::cout << num << ": seq_num " << context->seq_num << " ranges " << ranges << std::endl; @@ -987,7 +977,7 @@ public: << " from " << offset << " to " << len + offset << " tid " << tid << std::endl; auto cb_arg = - new pair<TestOp*, TestOp::CallbackInfo*>(this, + new std::pair<TestOp*, TestOp::CallbackInfo*>(this, new TestOp::CallbackInfo(tid++)); librados::AioCompletion *completion = context->rados.aio_create_completion((void*) cb_arg, &write_callback); @@ -1007,8 +997,8 @@ public: bufferlist contbl; encode(cont, contbl); - pair<TestOp*, TestOp::CallbackInfo*> *cb_arg = - new pair<TestOp*, TestOp::CallbackInfo*>( + std::pair<TestOp*, TestOp::CallbackInfo*> *cb_arg = + new std::pair<TestOp*, TestOp::CallbackInfo*>( this, new TestOp::CallbackInfo(tid++)); librados::AioCompletion *completion = context->rados.aio_create_completion( @@ -1023,7 +1013,7 @@ public: context->prefix+oid, completion, &write_op); cb_arg = - new pair<TestOp*, TestOp::CallbackInfo*>( + new std::pair<TestOp*, TestOp::CallbackInfo*>( this, new TestOp::CallbackInfo(tid++)); rcompletion = context->rados.aio_create_completion( @@ -1043,10 +1033,10 @@ public: std::lock_guard state_locker{context->state_lock}; uint64_t tid = info->id; - cout << num << ": finishing write tid " << tid << " to " << context->prefix + oid << std::endl; + std::cout << num << ": finishing write tid " << tid << " to " << context->prefix + oid << std::endl; if (tid <= last_acked_tid) { - cerr << "Error: finished tid " << tid + std::cerr << "Error: finished tid " << tid << " when last_acked_tid was " << last_acked_tid << std::endl; ceph_abort(); } @@ -1056,25 +1046,23 @@ public: waiting_on--; if (waiting_on == 0) { uint64_t version = 0; - for (set<librados::AioCompletion *>::iterator i = waiting.begin(); - i != waiting.end(); - ) { + for (auto i = waiting.begin(); i != waiting.end();) { ceph_assert((*i)->is_complete()); if (int err = (*i)->get_return_value()) { - cerr << "Error: oid " << oid << " write returned error code " - << err << std::endl; + std::cerr << "Error: oid " << oid << " write returned error code " + << err << std::endl; } if ((*i)->get_version64() > version) version = (*i)->get_version64(); (*i)->release(); waiting.erase(i++); } - + context->update_object_version(oid, version); if (rcompletion->get_version64() != version) { - cerr << "Error: racing read on " << oid << " returned version " - << rcompletion->get_version64() << " rather than version " - << version << std::endl; + std::cerr << "Error: racing read on " << oid << " returned version " + << rcompletion->get_version64() << " rather than version " + << version << std::endl; ceph_abort_msg("racing read got wrong version"); } @@ -1101,7 +1089,7 @@ public: return done; } - string getType() override + std::string getType() override { return "WriteOp"; } @@ -1109,9 +1097,9 @@ public: class WriteSameOp : public TestOp { public: - string oid; + std::string oid; ContDesc cont; - set<librados::AioCompletion *> waiting; + std::set<librados::AioCompletion *> waiting; librados::AioCompletion *rcompletion; uint64_t waiting_on; uint64_t last_acked_tid; @@ -1122,7 +1110,7 @@ public: WriteSameOp(int n, RadosTestContext *context, - const string &oid, + const std::string &oid, TestOpStat *stat = 0) : TestOp(n, context, stat), oid(oid), rcompletion(NULL), waiting_on(0), @@ -1133,9 +1121,9 @@ public: { std::lock_guard state_locker{context->state_lock}; done = 0; - stringstream acc; + std::stringstream acc; acc << context->prefix << "OID: " << oid << " snap " << context->current_snap << std::endl; - string prefix = acc.str(); + std::string prefix = acc.str(); cont = ContDesc(context->seq_num, context->current_snap, context->seq_num, prefix); @@ -1147,7 +1135,7 @@ public: context->oid_in_use.insert(oid); context->oid_not_in_use.erase(oid); - map<uint64_t, uint64_t> ranges; + std::map<uint64_t, uint64_t> ranges; cont_gen->get_ranges_map(cont, ranges); std::cout << num << ": seq_num " << context->seq_num << " ranges " << ranges << std::endl; @@ -1166,7 +1154,7 @@ public: << " from " << offset << " to " << offset + len << " tid " << tid << std::endl; auto cb_arg = - new pair<TestOp*, TestOp::CallbackInfo*>(this, + new std::pair<TestOp*, TestOp::CallbackInfo*>(this, new TestOp::CallbackInfo(tid++)); librados::AioCompletion *completion = context->rados.aio_create_completion((void*) cb_arg, @@ -1183,8 +1171,8 @@ public: bufferlist contbl; encode(cont, contbl); - pair<TestOp*, TestOp::CallbackInfo*> *cb_arg = - new pair<TestOp*, TestOp::CallbackInfo*>( + std::pair<TestOp*, TestOp::CallbackInfo*> *cb_arg = + new std::pair<TestOp*, TestOp::CallbackInfo*>( this, new TestOp::CallbackInfo(tid++)); librados::AioCompletion *completion = context->rados.aio_create_completion( @@ -1197,7 +1185,7 @@ public: context->prefix+oid, completion, &write_op); cb_arg = - new pair<TestOp*, TestOp::CallbackInfo*>( + new std::pair<TestOp*, TestOp::CallbackInfo*>( this, new TestOp::CallbackInfo(tid++)); rcompletion = context->rados.aio_create_completion( @@ -1217,10 +1205,10 @@ public: std::lock_guard state_locker{context->state_lock}; uint64_t tid = info->id; - cout << num << ": finishing writesame tid " << tid << " to " << context->prefix + oid << std::endl; + std::cout << num << ": finishing writesame tid " << tid << " to " << context->prefix + oid << std::endl; if (tid <= last_acked_tid) { - cerr << "Error: finished tid " << tid + std::cerr << "Error: finished tid " << tid << " when last_acked_tid was " << last_acked_tid << std::endl; ceph_abort(); } @@ -1230,12 +1218,10 @@ public: waiting_on--; if (waiting_on == 0) { uint64_t version = 0; - for (set<librados::AioCompletion *>::iterator i = waiting.begin(); - i != waiting.end(); - ) { + for (auto i = waiting.begin(); i != waiting.end();) { ceph_assert((*i)->is_complete()); if (int err = (*i)->get_return_value()) { - cerr << "Error: oid " << oid << " writesame returned error code " + std::cerr << "Error: oid " << oid << " writesame returned error code " << err << std::endl; } if ((*i)->get_version64() > version) @@ -1248,9 +1234,9 @@ public: ceph_assert(rcompletion->is_complete()); ceph_assert(rcompletion->get_return_value() == 1); if (rcompletion->get_version64() != version) { - cerr << "Error: racing read on " << oid << " returned version " - << rcompletion->get_version64() << " rather than version " - << version << std::endl; + std::cerr << "Error: racing read on " << oid << " returned version " + << rcompletion->get_version64() << " rather than version " + << version << std::endl; ceph_abort_msg("racing read got wrong version"); } rcompletion->release(); @@ -1277,7 +1263,7 @@ public: return done; } - string getType() override + std::string getType() override { return "WriteSameOp"; } @@ -1285,11 +1271,11 @@ public: class DeleteOp : public TestOp { public: - string oid; + std::string oid; DeleteOp(int n, RadosTestContext *context, - const string &oid, + const std::string &oid, TestOpStat *stat = 0) : TestOp(n, context, stat), oid(oid) {} @@ -1325,7 +1311,7 @@ public: r = context->io_ctx.remove(context->prefix+oid); } if (r && !(r == -ENOENT && !present)) { - cerr << "r is " << r << " while deleting " << oid << " and present is " << present << std::endl; + std::cerr << "r is " << r << " while deleting " << oid << " and present is " << present << std::endl; ceph_abort(); } @@ -1335,7 +1321,7 @@ public: context->kick(); } - string getType() override + std::string getType() override { return "DeleteOp"; } @@ -1343,9 +1329,9 @@ public: class ReadOp : public TestOp { public: - vector<librados::AioCompletion *> completions; + std::vector<librados::AioCompletion *> completions; librados::ObjectReadOperation op; - string oid; + std::string oid; ObjectDesc old_value; int snap; bool balance_reads; @@ -1353,28 +1339,28 @@ public: std::shared_ptr<int> in_use; - vector<bufferlist> results; - vector<int> retvals; - vector<std::map<uint64_t, uint64_t>> extent_results; - vector<bool> is_sparse_read; + std::vector<bufferlist> results; + std::vector<int> retvals; + std::vector<std::map<uint64_t, uint64_t>> extent_results; + std::vector<bool> is_sparse_read; uint64_t waiting_on; - vector<bufferlist> checksums; - vector<int> checksum_retvals; + std::vector<bufferlist> checksums; + std::vector<int> checksum_retvals; - map<string, bufferlist> attrs; + std::map<std::string, bufferlist> attrs; int attrretval; - set<string> omap_requested_keys; - map<string, bufferlist> omap_returned_values; - set<string> omap_keys; - map<string, bufferlist> omap; + std::set<std::string> omap_requested_keys; + std::map<std::string, bufferlist> omap_returned_values; + std::set<std::string> omap_keys; + std::map<std::string, bufferlist> omap; bufferlist header; - map<string, bufferlist> xattrs; + std::map<std::string, bufferlist> xattrs; ReadOp(int n, RadosTestContext *context, - const string &oid, + const std::string &oid, bool balance_reads, bool localize_reads, TestOpStat *stat = 0) @@ -1464,11 +1450,9 @@ public: context->io_ctx.snap_set_read(context->snaps[snap]); } _do_read(op, 0); - for (map<string, ContDesc>::iterator i = old_value.attrs.begin(); - i != old_value.attrs.end(); - ++i) { + for (auto i = old_value.attrs.begin(); i != old_value.attrs.end(); ++i) { if (rand() % 2) { - string key = i->first; + std::string key = i->first; if (rand() % 2) key.push_back((rand() % 26) + 'a'); omap_requested_keys.insert(key); @@ -1520,34 +1504,34 @@ public: context->oid_in_use.erase(oid); context->oid_not_in_use.insert(oid); int retval = completions[0]->get_return_value(); - for (vector<librados::AioCompletion *>::iterator it = completions.begin(); + for (auto it = completions.begin(); it != completions.end(); ++it) { ceph_assert((*it)->is_complete()); uint64_t version = (*it)->get_version64(); int err = (*it)->get_return_value(); if (err != retval) { - cerr << num << ": Error: oid " << oid << " read returned different error codes: " + std::cerr << num << ": Error: oid " << oid << " read returned different error codes: " << retval << " and " << err << std::endl; ceph_abort(); } if (err) { if (!(err == -ENOENT && old_value.deleted())) { - cerr << num << ": Error: oid " << oid << " read returned error code " + std::cerr << num << ": Error: oid " << oid << " read returned error code " << err << std::endl; ceph_abort(); } } else if (version != old_value.version) { - cerr << num << ": oid " << oid << " version is " << version - << " and expected " << old_value.version << std::endl; + std::cerr << num << ": oid " << oid << " version is " << version + << " and expected " << old_value.version << std::endl; ceph_assert(version == old_value.version); } } if (!retval) { - map<string, bufferlist>::iterator iter = xattrs.find("_header"); + std::map<std::string, bufferlist>::iterator iter = xattrs.find("_header"); bufferlist headerbl; if (iter == xattrs.end()) { if (old_value.has_contents()) { - cerr << num << ": Error: did not find header attr, has_contents: " + std::cerr << num << ": Error: did not find header attr, has_contents: " << old_value.has_contents() << std::endl; ceph_assert(!old_value.has_contents()); @@ -1567,19 +1551,19 @@ public: auto p = headerbl.cbegin(); decode(to_check, p); if (to_check != old_value.most_recent()) { - cerr << num << ": oid " << oid << " found incorrect object contents " << to_check + std::cerr << num << ": oid " << oid << " found incorrect object contents " << to_check << ", expected " << old_value.most_recent() << std::endl; context->errors++; } for (unsigned i = 0; i < results.size(); i++) { if (is_sparse_read[i]) { if (!old_value.check_sparse(extent_results[i], results[i])) { - cerr << num << ": oid " << oid << " contents " << to_check << " corrupt" << std::endl; + std::cerr << num << ": oid " << oid << " contents " << to_check << " corrupt" << std::endl; context->errors++; } } else { if (!old_value.check(results[i])) { - cerr << num << ": oid " << oid << " contents " << to_check << " corrupt" << std::endl; + std::cerr << num << ": oid " << oid << " contents " << to_check << " corrupt" << std::endl; context->errors++; } @@ -1595,7 +1579,7 @@ public: } } if (checksum_retvals[i] != 0 || checksum != results[i].crc32c(-1)) { - cerr << num << ": oid " << oid << " checksum " << checksums[i] + std::cerr << num << ": oid " << oid << " checksum " << checksums[i] << " incorrect, expecting " << results[i].crc32c(-1) << std::endl; context->errors++; @@ -1608,34 +1592,34 @@ public: // Attributes if (!context->no_omap) { if (!(old_value.header == header)) { - cerr << num << ": oid " << oid << " header does not match, old size: " + std::cerr << num << ": oid " << oid << " header does not match, old size: " << old_value.header.length() << " new size " << header.length() << std::endl; ceph_assert(old_value.header == header); } if (omap.size() != old_value.attrs.size()) { - cerr << num << ": oid " << oid << " omap.size() is " << omap.size() + std::cerr << num << ": oid " << oid << " omap.size() is " << omap.size() << " and old is " << old_value.attrs.size() << std::endl; ceph_assert(omap.size() == old_value.attrs.size()); } if (omap_keys.size() != old_value.attrs.size()) { - cerr << num << ": oid " << oid << " omap.size() is " << omap_keys.size() + std::cerr << num << ": oid " << oid << " omap.size() is " << omap_keys.size() << " and old is " << old_value.attrs.size() << std::endl; ceph_assert(omap_keys.size() == old_value.attrs.size()); } } if (xattrs.size() != old_value.attrs.size()) { - cerr << num << ": oid " << oid << " xattrs.size() is " << xattrs.size() - << " and old is " << old_value.attrs.size() << std::endl; + std::cerr << num << ": oid " << oid << " xattrs.size() is " << xattrs.size() + << " and old is " << old_value.attrs.size() << std::endl; ceph_assert(xattrs.size() == old_value.attrs.size()); } - for (map<string, ContDesc>::iterator iter = old_value.attrs.begin(); + for (auto iter = old_value.attrs.begin(); iter != old_value.attrs.end(); ++iter) { bufferlist bl = context->attr_gen.gen_bl( iter->second); if (!context->no_omap) { - map<string, bufferlist>::iterator omap_iter = omap.find(iter->first); + std::map<std::string, bufferlist>::iterator omap_iter = omap.find(iter->first); ceph_assert(omap_iter != omap.end()); ceph_assert(bl.length() == omap_iter->second.length()); bufferlist::iterator k = bl.begin(); @@ -1645,7 +1629,7 @@ public: ceph_assert(*l == *k); } } - map<string, bufferlist>::iterator xattr_iter = xattrs.find(iter->first); + auto xattr_iter = xattrs.find(iter->first); ceph_assert(xattr_iter != xattrs.end()); ceph_assert(bl.length() == xattr_iter->second.length()); bufferlist::iterator k = bl.begin(); @@ -1656,7 +1640,7 @@ public: } } if (!context->no_omap) { - for (set<string>::iterator i = omap_requested_keys.begin(); + for (std::set<std::string>::iterator i = omap_requested_keys.begin(); i != omap_requested_keys.end(); ++i) { if (!omap_returned_values.count(*i)) @@ -1664,7 +1648,7 @@ public: if (!old_value.attrs.count(*i)) ceph_assert(!omap_returned_values.count(*i)); } - for (map<string, bufferlist>::iterator i = omap_returned_values.begin(); + for (auto i = omap_returned_values.begin(); i != omap_returned_values.end(); ++i) { ceph_assert(omap_requested_keys.count(i->first)); @@ -1674,8 +1658,7 @@ public: } } } - for (vector<librados::AioCompletion *>::iterator it = completions.begin(); - it != completions.end(); ++it) { + for (auto it = completions.begin(); it != completions.end(); ++it) { (*it)->release(); } context->kick(); @@ -1687,7 +1670,7 @@ public: return done; } - string getType() override + std::string getType() override { return "ReadOp"; } @@ -1704,17 +1687,17 @@ public: void _begin() override { uint64_t snap; - string snapname; + std::string snapname; if (context->pool_snaps) { - stringstream ss; + std::stringstream ss; ss << context->prefix << "snap" << ++context->snapname_num; snapname = ss.str(); int ret = context->io_ctx.snap_create(snapname.c_str()); if (ret) { - cerr << "snap_create returned " << ret << std::endl; + std::cerr << "snap_create returned " << ret << std::endl; ceph_abort(); } ceph_assert(!context->io_ctx.snap_lookup(snapname.c_str(), &snap)); @@ -1727,10 +1710,10 @@ public: context->add_snap(snap); if (!context->pool_snaps) { - vector<uint64_t> snapset(context->snaps.size()); + std::vector<uint64_t> snapset(context->snaps.size()); int j = 0; - for (map<int,uint64_t>::reverse_iterator i = context->snaps.rbegin(); + for (auto i = context->snaps.rbegin(); i != context->snaps.rend(); ++i, ++j) { snapset[j] = i->second; @@ -1740,13 +1723,13 @@ public: int r = context->io_ctx.selfmanaged_snap_set_write_ctx(context->seq, snapset); if (r) { - cerr << "r is " << r << " snapset is " << snapset << " seq is " << context->seq << std::endl; + std::cerr << "r is " << r << " snapset is " << snapset << " seq is " << context->seq << std::endl; ceph_abort(); } } } - string getType() override + std::string getType() override { return "SnapCreateOp"; } @@ -1770,16 +1753,16 @@ public: context->remove_snap(to_remove); if (context->pool_snaps) { - string snapname; + std::string snapname; ceph_assert(!context->io_ctx.snap_get_name(snap, &snapname)); ceph_assert(!context->io_ctx.snap_remove(snapname.c_str())); } else { ceph_assert(!context->io_ctx.selfmanaged_snap_remove(snap)); - vector<uint64_t> snapset(context->snaps.size()); + std::vector<uint64_t> snapset(context->snaps.size()); int j = 0; - for (map<int,uint64_t>::reverse_iterator i = context->snaps.rbegin(); + for (auto i = context->snaps.rbegin(); i != context->snaps.rend(); ++i, ++j) { snapset[j] = i->second; @@ -1787,24 +1770,24 @@ public: int r = context->io_ctx.selfmanaged_snap_set_write_ctx(context->seq, snapset); if (r) { - cerr << "r is " << r << " snapset is " << snapset << " seq is " << context->seq << std::endl; + std::cerr << "r is " << r << " snapset is " << snapset << " seq is " << context->seq << std::endl; ceph_abort(); } } } - string getType() override + std::string getType() override { return "SnapRemoveOp"; } }; class WatchOp : public TestOp { - string oid; + std::string oid; public: WatchOp(int n, RadosTestContext *context, - const string &_oid, + const std::string &_oid, TestOpStat *stat = 0) : TestOp(n, context, stat), oid(_oid) @@ -1843,7 +1826,7 @@ public: } if (r) { - cerr << "r is " << r << std::endl; + std::cerr << "r is " << r << std::endl; ceph_abort(); } @@ -1854,7 +1837,7 @@ public: } } - string getType() override + std::string getType() override { return "WatchOp"; } @@ -1862,19 +1845,19 @@ public: class RollbackOp : public TestOp { public: - string oid; + std::string oid; int roll_back_to; librados::ObjectWriteOperation zero_write_op1; librados::ObjectWriteOperation zero_write_op2; librados::ObjectWriteOperation op; - vector<librados::AioCompletion *> comps; + std::vector<librados::AioCompletion *> comps; std::shared_ptr<int> in_use; int last_finished; int outstanding; RollbackOp(int n, RadosTestContext *context, - const string &_oid, + const std::string &_oid, TestOpStat *stat = 0) : TestOp(n, context, stat), oid(_oid), roll_back_to(-1), @@ -1907,7 +1890,7 @@ public: roll_back_to); - cout << "rollback oid " << oid << " to " << roll_back_to << std::endl; + std::cout << "rollback oid " << oid << " to " << roll_back_to << std::endl; bool existed_before = context->object_existed_at(oid); bool existed_after = context->object_existed_at(oid, roll_back_to); @@ -1930,8 +1913,8 @@ public: } if (existed_before) { - pair<TestOp*, TestOp::CallbackInfo*> *cb_arg = - new pair<TestOp*, TestOp::CallbackInfo*>(this, + std::pair<TestOp*, TestOp::CallbackInfo*> *cb_arg = + new std::pair<TestOp*, TestOp::CallbackInfo*>(this, new TestOp::CallbackInfo(0)); comps[0] = context->rados.aio_create_completion((void*) cb_arg, @@ -1940,8 +1923,8 @@ public: context->prefix+oid, comps[0], &zero_write_op1); } { - pair<TestOp*, TestOp::CallbackInfo*> *cb_arg = - new pair<TestOp*, TestOp::CallbackInfo*>(this, + std::pair<TestOp*, TestOp::CallbackInfo*> *cb_arg = + new std::pair<TestOp*, TestOp::CallbackInfo*>(this, new TestOp::CallbackInfo(1)); comps[1] = context->rados.aio_create_completion((void*) cb_arg, @@ -1950,8 +1933,8 @@ public: context->prefix+oid, comps[1], &op); } if (existed_after) { - pair<TestOp*, TestOp::CallbackInfo*> *cb_arg = - new pair<TestOp*, TestOp::CallbackInfo*>(this, + std::pair<TestOp*, TestOp::CallbackInfo*> *cb_arg = + new std::pair<TestOp*, TestOp::CallbackInfo*>(this, new TestOp::CallbackInfo(2)); comps[2] = context->rados.aio_create_completion((void*) cb_arg, @@ -1965,14 +1948,14 @@ public: { std::lock_guard l{context->state_lock}; uint64_t tid = info->id; - cout << num << ": finishing rollback tid " << tid + std::cout << num << ": finishing rollback tid " << tid << " to " << context->prefix + oid << std::endl; ceph_assert((int)(info->id) > last_finished); last_finished = info->id; int r; if ((r = comps[last_finished]->get_return_value()) != 0) { - cerr << "err " << r << std::endl; + std::cerr << "err " << r << std::endl; ceph_abort(); } if (--outstanding == 0) { @@ -1990,7 +1973,7 @@ public: return done; } - string getType() override + std::string getType() override { return "RollBackOp"; } @@ -1998,7 +1981,7 @@ public: class CopyFromOp : public TestOp { public: - string oid, oid_src; + std::string oid, oid_src; ObjectDesc src_value; librados::ObjectWriteOperation op; librados::ObjectReadOperation rd_op; @@ -2011,8 +1994,8 @@ public: int r; CopyFromOp(int n, RadosTestContext *context, - const string &oid, - const string &oid_src, + const std::string &oid, + const std::string &oid_src, TestOpStat *stat) : TestOp(n, context, stat), oid(oid), oid_src(oid_src), @@ -2044,19 +2027,19 @@ public: context->update_object_full(oid, src_value); } - string src = context->prefix+oid_src; + std::string src = context->prefix+oid_src; op.copy_from(src.c_str(), context->io_ctx, src_value.version, 0); - pair<TestOp*, TestOp::CallbackInfo*> *cb_arg = - new pair<TestOp*, TestOp::CallbackInfo*>(this, + std::pair<TestOp*, TestOp::CallbackInfo*> *cb_arg = + new std::pair<TestOp*, TestOp::CallbackInfo*>(this, new TestOp::CallbackInfo(0)); comp = context->rados.aio_create_completion((void*) cb_arg, &write_callback); context->io_ctx.aio_operate(context->prefix+oid, comp, &op); // queue up a racing read, too. - pair<TestOp*, TestOp::CallbackInfo*> *read_cb_arg = - new pair<TestOp*, TestOp::CallbackInfo*>(this, + std::pair<TestOp*, TestOp::CallbackInfo*> *read_cb_arg = + new std::pair<TestOp*, TestOp::CallbackInfo*>(this, new TestOp::CallbackInfo(1)); comp_racing_read = context->rados.aio_create_completion((void*) read_cb_arg, &write_callback); rd_op.stat(NULL, NULL, NULL); @@ -2077,12 +2060,12 @@ public: if (info->id == 0) { // copy_from ceph_assert(comp->is_complete()); - cout << num << ": finishing copy_from to " << context->prefix + oid << std::endl; + std::cout << num << ": finishing copy_from to " << context->prefix + oid << std::endl; if ((r = comp->get_return_value())) { if (r == -ENOENT && src_value.deleted()) { - cout << num << ": got expected ENOENT (src dne)" << std::endl; + std::cout << num << ": got expected ENOENT (src dne)" << std::endl; } else { - cerr << "Error: oid " << oid << " copy_from " << oid_src << " returned error code " + std::cerr << "Error: oid " << oid << " copy_from " << oid_src << " returned error code " << r << std::endl; ceph_abort(); } @@ -2094,10 +2077,10 @@ public: } else if (info->id == 1) { // racing read ceph_assert(comp_racing_read->is_complete()); - cout << num << ": finishing copy_from racing read to " << context->prefix + oid << std::endl; + std::cout << num << ": finishing copy_from racing read to " << context->prefix + oid << std::endl; if ((r = comp_racing_read->get_return_value())) { if (!(r == -ENOENT && src_value.deleted())) { - cerr << "Error: oid " << oid << " copy_from " << oid_src << " returned error code " + std::cerr << "Error: oid " << oid << " copy_from " << oid_src << " returned error code " << r << std::endl; } } else { @@ -2120,7 +2103,7 @@ public: return done == 2; } - string getType() override + std::string getType() override { return "CopyFromOp"; } @@ -2128,9 +2111,9 @@ public: class ChunkReadOp : public TestOp { public: - vector<librados::AioCompletion *> completions; + std::vector<librados::AioCompletion *> completions; librados::ObjectReadOperation op; - string oid; + std::string oid; ObjectDesc old_value; ObjectDesc tgt_value; int snap; @@ -2139,23 +2122,23 @@ public: std::shared_ptr<int> in_use; - vector<bufferlist> results; - vector<int> retvals; - vector<bool> is_sparse_read; + std::vector<bufferlist> results; + std::vector<int> retvals; + std::vector<bool> is_sparse_read; uint64_t waiting_on; - vector<bufferlist> checksums; - vector<int> checksum_retvals; + std::vector<bufferlist> checksums; + std::vector<int> checksum_retvals; uint32_t offset = 0; uint32_t length = 0; - string tgt_oid; - string tgt_pool_name; + std::string tgt_oid; + std::string tgt_pool_name; uint32_t tgt_offset = 0; ChunkReadOp(int n, RadosTestContext *context, - const string &oid, - const string &tgt_pool_name, + const std::string &oid, + const std::string &tgt_pool_name, bool balance_reads, bool localize_reads, TestOpStat *stat = 0) @@ -2292,13 +2275,13 @@ public: ceph_assert(completions[i]->is_complete()); int err = completions[i]->get_return_value(); if (err != retval) { - cerr << num << ": Error: oid " << oid << " read returned different error codes: " + std::cerr << num << ": Error: oid " << oid << " read returned different error codes: " << retval << " and " << err << std::endl; ceph_abort(); } if (err) { if (!(err == -ENOENT && old_value.deleted())) { - cerr << num << ": Error: oid " << oid << " read returned error code " + std::cerr << num << ": Error: oid " << oid << " read returned error code " << err << std::endl; ceph_abort(); } @@ -2326,7 +2309,7 @@ public: } if (checksum_retvals[1] != 0) { - cerr << num << ": oid " << oid << " checksum retvals " << checksums[0] + std::cerr << num << ": oid " << oid << " checksum retvals " << checksums[0] << " error " << std::endl; context->errors++; } @@ -2334,7 +2317,7 @@ public: checksum[0] = results[0].crc32c(-1); if (checksum[0] != checksum[1]) { - cerr << num << ": oid " << oid << " checksum src " << checksum[0] + std::cerr << num << ": oid " << oid << " checksum src " << checksum[0] << " chunksum tgt " << checksum[1] << " incorrect, expecting " << results[0].crc32c(-1) << std::endl; @@ -2343,8 +2326,7 @@ public: if (context->errors) ceph_abort(); } } - for (vector<librados::AioCompletion *>::iterator it = completions.begin(); - it != completions.end(); ++it) { + for (auto it = completions.begin(); it != completions.end(); ++it) { (*it)->release(); } context->kick(); @@ -2356,7 +2338,7 @@ public: return done; } - string getType() override + std::string getType() override { return "ChunkReadOp"; } @@ -2364,7 +2346,7 @@ public: class CopyOp : public TestOp { public: - string oid, oid_src, tgt_pool_name; + std::string oid, oid_src, tgt_pool_name; librados::ObjectWriteOperation op; librados::ObjectReadOperation rd_op; librados::AioCompletion *comp; @@ -2373,9 +2355,9 @@ public: int r; CopyOp(int n, RadosTestContext *context, - const string &oid_src, - const string &oid, - const string &tgt_pool_name, + const std::string &oid_src, + const std::string &oid, + const std::string &tgt_pool_name, TestOpStat *stat = 0) : TestOp(n, context, stat), oid(oid), oid_src(oid_src), tgt_pool_name(tgt_pool_name), @@ -2388,14 +2370,14 @@ public: context->oid_in_use.insert(oid_src); context->oid_not_in_use.erase(oid_src); - string src = context->prefix+oid_src; + std::string src = context->prefix+oid_src; context->find_object(oid_src, &src_value); op.copy_from(src.c_str(), context->io_ctx, src_value.version, 0); - cout << "copy op oid " << oid_src << " to " << oid << " tgt_pool_name " << tgt_pool_name << std::endl; + std::cout << "copy op oid " << oid_src << " to " << oid << " tgt_pool_name " << tgt_pool_name << std::endl; - pair<TestOp*, TestOp::CallbackInfo*> *cb_arg = - new pair<TestOp*, TestOp::CallbackInfo*>(this, + std::pair<TestOp*, TestOp::CallbackInfo*> *cb_arg = + new std::pair<TestOp*, TestOp::CallbackInfo*>(this, new TestOp::CallbackInfo(0)); comp = context->rados.aio_create_completion((void*) cb_arg, &write_callback); if (tgt_pool_name == context->low_tier_pool_name) { @@ -2411,10 +2393,10 @@ public: if (info->id == 0) { ceph_assert(comp->is_complete()); - cout << num << ": finishing copy op to oid " << oid << std::endl; + std::cout << num << ": finishing copy op to oid " << oid << std::endl; if ((r = comp->get_return_value())) { - cerr << "Error: oid " << oid << " write returned error code " - << r << std::endl; + std::cerr << "Error: oid " << oid << " write returned error code " + << r << std::endl; ceph_abort(); } } @@ -2431,7 +2413,7 @@ public: return done == 1; } - string getType() override + std::string getType() override { return "CopyOp"; } @@ -2439,7 +2421,7 @@ public: class SetChunkOp : public TestOp { public: - string oid, oid_tgt; + std::string oid, oid_tgt; ObjectDesc src_value, tgt_value; librados::ObjectReadOperation op; librados::AioCompletion *comp; @@ -2452,8 +2434,8 @@ public: std::shared_ptr<int> in_use; SetChunkOp(int n, RadosTestContext *context, - const string &oid, - const string &oid_tgt, + const std::string &oid, + const std::string &oid_tgt, TestOpStat *stat = 0) : TestOp(n, context, stat), oid(oid), oid_tgt(oid_tgt), @@ -2463,8 +2445,8 @@ public: snap(0) {} - pair<uint64_t, uint64_t> get_rand_off_len(uint32_t max_len) { - pair<uint64_t, uint64_t> r (0, 0); + std::pair<uint64_t, uint64_t> get_rand_off_len(uint32_t max_len) { + std::pair<uint64_t, uint64_t> r (0, 0); r.first = rand() % max_len; r.second = rand() % max_len; r.first = r.first - (r.first % 512); @@ -2501,7 +2483,7 @@ public: } else { max_len = src_value.most_recent_gen()->get_length(src_value.most_recent()); } - pair<uint64_t, uint64_t> off_len; // first: offset, second: length + std::pair<uint64_t, uint64_t> off_len; // first: offset, second: length if (snap >= 0) { context->io_ctx.snap_set_read(context->snaps[snap]); off_len = get_rand_off_len(max_len); @@ -2516,12 +2498,12 @@ public: length = off_len.second; tgt_offset = offset; - string target_oid; + std::string target_oid; if (!src_value.deleted() && oid_tgt.empty()) { bufferlist bl; int r = context->io_ctx.read(context->prefix+oid, bl, length, offset); ceph_assert(r > 0); - string fp_oid = ceph::crypto::digest<ceph::crypto::SHA256>(bl).to_str(); + std::string fp_oid = ceph::crypto::digest<ceph::crypto::SHA256>(bl).to_str(); r = context->low_tier_io_ctx.write(fp_oid, bl, bl.length(), 0); ceph_assert(r == 0); target_oid = fp_oid; @@ -2530,15 +2512,15 @@ public: target_oid = context->prefix+oid_tgt; } - cout << num << ": " << "set_chunk oid " << oid << " offset: " << offset + std::cout << num << ": " << "set_chunk oid " << oid << " offset: " << offset << " length: " << length << " target oid " << target_oid << " offset: " << tgt_offset << " snap " << snap << std::endl; op.set_chunk(offset, length, context->low_tier_io_ctx, target_oid, tgt_offset, CEPH_OSD_OP_FLAG_WITH_REFERENCE); - pair<TestOp*, TestOp::CallbackInfo*> *cb_arg = - new pair<TestOp*, TestOp::CallbackInfo*>(this, + std::pair<TestOp*, TestOp::CallbackInfo*> *cb_arg = + new std::pair<TestOp*, TestOp::CallbackInfo*>(this, new TestOp::CallbackInfo(0)); comp = context->rados.aio_create_completion((void*) cb_arg, &write_callback); @@ -2555,21 +2537,21 @@ public: if (info->id == 0) { ceph_assert(comp->is_complete()); - cout << num << ": finishing set_chunk to oid " << oid << std::endl; + std::cout << num << ": finishing set_chunk to oid " << oid << std::endl; if ((r = comp->get_return_value())) { if (r == -ENOENT && src_value.deleted()) { - cout << num << ": got expected ENOENT (src dne)" << std::endl; + std::cout << num << ": got expected ENOENT (src dne)" << std::endl; } else if (r == -ENOENT && context->oid_set_chunk_tgt_pool.find(oid_tgt) != context->oid_set_chunk_tgt_pool.end()) { - cout << num << ": get expected ENOENT tgt oid " << oid_tgt << std::endl; + std::cout << num << ": get expected ENOENT tgt oid " << oid_tgt << std::endl; } else if (r == -ERANGE && src_value.deleted()) { - cout << num << ": got expected ERANGE (src dne)" << std::endl; + std::cout << num << ": got expected ERANGE (src dne)" << std::endl; } else if (r == -EOPNOTSUPP) { - cout << "Range is overlapped: oid " << oid << " set_chunk " << oid_tgt << " returned error code " + std::cout << "Range is overlapped: oid " << oid << " set_chunk " << oid_tgt << " returned error code " << r << " offset: " << offset << " length: " << length << std::endl; context->update_object_version(oid, comp->get_version64()); } else { - cerr << "Error: oid " << oid << " set_chunk " << oid_tgt << " returned error code " + std::cerr << "Error: oid " << oid << " set_chunk " << oid_tgt << " returned error code " << r << std::endl; ceph_abort(); } @@ -2595,7 +2577,7 @@ public: return done == 1; } - string getType() override + std::string getType() override { return "SetChunkOp"; } @@ -2603,7 +2585,7 @@ public: class SetRedirectOp : public TestOp { public: - string oid, oid_tgt, tgt_pool_name; + std::string oid, oid_tgt, tgt_pool_name; ObjectDesc src_value, tgt_value; librados::ObjectWriteOperation op; librados::ObjectReadOperation rd_op; @@ -2613,9 +2595,9 @@ public: int r; SetRedirectOp(int n, RadosTestContext *context, - const string &oid, - const string &oid_tgt, - const string &tgt_pool_name, + const std::string &oid, + const std::string &oid_tgt, + const std::string &tgt_pool_name, TestOpStat *stat = 0) : TestOp(n, context, stat), oid(oid), oid_tgt(oid_tgt), tgt_pool_name(tgt_pool_name), @@ -2637,14 +2619,14 @@ public: if(!context->redirect_objs[oid].empty()) { /* copy_from oid --> oid_tgt */ comp = context->rados.aio_create_completion(); - string src = context->prefix+oid; + std::string src = context->prefix+oid; op.copy_from(src.c_str(), context->io_ctx, src_value.version, 0); context->low_tier_io_ctx.aio_operate(context->prefix+oid_tgt, comp, &op, librados::OPERATION_ORDER_READS_WRITES); comp->wait_for_complete(); if ((r = comp->get_return_value())) { - cerr << "Error: oid " << oid << " copy_from " << oid_tgt << " returned error code " - << r << std::endl; + std::cerr << "Error: oid " << oid << " copy_from " << oid_tgt << " returned error code " + << r << std::endl; ceph_abort(); } comp->release(); @@ -2659,7 +2641,7 @@ public: comp->wait_for_complete(); if ((r = comp->get_return_value())) { if (!(r == -ENOENT && !present) && r != -EOPNOTSUPP) { - cerr << "r is " << r << " while deleting " << oid << " and present is " << present << std::endl; + std::cerr << "r is " << r << " while deleting " << oid << " and present is " << present << std::endl; ceph_abort(); } } @@ -2677,7 +2659,7 @@ public: NULL); comp->wait_for_complete(); if ((r = comp->get_return_value()) && !src_value.deleted()) { - cerr << "Error: oid " << oid << " stat returned error code " + std::cerr << "Error: oid " << oid << " stat returned error code " << r << std::endl; ceph_abort(); } @@ -2692,7 +2674,7 @@ public: NULL); comp->wait_for_complete(); if ((r = comp->get_return_value())) { - cerr << "Error: oid " << oid_tgt << " stat returned error code " + std::cerr << "Error: oid " << oid_tgt << " stat returned error code " << r << std::endl; ceph_abort(); } @@ -2706,8 +2688,8 @@ public: op.assert_version(src_value.version); op.set_redirect(context->prefix+oid_tgt, context->low_tier_io_ctx, tgt_version); - pair<TestOp*, TestOp::CallbackInfo*> *cb_arg = - new pair<TestOp*, TestOp::CallbackInfo*>(this, + std::pair<TestOp*, TestOp::CallbackInfo*> *cb_arg = + new std::pair<TestOp*, TestOp::CallbackInfo*>(this, new TestOp::CallbackInfo(0)); comp = context->rados.aio_create_completion((void*) cb_arg, &write_callback); context->io_ctx.aio_operate(context->prefix+oid, comp, &op, @@ -2720,12 +2702,12 @@ public: if (info->id == 0) { ceph_assert(comp->is_complete()); - cout << num << ": finishing set_redirect to oid " << oid << std::endl; + std::cout << num << ": finishing set_redirect to oid " << oid << std::endl; if ((r = comp->get_return_value())) { if (r == -ENOENT && src_value.deleted()) { - cout << num << ": got expected ENOENT (src dne)" << std::endl; + std::cout << num << ": got expected ENOENT (src dne)" << std::endl; } else { - cerr << "Error: oid " << oid << " set_redirect " << oid_tgt << " returned error code " + std::cerr << "Error: oid " << oid << " set_redirect " << oid_tgt << " returned error code " << r << std::endl; ceph_abort(); } @@ -2747,7 +2729,7 @@ public: return done == 1; } - string getType() override + std::string getType() override { return "SetRedirectOp"; } @@ -2755,13 +2737,13 @@ public: class UnsetRedirectOp : public TestOp { public: - string oid; + std::string oid; librados::ObjectWriteOperation op; librados::AioCompletion *comp = nullptr; UnsetRedirectOp(int n, RadosTestContext *context, - const string &oid, + const std::string &oid, TestOpStat *stat = 0) : TestOp(n, context, stat), oid(oid) {} @@ -2794,7 +2776,7 @@ public: comp->wait_for_complete(); int r = comp->get_return_value(); if (r && !(r == -ENOENT && !present)) { - cerr << "r is " << r << " while deleting " << oid << " and present is " << present << std::endl; + std::cerr << "r is " << r << " while deleting " << oid << " and present is " << present << std::endl; ceph_abort(); } state_locker.lock(); @@ -2803,12 +2785,12 @@ public: if(!context->redirect_objs[oid].empty()) { context->oid_redirect_not_in_use.insert(context->redirect_objs[oid]); context->oid_redirect_in_use.erase(context->redirect_objs[oid]); - context->update_object_redirect_target(oid, string()); + context->update_object_redirect_target(oid, {}); } context->kick(); } - string getType() override + std::string getType() override { return "UnsetRedirectOp"; } @@ -2818,13 +2800,13 @@ class TierPromoteOp : public TestOp { public: librados::AioCompletion *completion; librados::ObjectWriteOperation op; - string oid; + std::string oid; std::shared_ptr<int> in_use; ObjectDesc src_value; TierPromoteOp(int n, RadosTestContext *context, - const string &oid, + const std::string &oid, TestOpStat *stat) : TestOp(n, context, stat), completion(NULL), @@ -2840,8 +2822,8 @@ public: context->find_object(oid, &src_value); - pair<TestOp*, TestOp::CallbackInfo*> *cb_arg = - new pair<TestOp*, TestOp::CallbackInfo*>(this, + std::pair<TestOp*, TestOp::CallbackInfo*> *cb_arg = + new std::pair<TestOp*, TestOp::CallbackInfo*>(this, new TestOp::CallbackInfo(0)); completion = context->rados.aio_create_completion((void *) cb_arg, &write_callback); @@ -2862,11 +2844,11 @@ public: ObjectDesc oid_value; context->find_object(oid, &oid_value); int r = completion->get_return_value(); - cout << num << ": got " << cpp_strerror(r) << std::endl; + std::cout << num << ": got " << cpp_strerror(r) << std::endl; if (r == 0) { // sucess } else if (r == -ENOENT && src_value.deleted()) { - cout << num << ": got expected ENOENT (src dne)" << std::endl; + std::cout << num << ": got expected ENOENT (src dne)" << std::endl; } else { ceph_abort_msg("shouldn't happen"); } @@ -2883,7 +2865,7 @@ public: return done; } - string getType() override + std::string getType() override { return "TierPromoteOp"; } @@ -2893,7 +2875,7 @@ class TierFlushOp : public TestOp { public: librados::AioCompletion *completion; librados::ObjectReadOperation op; - string oid; + std::string oid; std::shared_ptr<int> in_use; int snap; ObjectDesc src_value; @@ -2901,7 +2883,7 @@ public: TierFlushOp(int n, RadosTestContext *context, - const string &oid, + const std::string &oid, TestOpStat *stat) : TestOp(n, context, stat), completion(NULL), @@ -2923,7 +2905,7 @@ public: snap = -1; } - cout << num << ": tier_flush oid " << oid << " snap " << snap << std::endl; + std::cout << num << ": tier_flush oid " << oid << " snap " << snap << std::endl; if (snap >= 0) { context->io_ctx.snap_set_read(context->snaps[snap]); @@ -2931,8 +2913,8 @@ public: context->find_object(oid, &src_value, snap); - pair<TestOp*, TestOp::CallbackInfo*> *cb_arg = - new pair<TestOp*, TestOp::CallbackInfo*>(this, + std::pair<TestOp*, TestOp::CallbackInfo*> *cb_arg = + new std::pair<TestOp*, TestOp::CallbackInfo*>(this, new TestOp::CallbackInfo(0)); completion = context->rados.aio_create_completion((void *) cb_arg, &write_callback); @@ -2956,7 +2938,7 @@ public: ceph_assert(completion->is_complete()); int r = completion->get_return_value(); - cout << num << ": got " << cpp_strerror(r) << std::endl; + std::cout << num << ": got " << cpp_strerror(r) << std::endl; if (r == 0) { // sucess context->update_object_tier_flushed(oid, snap); @@ -2967,15 +2949,15 @@ public: } else if (r == -ENOENT) { // could fail if object is removed if (src_value.deleted()) { - cout << num << ": got expected ENOENT (src dne)" << std::endl; + std::cout << num << ": got expected ENOENT (src dne)" << std::endl; } else { - cerr << num << ": got unexpected ENOENT" << std::endl; + std::cerr << num << ": got unexpected ENOENT" << std::endl; ceph_abort(); } } else { if (r != -ENOENT && src_value.deleted()) { - cerr << num << ": src dne, but r is not ENOENT" << std::endl; - } + std::cerr << num << ": src dne, but r is not ENOENT" << std::endl; + } ceph_abort_msg("shouldn't happen"); } context->oid_in_use.erase(oid); @@ -2990,7 +2972,7 @@ public: return done; } - string getType() override + std::string getType() override { return "TierFlushOp"; } @@ -3000,14 +2982,14 @@ class TierEvictOp : public TestOp { public: librados::AioCompletion *completion; librados::ObjectReadOperation op; - string oid; + std::string oid; std::shared_ptr<int> in_use; int snap; ObjectDesc src_value; TierEvictOp(int n, RadosTestContext *context, - const string &oid, + const std::string &oid, TestOpStat *stat) : TestOp(n, context, stat), completion(NULL), @@ -3029,7 +3011,7 @@ public: snap = -1; } - cout << num << ": tier_evict oid " << oid << " snap " << snap << std::endl; + std::cout << num << ": tier_evict oid " << oid << " snap " << snap << std::endl; if (snap >= 0) { context->io_ctx.snap_set_read(context->snaps[snap]); @@ -3037,8 +3019,8 @@ public: context->find_object(oid, &src_value, snap); - pair<TestOp*, TestOp::CallbackInfo*> *cb_arg = - new pair<TestOp*, TestOp::CallbackInfo*>(this, + std::pair<TestOp*, TestOp::CallbackInfo*> *cb_arg = + new std::pair<TestOp*, TestOp::CallbackInfo*>(this, new TestOp::CallbackInfo(0)); completion = context->rados.aio_create_completion((void *) cb_arg, &write_callback); @@ -3062,7 +3044,7 @@ public: ceph_assert(completion->is_complete()); int r = completion->get_return_value(); - cout << num << ": got " << cpp_strerror(r) << std::endl; + std::cout << num << ": got " << cpp_strerror(r) << std::endl; if (r == 0) { // ok } else if (r == -EINVAL) { @@ -3072,15 +3054,15 @@ public: } else if (r == -ENOENT) { // could fail if object is removed if (src_value.deleted()) { - cout << num << ": got expected ENOENT (src dne)" << std::endl; + std::cout << num << ": got expected ENOENT (src dne)" << std::endl; } else { - cerr << num << ": got unexpected ENOENT" << std::endl; + std::cerr << num << ": got unexpected ENOENT" << std::endl; ceph_abort(); } } else { if (r != -ENOENT && src_value.deleted()) { - cerr << num << ": src dne, but r is not ENOENT" << std::endl; - } + std::cerr << num << ": src dne, but r is not ENOENT" << std::endl; + } ceph_abort_msg("shouldn't happen"); } context->oid_in_use.erase(oid); @@ -3094,7 +3076,7 @@ public: return done; } - string getType() override + std::string getType() override { return "TierEvictOp"; } @@ -3118,8 +3100,8 @@ public: void _begin() override { - pair<TestOp*, TestOp::CallbackInfo*> *cb_arg = - new pair<TestOp*, TestOp::CallbackInfo*>(this, + std::pair<TestOp*, TestOp::CallbackInfo*> *cb_arg = + new std::pair<TestOp*, TestOp::CallbackInfo*>(this, new TestOp::CallbackInfo(0)); comp1 = context->rados.aio_create_completion((void*) cb_arg, &write_callback); @@ -3131,17 +3113,16 @@ public: std::lock_guard l{context->state_lock}; if (!comp2) { if (ls.empty()) { - cerr << num << ": no hitsets" << std::endl; + std::cerr << num << ": no hitsets" << std::endl; done = true; } else { - cerr << num << ": hitsets are " << ls << std::endl; + std::cerr << num << ": hitsets are " << ls << std::endl; int r = rand() % ls.size(); - std::list<pair<time_t,time_t> >::iterator p = ls.begin(); + auto p = ls.begin(); while (r--) ++p; - pair<TestOp*, TestOp::CallbackInfo*> *cb_arg = - new pair<TestOp*, TestOp::CallbackInfo*>(this, - new TestOp::CallbackInfo(0)); + auto cb_arg = new std::pair<TestOp*, TestOp::CallbackInfo*>( + this, new TestOp::CallbackInfo(0)); comp2 = context->rados.aio_create_completion((void*) cb_arg, &write_callback); r = context->io_ctx.hit_set_get(hash, comp2, p->second, &bl); ceph_assert(r == 0); @@ -3152,9 +3133,9 @@ public: HitSet hitset; auto p = bl.cbegin(); decode(hitset, p); - cout << num << ": got hitset of type " << hitset.get_type_name() - << " size " << bl.length() - << std::endl; + std::cout << num << ": got hitset of type " << hitset.get_type_name() + << " size " << bl.length() + << std::endl; } else { // FIXME: we could verify that we did in fact race with a trim... ceph_assert(r == -ENOENT); @@ -3169,7 +3150,7 @@ public: return done; } - string getType() override { + std::string getType() override { return "HitSetListOp"; } }; @@ -3178,11 +3159,11 @@ class UndirtyOp : public TestOp { public: librados::AioCompletion *completion; librados::ObjectWriteOperation op; - string oid; + std::string oid; UndirtyOp(int n, RadosTestContext *context, - const string &oid, + const std::string &oid, TestOpStat *stat = 0) : TestOp(n, context, stat), completion(NULL), @@ -3192,8 +3173,8 @@ public: void _begin() override { context->state_lock.lock(); - pair<TestOp*, TestOp::CallbackInfo*> *cb_arg = - new pair<TestOp*, TestOp::CallbackInfo*>(this, + std::pair<TestOp*, TestOp::CallbackInfo*> *cb_arg = + new std::pair<TestOp*, TestOp::CallbackInfo*>(this, new TestOp::CallbackInfo(0)); completion = context->rados.aio_create_completion((void *) cb_arg, &write_callback); @@ -3226,7 +3207,7 @@ public: return done; } - string getType() override + std::string getType() override { return "UndirtyOp"; } @@ -3236,7 +3217,7 @@ class IsDirtyOp : public TestOp { public: librados::AioCompletion *completion; librados::ObjectReadOperation op; - string oid; + std::string oid; bool dirty; ObjectDesc old_value; int snap = 0; @@ -3244,7 +3225,7 @@ public: IsDirtyOp(int n, RadosTestContext *context, - const string &oid, + const std::string &oid, TestOpStat *stat = 0) : TestOp(n, context, stat), completion(NULL), @@ -3265,8 +3246,8 @@ public: std::cout << num << ": is_dirty oid " << oid << " snap " << snap << std::endl; - pair<TestOp*, TestOp::CallbackInfo*> *cb_arg = - new pair<TestOp*, TestOp::CallbackInfo*>(this, + std::pair<TestOp*, TestOp::CallbackInfo*> *cb_arg = + new std::pair<TestOp*, TestOp::CallbackInfo*>(this, new TestOp::CallbackInfo(0)); completion = context->rados.aio_create_completion((void *) cb_arg, &write_callback); @@ -3301,11 +3282,11 @@ public: int r = completion->get_return_value(); if (r == 0) { - cout << num << ": " << (dirty ? "dirty" : "clean") << std::endl; + std::cout << num << ": " << (dirty ? "dirty" : "clean") << std::endl; ceph_assert(!old_value.deleted()); ceph_assert(dirty == old_value.dirty); } else { - cout << num << ": got " << r << std::endl; + std::cout << num << ": got " << r << std::endl; ceph_assert(r == -ENOENT); ceph_assert(old_value.deleted()); } @@ -3318,7 +3299,7 @@ public: return done; } - string getType() override + std::string getType() override { return "IsDirtyOp"; } @@ -3330,7 +3311,7 @@ class CacheFlushOp : public TestOp { public: librados::AioCompletion *completion; librados::ObjectReadOperation op; - string oid; + std::string oid; bool blocking; int snap; bool can_fail; @@ -3338,7 +3319,7 @@ public: CacheFlushOp(int n, RadosTestContext *context, - const string &oid, + const std::string &oid, TestOpStat *stat, bool b) : TestOp(n, context, stat), @@ -3365,15 +3346,15 @@ public: // FIXME: we could fail if we've ever removed a snap due to // the async snap trimming. can_fail = true; - cout << num << ": " << (blocking ? "cache_flush" : "cache_try_flush") + std::cout << num << ": " << (blocking ? "cache_flush" : "cache_try_flush") << " oid " << oid << " snap " << snap << std::endl; if (snap >= 0) { context->io_ctx.snap_set_read(context->snaps[snap]); } - pair<TestOp*, TestOp::CallbackInfo*> *cb_arg = - new pair<TestOp*, TestOp::CallbackInfo*>(this, + std::pair<TestOp*, TestOp::CallbackInfo*> *cb_arg = + new std::pair<TestOp*, TestOp::CallbackInfo*>(this, new TestOp::CallbackInfo(0)); completion = context->rados.aio_create_completion((void *) cb_arg, &write_callback); @@ -3405,7 +3386,7 @@ public: context->oid_flushing.erase(oid); context->oid_not_flushing.insert(oid); int r = completion->get_return_value(); - cout << num << ": got " << cpp_strerror(r) << std::endl; + std::cout << num << ": got " << cpp_strerror(r) << std::endl; if (r == 0) { context->update_object_version(oid, 0, snap); } else if (r == -EBUSY) { @@ -3426,7 +3407,7 @@ public: return done; } - string getType() override + std::string getType() override { return "CacheFlushOp"; } @@ -3436,12 +3417,12 @@ class CacheEvictOp : public TestOp { public: librados::AioCompletion *completion; librados::ObjectReadOperation op; - string oid; + std::string oid; std::shared_ptr<int> in_use; CacheEvictOp(int n, RadosTestContext *context, - const string &oid, + const std::string &oid, TestOpStat *stat) : TestOp(n, context, stat), completion(NULL), @@ -3459,14 +3440,14 @@ public: } else { snap = -1; } - cout << num << ": cache_evict oid " << oid << " snap " << snap << std::endl; + std::cout << num << ": cache_evict oid " << oid << " snap " << snap << std::endl; if (snap >= 0) { context->io_ctx.snap_set_read(context->snaps[snap]); } - pair<TestOp*, TestOp::CallbackInfo*> *cb_arg = - new pair<TestOp*, TestOp::CallbackInfo*>(this, + std::pair<TestOp*, TestOp::CallbackInfo*> *cb_arg = + new std::pair<TestOp*, TestOp::CallbackInfo*>(this, new TestOp::CallbackInfo(0)); completion = context->rados.aio_create_completion((void *) cb_arg, &write_callback); @@ -3490,7 +3471,7 @@ public: ceph_assert(completion->is_complete()); int r = completion->get_return_value(); - cout << num << ": got " << cpp_strerror(r) << std::endl; + std::cout << num << ": got " << cpp_strerror(r) << std::endl; if (r == 0) { // yay! } else if (r == -EBUSY) { @@ -3511,7 +3492,7 @@ public: return done; } - string getType() override + std::string getType() override { return "CacheEvictOp"; } diff --git a/src/test/osd/TestOpStat.cc b/src/test/osd/TestOpStat.cc index 48b87b885b0..eb13e1d55e0 100644 --- a/src/test/osd/TestOpStat.cc +++ b/src/test/osd/TestOpStat.cc @@ -17,10 +17,10 @@ void TestOpStat::end(TestOp *in) { stats[in->getType()].end(in); } -void TestOpStat::TypeStatus::export_latencies(map<double,uint64_t> &in) const +void TestOpStat::TypeStatus::export_latencies(std::map<double,uint64_t> &in) const { - map<double,uint64_t>::iterator i = in.begin(); - multiset<uint64_t>::iterator j = latencies.begin(); + auto i = in.begin(); + auto j = latencies.begin(); int count = 0; while (j != latencies.end() && i != in.end()) { count++; @@ -31,22 +31,22 @@ void TestOpStat::TypeStatus::export_latencies(map<double,uint64_t> &in) const ++j; } } - + std::ostream & operator<<(std::ostream &out, const TestOpStat &rhs) { std::lock_guard l{rhs.stat_lock}; for (auto i = rhs.stats.begin(); i != rhs.stats.end(); ++i) { - map<double,uint64_t> latency; + std::map<double,uint64_t> latency; latency[10] = 0; latency[50] = 0; latency[90] = 0; latency[99] = 0; i->second.export_latencies(latency); - + out << i->first << " latency: " << std::endl; - for (map<double,uint64_t>::iterator j = latency.begin(); + for (auto j = latency.begin(); j != latency.end(); ++j) { if (j->second == 0) break; |