librados/librados.cc \
librados/RadosClient.cc \
librados/IoCtxImpl.cc \
- osdc/Objecter.cc
+ osdc/Objecter.cc \
+ osdc/Filer.cc
librados_la_SOURCES = ${librados_SOURCES}
librados_la_CFLAGS = ${CRYPTO_CFLAGS} ${AM_CFLAGS}
librados_la_CXXFLAGS = ${CRYPTO_CXXFLAGS} ${AM_CXXFLAGS}
// FIXME: make the destriper write directly into a buffer so
// that we avoid shuffling pointers and copying zeros around.
bufferlist bl;
- destriper.assemble_result(bl, true);
+ destriper.assemble_result(cct, bl, true);
if (read_buf) {
assert(bl.length() == read_buf_len);
if (m_req->m_ext_map.empty())
m_req->m_ext_map[m_req->m_object_off] = m_req->data().length();
- m_completion->destriper.add_partial_sparse_result(m_req->data(),
+ m_completion->destriper.add_partial_sparse_result(m_cct,
+ m_req->data(),
m_req->m_ext_map, m_req->m_object_off,
m_req->m_buffer_extents);
r = m_req->m_object_len;
// StripedReadResult
-void Filer::StripedReadResult::add_partial_result(bufferlist& bl,
+void Filer::StripedReadResult::add_partial_result(CephContext *cct,
+ bufferlist& bl,
const vector<pair<uint64_t,uint64_t> >& buffer_extents)
{
+ ldout(cct, 10) << "add_partial_result(" << this << ") " << bl.length() << " to " << buffer_extents << dendl;
for (vector<pair<uint64_t,uint64_t> >::const_iterator p = buffer_extents.begin();
p != buffer_extents.end();
++p) {
}
}
-void Filer::add_partial_sparse_result(bufferlist& bl, const map<uint64_t, uint64_t>& bl_map,
- uint64_t bl_off,
- const vector<pair<uint64_t,uint64_t> >& buffer_extents)
+void Filer::StripedReadResult::add_partial_sparse_result(CephContext *cct,
+ bufferlist& bl, const map<uint64_t, uint64_t>& bl_map,
+ uint64_t bl_off,
+ const vector<pair<uint64_t,uint64_t> >& buffer_extents)
{
+ ldout(cct, 10) << "add_partial_sparse_result(" << this << ") " << bl.length()
+ << " covering " << bl_map << " (offset " << bl_off << ")"
+ << " to " << buffer_extents << dendl;
map<uint64_t, uint64_t>::const_iterator s = bl_map.begin();
for (vector<pair<uint64_t,uint64_t> >::const_iterator p = buffer_extents.begin();
p != buffer_extents.end();
}
}
-void Filer::StripedReadResult::assemble_result(bufferlist& bl, bool zero_tail)
+void Filer::StripedReadResult::assemble_result(CephContext *cct, bufferlist& bl, bool zero_tail)
{
+ ldout(cct, 10) << "assemble_result(" << this << ") zero_tail=" << zero_tail << dendl;
+
// go backwards, so that we can efficiently discard zeros
map<uint64_t,pair<bufferlist,uint64_t> >::reverse_iterator p = partial.rbegin();
if (p == partial.rend())
map<uint64_t, pair<bufferlist, uint64_t> > partial; // offset -> (data, intended length)
public:
- void add_partial_result(bufferlist& bl,
+ void add_partial_result(CephContext *cct,
+ bufferlist& bl,
const vector<pair<uint64_t,uint64_t> >& buffer_extents);
/**
* add sparse read into results
* @param bl_off logical buffer offset (e.g., first bl_map key if the buffer is not sparse)
* @param buffer_extents output buffer extents the data maps to
*/
- void add_partial_sparse_result(bufferlist& bl, const map<uint64_t, uint64_t>& bl_map,
+ void add_partial_sparse_result(CephContext *cct,
+ bufferlist& bl, const map<uint64_t, uint64_t>& bl_map,
uint64_t bl_off,
const vector<pair<uint64_t,uint64_t> >& buffer_extents);
- void assemble_result(bufferlist& bl, bool zero_tail);
+ void assemble_result(CephContext *cct, bufferlist& bl, bool zero_tail);
};
/*** async file interface. scatter/gather as needed. ***/
for (vector<ObjectExtent>::iterator eit = extents.begin();
eit != extents.end();
eit++, bit++) {
- r.add_partial_result(*bit, eit->buffer_extents);
+ r.add_partial_result(cct, *bit, eit->buffer_extents);
}
bl->clear();
- r.assemble_result(*bl, false);
+ r.assemble_result(cct, *bl, false);
} else {
ldout(cct, 15) << " only one frag" << dendl;
bl->claim(resultbl[0]);