]> git.proxmox.com Git - ceph.git/blame - ceph/src/test/osd/TestMClockClientQueue.cc
update sources to ceph Nautilus 14.2.1
[ceph.git] / ceph / src / test / osd / TestMClockClientQueue.cc
CommitLineData
224ce89b
WB
1// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2
3#include <iostream>
4
5#include "gtest/gtest.h"
6#include "global/global_init.h"
7#include "common/common_init.h"
8
9#include "osd/mClockClientQueue.h"
10
11
12int main(int argc, char **argv) {
13 std::vector<const char*> args(argv, argv+argc);
14 auto cct = global_init(nullptr, args, CEPH_ENTITY_TYPE_OSD,
15 CODE_ENVIRONMENT_UTILITY,
16 CINIT_FLAG_NO_DEFAULT_CONFIG_FILE);
17 common_init_finish(g_ceph_context);
18
19 ::testing::InitGoogleTest(&argc, argv);
20 return RUN_ALL_TESTS();
21}
22
23
24class MClockClientQueueTest : public testing::Test {
25public:
26 mClockClientQueue q;
27
11fdf7f2
TL
28 uint64_t client1;
29 uint64_t client2;
30 uint64_t client3;
224ce89b
WB
31
32 MClockClientQueueTest() :
33 q(g_ceph_context),
11fdf7f2
TL
34 client1(1001),
35 client2(9999),
36 client3(100000001)
224ce89b
WB
37 {}
38
39#if 0 // more work needed here
11fdf7f2
TL
40 Request create_client_op(epoch_t e, uint64_t owner) {
41 return Request(spg_t(), OpQueueItem(OpRequestRef(), e));
224ce89b
WB
42 }
43#endif
44
11fdf7f2
TL
45 Request create_snaptrim(epoch_t e, uint64_t owner) {
46 return Request(OpQueueItem(unique_ptr<OpQueueItem::OpQueueable>(new PGSnapTrim(spg_t(), e)),
224ce89b
WB
47 12, 12,
48 utime_t(), owner, e));
49 }
50
11fdf7f2
TL
51 Request create_scrub(epoch_t e, uint64_t owner) {
52 return Request(OpQueueItem(unique_ptr<OpQueueItem::OpQueueable>(new PGScrub(spg_t(), e)),
224ce89b
WB
53 12, 12,
54 utime_t(), owner, e));
55 }
56
11fdf7f2
TL
57 Request create_recovery(epoch_t e, uint64_t owner) {
58 return Request(OpQueueItem(unique_ptr<OpQueueItem::OpQueueable>(new PGRecovery(spg_t(), e, 64)),
224ce89b
WB
59 12, 12,
60 utime_t(), owner, e));
61 }
62};
63
64
65TEST_F(MClockClientQueueTest, TestSize) {
66 ASSERT_TRUE(q.empty());
11fdf7f2 67 ASSERT_EQ(0u, q.get_size_slow());
224ce89b 68
11fdf7f2 69 q.enqueue(client1, 12, 1u, create_snaptrim(100, client1));
224ce89b 70 q.enqueue_strict(client2, 12, create_snaptrim(101, client2));
11fdf7f2 71 q.enqueue(client2, 12, 1u, create_snaptrim(102, client2));
224ce89b 72 q.enqueue_strict(client3, 12, create_snaptrim(103, client3));
11fdf7f2 73 q.enqueue(client1, 12, 1u, create_snaptrim(104, client1));
224ce89b
WB
74
75 ASSERT_FALSE(q.empty());
11fdf7f2 76 ASSERT_EQ(5u, q.get_size_slow());
224ce89b
WB
77
78 std::list<Request> reqs;
79
80 reqs.push_back(q.dequeue());
81 reqs.push_back(q.dequeue());
82 reqs.push_back(q.dequeue());
83
84 ASSERT_FALSE(q.empty());
11fdf7f2 85 ASSERT_EQ(2u, q.get_size_slow());
224ce89b 86
11fdf7f2 87 q.enqueue_front(client2, 12, 1u, std::move(reqs.back()));
224ce89b
WB
88 reqs.pop_back();
89
11fdf7f2 90 q.enqueue_strict_front(client3, 12, std::move(reqs.back()));
224ce89b
WB
91 reqs.pop_back();
92
11fdf7f2 93 q.enqueue_strict_front(client2, 12, std::move(reqs.back()));
224ce89b
WB
94 reqs.pop_back();
95
96 ASSERT_FALSE(q.empty());
11fdf7f2 97 ASSERT_EQ(5u, q.get_size_slow());
224ce89b
WB
98
99 for (int i = 0; i < 5; ++i) {
100 (void) q.dequeue();
101 }
102
103 ASSERT_TRUE(q.empty());
11fdf7f2 104 ASSERT_EQ(0u, q.get_size_slow());
224ce89b
WB
105}
106
107
108TEST_F(MClockClientQueueTest, TestEnqueue) {
11fdf7f2
TL
109 q.enqueue(client1, 12, 1u, create_snaptrim(100, client1));
110 q.enqueue(client2, 12, 1u, create_snaptrim(101, client2));
111 q.enqueue(client2, 12, 1u, create_snaptrim(102, client2));
112 q.enqueue(client3, 12, 1u, create_snaptrim(103, client3));
113 q.enqueue(client1, 12, 1u, create_snaptrim(104, client1));
224ce89b
WB
114
115 Request r = q.dequeue();
11fdf7f2 116 ASSERT_EQ(100u, r.get_map_epoch());
224ce89b
WB
117
118 r = q.dequeue();
11fdf7f2 119 ASSERT_EQ(101u, r.get_map_epoch());
224ce89b
WB
120
121 r = q.dequeue();
11fdf7f2 122 ASSERT_EQ(103u, r.get_map_epoch());
224ce89b
WB
123
124 r = q.dequeue();
11fdf7f2
TL
125 ASSERT_TRUE(r.get_map_epoch() == 102u ||
126 r.get_map_epoch() == 104u);
224ce89b
WB
127
128 r = q.dequeue();
11fdf7f2
TL
129 ASSERT_TRUE(r.get_map_epoch() == 102u ||
130 r.get_map_epoch() == 104u);
224ce89b
WB
131}
132
133
134TEST_F(MClockClientQueueTest, TestEnqueueStrict) {
135 q.enqueue_strict(client1, 12, create_snaptrim(100, client1));
136 q.enqueue_strict(client2, 13, create_snaptrim(101, client2));
137 q.enqueue_strict(client2, 16, create_snaptrim(102, client2));
138 q.enqueue_strict(client3, 14, create_snaptrim(103, client3));
139 q.enqueue_strict(client1, 15, create_snaptrim(104, client1));
140
141 Request r = q.dequeue();
11fdf7f2 142 ASSERT_EQ(102u, r.get_map_epoch());
224ce89b
WB
143
144 r = q.dequeue();
11fdf7f2 145 ASSERT_EQ(104u, r.get_map_epoch());
224ce89b
WB
146
147 r = q.dequeue();
11fdf7f2 148 ASSERT_EQ(103u, r.get_map_epoch());
224ce89b
WB
149
150 r = q.dequeue();
11fdf7f2 151 ASSERT_EQ(101u, r.get_map_epoch());
224ce89b
WB
152
153 r = q.dequeue();
11fdf7f2 154 ASSERT_EQ(100u, r.get_map_epoch());
224ce89b
WB
155}
156
157
158TEST_F(MClockClientQueueTest, TestRemoveByClass) {
11fdf7f2 159 q.enqueue(client1, 12, 1u, create_snaptrim(100, client1));
224ce89b 160 q.enqueue_strict(client2, 12, create_snaptrim(101, client2));
11fdf7f2 161 q.enqueue(client2, 12, 1u, create_snaptrim(102, client2));
224ce89b 162 q.enqueue_strict(client3, 12, create_snaptrim(103, client3));
11fdf7f2 163 q.enqueue(client1, 12, 1u, create_snaptrim(104, client1));
224ce89b
WB
164
165 std::list<Request> filtered_out;
166 q.remove_by_class(client2, &filtered_out);
167
168 ASSERT_EQ(2u, filtered_out.size());
169 while (!filtered_out.empty()) {
11fdf7f2 170 auto e = filtered_out.front().get_map_epoch() ;
224ce89b
WB
171 ASSERT_TRUE(e == 101 || e == 102);
172 filtered_out.pop_front();
173 }
174
11fdf7f2 175 ASSERT_EQ(3u, q.get_size_slow());
224ce89b 176 Request r = q.dequeue();
11fdf7f2 177 ASSERT_EQ(103u, r.get_map_epoch());
224ce89b
WB
178
179 r = q.dequeue();
11fdf7f2 180 ASSERT_EQ(100u, r.get_map_epoch());
224ce89b
WB
181
182 r = q.dequeue();
11fdf7f2 183 ASSERT_EQ(104u, r.get_map_epoch());
224ce89b 184}