]> git.proxmox.com Git - ceph.git/blame - ceph/src/test/test_workqueue.cc
import quincy beta 17.1.0
[ceph.git] / ceph / src / test / test_workqueue.cc
CommitLineData
7c673cae
FG
1#include "gtest/gtest.h"
2
3#include "common/WorkQueue.h"
4#include "common/ceph_argparse.h"
5
20effc67
TL
6using namespace std;
7
7c673cae
FG
8TEST(WorkQueue, StartStop)
9{
10 ThreadPool tp(g_ceph_context, "foo", "tp_foo", 10, "");
11
12 tp.start();
13 tp.pause();
14 tp.pause_new();
15 tp.unpause();
16 tp.unpause();
17 tp.drain();
18 tp.stop();
19}
20
21TEST(WorkQueue, Resize)
22{
11fdf7f2 23 ThreadPool tp(g_ceph_context, "bar", "tp_bar", 2, "filestore_op_threads");
7c673cae
FG
24
25 tp.start();
26
27 sleep(1);
28 ASSERT_EQ(2, tp.get_num_threads());
29
11fdf7f2
TL
30 g_conf().set_val("filestore op threads", "5");
31 g_conf().apply_changes(&cout);
7c673cae
FG
32 sleep(1);
33 ASSERT_EQ(5, tp.get_num_threads());
34
11fdf7f2
TL
35 g_conf().set_val("filestore op threads", "3");
36 g_conf().apply_changes(&cout);
7c673cae
FG
37 sleep(1);
38 ASSERT_EQ(3, tp.get_num_threads());
39
11fdf7f2
TL
40 g_conf().set_val("filestore op threads", "0");
41 g_conf().apply_changes(&cout);
7c673cae
FG
42 sleep(1);
43 ASSERT_EQ(0, tp.get_num_threads());
44
11fdf7f2
TL
45 g_conf().set_val("filestore op threads", "15");
46 g_conf().apply_changes(&cout);
7c673cae
FG
47 sleep(1);
48 ASSERT_EQ(15, tp.get_num_threads());
49
11fdf7f2
TL
50 g_conf().set_val("filestore op threads", "-1");
51 g_conf().apply_changes(&cout);
7c673cae
FG
52 sleep(1);
53 ASSERT_EQ(15, tp.get_num_threads());
54
55 sleep(1);
56 tp.stop();
57}
20effc67
TL
58
59class twq : public ThreadPool::WorkQueue<int> {
60public:
61 twq(time_t timeout, time_t suicide_timeout, ThreadPool *tp)
62 : ThreadPool::WorkQueue<int>("test_wq", ceph::make_timespan(timeout), ceph::make_timespan(suicide_timeout), tp) {}
63
64 bool _enqueue(int* item) override {
65 return true;
66 }
67 void _dequeue(int* item) override {
68 ceph_abort();
69 }
70 bool _empty() override {
71 return true;
72 }
73 int *_dequeue() override {
74 return nullptr;
75 }
76 void _process(int *osr, ThreadPool::TPHandle &handle) override {
77 }
78 void _process_finish(int *osr) override {
79 }
80 void _clear() override {
81 }
82};
83
84TEST(WorkQueue, change_timeout){
85 ThreadPool tp(g_ceph_context, "bar", "tp_bar", 2, "filestore_op_threads");
86 tp.start();
87 twq wq(2, 20, &tp);
88 // check timeout and suicide
89 ASSERT_EQ(ceph::make_timespan(2), wq.timeout_interval);
90 ASSERT_EQ(ceph::make_timespan(20), wq.suicide_interval);
91
92 // change the timeout and suicide and then check them
93 wq.set_timeout(4);
94 wq.set_suicide_timeout(40);
95 ASSERT_EQ(ceph::make_timespan(4), wq.timeout_interval);
96 ASSERT_EQ(ceph::make_timespan(40), wq.suicide_interval);
97 tp.stop();
98}