summaryrefslogtreecommitdiff
path: root/src/test
diff options
context:
space:
mode:
Diffstat (limited to 'src/test')
-rw-r--r--src/test/bufferlist.cc11
-rw-r--r--src/test/erasure-code/ErasureCodeExample.h10
-rw-r--r--src/test/erasure-code/TestErasureCodeExample.cc6
-rw-r--r--src/test/erasure-code/ceph_erasure_code_benchmark.cc11
-rw-r--r--src/test/erasure-code/ceph_erasure_code_benchmark.h22
-rw-r--r--src/test/kv_store_bench.h25
-rw-r--r--src/test/librados_test_stub/NeoradosTestStub.cc4
-rw-r--r--src/test/objectstore/allocator_replay_test.cc104
-rw-r--r--src/test/osd/RadosModel.h731
-rw-r--r--src/test/osd/TestOpStat.cc14
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> &current = 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> &current = 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;