Skip to content

Commit d2a5501

Browse files
Merge pull request ceph#65391 from MaxKellermann/osdc_uninline
osdc: uninline methods to reduce header dependencies and compile times Reviewed-by: Greg Farnum <[email protected]>
2 parents 7565ab2 + 08c793f commit d2a5501

File tree

4 files changed

+145
-82
lines changed

4 files changed

+145
-82
lines changed

src/osdc/Filer.cc

Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313
*/
1414

1515
#include "Filer.h"
16+
#include "Objecter.h"
17+
#include "Striper.h"
1618

1719
#include <algorithm>
1820
#include "osd/OSDMap.h"
@@ -37,6 +39,116 @@ using std::hex;
3739
using std::dec;
3840
using std::vector;
3941

42+
Filer::Filer(Objecter *o, Finisher *f) : cct(o->cct), objecter(o), finisher(f) {}
43+
44+
bool Filer::is_active() {
45+
return objecter->is_active(); // || (oc && oc->is_active());
46+
}
47+
48+
void Filer::read(inodeno_t ino,
49+
const file_layout_t *layout,
50+
snapid_t snap,
51+
uint64_t offset,
52+
uint64_t len,
53+
ceph::buffer::list *bl, // ptr to data
54+
int flags,
55+
Context *onfinish,
56+
int op_flags) {
57+
ceph_assert(snap); // (until there is a non-NOSNAP write)
58+
std::vector<ObjectExtent> extents;
59+
Striper::file_to_extents(cct, ino, layout, offset, len, 0, extents);
60+
objecter->sg_read(extents, snap, bl, flags, onfinish, op_flags);
61+
}
62+
63+
void Filer::read_trunc(inodeno_t ino,
64+
const file_layout_t *layout,
65+
snapid_t snap,
66+
uint64_t offset,
67+
uint64_t len,
68+
ceph::buffer::list *bl, // ptr to data
69+
int flags,
70+
uint64_t truncate_size,
71+
__u32 truncate_seq,
72+
Context *onfinish,
73+
int op_flags) {
74+
ceph_assert(snap); // (until there is a non-NOSNAP write)
75+
std::vector<ObjectExtent> extents;
76+
Striper::file_to_extents(cct, ino, layout, offset, len, truncate_size,
77+
extents);
78+
objecter->sg_read_trunc(extents, snap, bl, flags,
79+
truncate_size, truncate_seq, onfinish, op_flags);
80+
}
81+
82+
void Filer::write(inodeno_t ino,
83+
const file_layout_t *layout,
84+
const SnapContext& snapc,
85+
uint64_t offset,
86+
uint64_t len,
87+
ceph::buffer::list& bl,
88+
ceph::real_time mtime,
89+
int flags,
90+
Context *oncommit,
91+
int op_flags) {
92+
std::vector<ObjectExtent> extents;
93+
Striper::file_to_extents(cct, ino, layout, offset, len, 0, extents);
94+
objecter->sg_write(extents, snapc, bl, mtime, flags, oncommit, op_flags);
95+
}
96+
97+
void Filer::write_trunc(inodeno_t ino,
98+
const file_layout_t *layout,
99+
const SnapContext& snapc,
100+
uint64_t offset,
101+
uint64_t len,
102+
ceph::buffer::list& bl,
103+
ceph::real_time mtime,
104+
int flags,
105+
uint64_t truncate_size,
106+
__u32 truncate_seq,
107+
Context *oncommit,
108+
int op_flags) {
109+
std::vector<ObjectExtent> extents;
110+
Striper::file_to_extents(cct, ino, layout, offset, len, truncate_size,
111+
extents);
112+
objecter->sg_write_trunc(extents, snapc, bl, mtime, flags,
113+
truncate_size, truncate_seq, oncommit, op_flags);
114+
}
115+
116+
void Filer::zero(inodeno_t ino,
117+
const file_layout_t *layout,
118+
const SnapContext& snapc,
119+
uint64_t offset,
120+
uint64_t len,
121+
ceph::real_time mtime,
122+
int flags,
123+
bool keep_first,
124+
Context *oncommit) {
125+
std::vector<ObjectExtent> extents;
126+
Striper::file_to_extents(cct, ino, layout, offset, len, 0, extents);
127+
if (extents.size() == 1) {
128+
if (extents[0].offset == 0 && extents[0].length == layout->object_size
129+
&& (!keep_first || extents[0].objectno != 0))
130+
objecter->remove(extents[0].oid, extents[0].oloc,
131+
snapc, mtime, flags, oncommit);
132+
else
133+
objecter->zero(extents[0].oid, extents[0].oloc, extents[0].offset,
134+
extents[0].length, snapc, mtime, flags, oncommit);
135+
} else {
136+
C_GatherBuilder gcom(cct, oncommit);
137+
for (auto p = extents.begin(); p != extents.end(); ++p) {
138+
if (p->offset == 0 && p->length == layout->object_size &&
139+
(!keep_first || p->objectno != 0))
140+
objecter->remove(p->oid, p->oloc,
141+
snapc, mtime, flags,
142+
oncommit ? gcom.new_sub():0);
143+
else
144+
objecter->zero(p->oid, p->oloc, p->offset, p->length,
145+
snapc, mtime, flags,
146+
oncommit ? gcom.new_sub():0);
147+
}
148+
gcom.activate();
149+
}
150+
}
151+
40152
class Filer::C_Probe : public Context {
41153
public:
42154
Filer *filer;

src/osdc/Filer.h

Lines changed: 8 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -33,16 +33,14 @@
3333

3434
#include "common/ceph_time.h"
3535

36-
#include "Objecter.h"
37-
#include "Striper.h"
38-
3936
#include <map>
4037
#include <mutex>
4138
#include <set>
4239
#include <vector>
4340

4441
class Context;
4542
class Messenger;
43+
class Objecter;
4644
class Finisher;
4745
struct SnapContext;
4846
class utime_t;
@@ -112,13 +110,10 @@ class Filer {
112110
Filer(const Filer& other);
113111
const Filer operator=(const Filer& other);
114112

115-
Filer(Objecter *o, Finisher *f) : cct(o->cct), objecter(o), finisher(f) {}
113+
Filer(Objecter *o, Finisher *f);
116114
~Filer() {}
117115

118-
bool is_active() {
119-
return objecter->is_active(); // || (oc && oc->is_active());
120-
}
121-
116+
bool is_active();
122117

123118
/*** async file interface. scatter/gather as needed. ***/
124119

@@ -130,12 +125,7 @@ class Filer {
130125
ceph::buffer::list *bl, // ptr to data
131126
int flags,
132127
Context *onfinish,
133-
int op_flags = 0) {
134-
ceph_assert(snap); // (until there is a non-NOSNAP write)
135-
std::vector<ObjectExtent> extents;
136-
Striper::file_to_extents(cct, ino, layout, offset, len, 0, extents);
137-
objecter->sg_read(extents, snap, bl, flags, onfinish, op_flags);
138-
}
128+
int op_flags = 0);
139129

140130
void read_trunc(inodeno_t ino,
141131
const file_layout_t *layout,
@@ -147,14 +137,7 @@ class Filer {
147137
uint64_t truncate_size,
148138
__u32 truncate_seq,
149139
Context *onfinish,
150-
int op_flags = 0) {
151-
ceph_assert(snap); // (until there is a non-NOSNAP write)
152-
std::vector<ObjectExtent> extents;
153-
Striper::file_to_extents(cct, ino, layout, offset, len, truncate_size,
154-
extents);
155-
objecter->sg_read_trunc(extents, snap, bl, flags,
156-
truncate_size, truncate_seq, onfinish, op_flags);
157-
}
140+
int op_flags = 0);
158141

159142
void write(inodeno_t ino,
160143
const file_layout_t *layout,
@@ -165,11 +148,7 @@ class Filer {
165148
ceph::real_time mtime,
166149
int flags,
167150
Context *oncommit,
168-
int op_flags = 0) {
169-
std::vector<ObjectExtent> extents;
170-
Striper::file_to_extents(cct, ino, layout, offset, len, 0, extents);
171-
objecter->sg_write(extents, snapc, bl, mtime, flags, oncommit, op_flags);
172-
}
151+
int op_flags = 0);
173152

174153
void write_trunc(inodeno_t ino,
175154
const file_layout_t *layout,
@@ -182,13 +161,7 @@ class Filer {
182161
uint64_t truncate_size,
183162
__u32 truncate_seq,
184163
Context *oncommit,
185-
int op_flags = 0) {
186-
std::vector<ObjectExtent> extents;
187-
Striper::file_to_extents(cct, ino, layout, offset, len, truncate_size,
188-
extents);
189-
objecter->sg_write_trunc(extents, snapc, bl, mtime, flags,
190-
truncate_size, truncate_seq, oncommit, op_flags);
191-
}
164+
int op_flags = 0);
192165

193166
void truncate(inodeno_t ino,
194167
const file_layout_t *layout,
@@ -209,33 +182,7 @@ class Filer {
209182
ceph::real_time mtime,
210183
int flags,
211184
bool keep_first,
212-
Context *oncommit) {
213-
std::vector<ObjectExtent> extents;
214-
Striper::file_to_extents(cct, ino, layout, offset, len, 0, extents);
215-
if (extents.size() == 1) {
216-
if (extents[0].offset == 0 && extents[0].length == layout->object_size
217-
&& (!keep_first || extents[0].objectno != 0))
218-
objecter->remove(extents[0].oid, extents[0].oloc,
219-
snapc, mtime, flags, oncommit);
220-
else
221-
objecter->zero(extents[0].oid, extents[0].oloc, extents[0].offset,
222-
extents[0].length, snapc, mtime, flags, oncommit);
223-
} else {
224-
C_GatherBuilder gcom(cct, oncommit);
225-
for (auto p = extents.begin(); p != extents.end(); ++p) {
226-
if (p->offset == 0 && p->length == layout->object_size &&
227-
(!keep_first || p->objectno != 0))
228-
objecter->remove(p->oid, p->oloc,
229-
snapc, mtime, flags,
230-
oncommit ? gcom.new_sub():0);
231-
else
232-
objecter->zero(p->oid, p->oloc, p->offset, p->length,
233-
snapc, mtime, flags,
234-
oncommit ? gcom.new_sub():0);
235-
}
236-
gcom.activate();
237-
}
238-
}
185+
Context *oncommit);
239186

240187
void zero(inodeno_t ino,
241188
const file_layout_t *layout,

src/osdc/Journaler.cc

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
*/
1414

1515
#include "osdc/Journaler.h"
16+
#include "osdc/Objecter.h"
1617
#include "common/perf_counters.h"
1718
#include "common/dout.h"
1819
#include "include/Context.h"
@@ -39,6 +40,28 @@ class Journaler::C_DelayFlush : public Context {
3940
}
4041
};
4142

43+
Journaler::Journaler(const std::string &name_, inodeno_t ino_, int64_t pool,
44+
const char *mag, Objecter *obj, PerfCounters *l, int lkey, Finisher *f) :
45+
last_committed(mag),
46+
cct(obj->cct), lock(ceph::make_mutex("Journaler::" + name_)), name(name_), finisher(f), last_written(mag),
47+
ino(ino_), pg_pool(pool), readonly(true),
48+
stream_format(-1), journal_stream(-1),
49+
magic(mag),
50+
objecter(obj), filer(objecter, f), logger(l), logger_key_lat(lkey),
51+
delay_flush_event(0),
52+
state(STATE_UNDEF), error(0),
53+
prezeroing_pos(0), prezero_pos(0), write_pos(0), flush_pos(0),
54+
safe_pos(0), next_safe_pos(0),
55+
write_buf_throttle(cct, "write_buf_throttle", UINT_MAX - (UINT_MAX >> 3)),
56+
waiting_for_zero_pos(0),
57+
read_pos(0), requested_pos(0), received_pos(0),
58+
fetch_len(0), temp_fetch_len(0),
59+
on_readable(0), on_write_error(NULL), called_write_error(false),
60+
expire_pos(0), trimming_pos(0), trimmed_pos(0), readable(false),
61+
write_iohint(0)
62+
{
63+
}
64+
4265
void Journaler::set_readonly()
4366
{
4467
lock_guard l(lock);

src/osdc/Journaler.h

Lines changed: 2 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -60,13 +60,13 @@
6060
#include <list>
6161
#include <map>
6262

63-
#include "Objecter.h"
6463
#include "Filer.h"
6564

6665
#include "common/Throttle.h"
6766
#include "include/common_fwd.h"
6867

6968
class Context;
69+
class Objecter;
7070
class Finisher;
7171
class C_OnFinisher;
7272

@@ -408,26 +408,7 @@ class Journaler {
408408

409409
public:
410410
Journaler(const std::string &name_, inodeno_t ino_, int64_t pool,
411-
const char *mag, Objecter *obj, PerfCounters *l, int lkey, Finisher *f) :
412-
last_committed(mag),
413-
cct(obj->cct), lock(ceph::make_mutex("Journaler::" + name_)), name(name_), finisher(f), last_written(mag),
414-
ino(ino_), pg_pool(pool), readonly(true),
415-
stream_format(-1), journal_stream(-1),
416-
magic(mag),
417-
objecter(obj), filer(objecter, f), logger(l), logger_key_lat(lkey),
418-
delay_flush_event(0),
419-
state(STATE_UNDEF), error(0),
420-
prezeroing_pos(0), prezero_pos(0), write_pos(0), flush_pos(0),
421-
safe_pos(0), next_safe_pos(0),
422-
write_buf_throttle(cct, "write_buf_throttle", UINT_MAX - (UINT_MAX >> 3)),
423-
waiting_for_zero_pos(0),
424-
read_pos(0), requested_pos(0), received_pos(0),
425-
fetch_len(0), temp_fetch_len(0),
426-
on_readable(0), on_write_error(NULL), called_write_error(false),
427-
expire_pos(0), trimming_pos(0), trimmed_pos(0), readable(false),
428-
write_iohint(0)
429-
{
430-
}
411+
const char *mag, Objecter *obj, PerfCounters *l, int lkey, Finisher *f);
431412

432413
/* reset
433414
*

0 commit comments

Comments
 (0)