Skip to content

Commit c553e62

Browse files
committed
osdc/Filer: un-inline several methods to reduce header dependencies
This allows forward-declaring class Objecter in the header and eliminates two #include lines. Signed-off-by: Max Kellermann <[email protected]>
1 parent 7da2ef3 commit c553e62

File tree

2 files changed

+120
-61
lines changed

2 files changed

+120
-61
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,

0 commit comments

Comments
 (0)