Fix some bugs when testing opensds ansible
[stor4nfv.git] / src / ceph / src / test / bench_log.cc
1 // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2 // vim: ts=8 sw=2 smarttab
3
4 #include "include/types.h"
5 #include "common/Thread.h"
6 #include "common/debug.h"
7 #include "common/Clock.h"
8 #include "common/config.h"
9 #include "common/ceph_argparse.h"
10 #include "global/global_init.h"
11
12 #define dout_context g_ceph_context
13
14 struct T : public Thread {
15   int num;
16   set<int> myset;
17   map<int,string> mymap;
18   explicit T(int n) : num(n) {
19     myset.insert(123);
20     myset.insert(456);
21     mymap[1] = "foo";
22     mymap[10] = "bar";
23   }
24
25   void *entry() override {
26     while (num-- > 0)
27       generic_dout(0) << "this is a typical log line.  set "
28                       << myset << " and map " << mymap << dendl;
29     return 0;
30   }
31 };
32
33 int main(int argc, const char **argv)
34 {
35   int threads = atoi(argv[1]);
36   int num = atoi(argv[2]);
37
38   cout << threads << " threads, " << num << " lines per thread" << std::endl;
39
40   vector<const char*> args;
41   argv_to_vec(argc, argv, args);
42   env_to_vec(args);
43
44   auto cct = global_init(NULL, args, CEPH_ENTITY_TYPE_OSD,
45                          CODE_ENVIRONMENT_UTILITY, 0);
46
47   utime_t start = ceph_clock_now();
48
49   list<T*> ls;
50   for (int i=0; i<threads; i++) {
51     T *t = new T(num);
52     t->create("t");
53     ls.push_back(t);
54   }
55
56   for (int i=0; i<threads; i++) {
57     T *t = ls.front();
58     ls.pop_front();
59     t->join();
60     delete t;
61   }
62
63   utime_t t = ceph_clock_now();
64   t -= start;
65   cout << " flushing.. " << t << " so far ..." << std::endl;
66
67   g_ceph_context->_log->flush();
68
69   utime_t end = ceph_clock_now();
70   utime_t dur = end - start;
71
72   cout << dur << std::endl;
73   return 0;
74 }