Skip to content

Commit

Permalink
Merge "Convert serialization of query::result to use db::serializer<>…
Browse files Browse the repository at this point in the history
…" from Tomasz

Reviewed-by: Nadav Har'El <[email protected]>
  • Loading branch information
avikivity committed Dec 7, 2015
2 parents 2086c65 + d64db98 commit 098136f
Show file tree
Hide file tree
Showing 9 changed files with 52 additions and 21 deletions.
2 changes: 2 additions & 0 deletions bytes_ostream.hh
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,10 @@
*
*/
class bytes_ostream {
public:
using size_type = bytes::size_type;
using value_type = bytes::value_type;
private:
static_assert(sizeof(value_type) == 1, "value_type is assumed to be one byte long");
struct chunk {
// FIXME: group fragment pointers to reduce pointer chasing when packetizing
Expand Down
1 change: 0 additions & 1 deletion db/serializer.hh
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@
#include "utils/data_output.hh"
#include "bytes_ostream.hh"
#include "bytes.hh"
#include "mutation.hh"
#include "keys.hh"
#include "database_fwd.hh"
#include "frozen_mutation.hh"
Expand Down
2 changes: 2 additions & 0 deletions frozen_mutation.cc
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@

#include "db/serializer.hh"
#include "frozen_mutation.hh"
#include "mutation_partition.hh"
#include "mutation.hh"
#include "partition_builder.hh"
#include "mutation_partition_serializer.hh"
#include "utils/UUID.hh"
Expand Down
2 changes: 1 addition & 1 deletion frozen_mutation.hh
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,9 @@

#include "atomic_cell.hh"
#include "keys.hh"
#include "mutation.hh"
#include "mutation_partition_view.hh"

class mutation;

// Immutable, compact form of mutation.
//
Expand Down
10 changes: 2 additions & 8 deletions message/messaging_service.cc
Original file line number Diff line number Diff line change
Expand Up @@ -110,17 +110,11 @@ query::read_command net::serializer::read(Input& in, rpc::type<query::read_comma

template <typename Output>
void net::serializer::write(Output& out, const query::result& v) const {
// FIXME: allow const call to query::result::serialize()
uint32_t sz = v.serialized_size();
write(out, sz);
bytes b(bytes::initialized_later(), sz);
auto _out = b.begin();
const_cast<query::result&>(v).serialize(_out);
out.write(reinterpret_cast<const char*>(b.c_str()), sz);
write_serializable(out, v);
}
template <typename Input>
query::result net::serializer::read(Input& in, rpc::type<query::result>) const {
return read_gms<query::result>(in);
return read_serializable<query::result>(in);
}

template <typename Output>
Expand Down
1 change: 1 addition & 0 deletions mutation_partition_serializer.cc
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
*/

#include "mutation_partition_serializer.hh"
#include "mutation_partition.hh"
#include "db/serializer.hh"

//
Expand Down
1 change: 1 addition & 0 deletions mutation_partition_view.cc
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
#include "db/serializer.hh"
#include "utils/data_input.hh"
#include "mutation_partition_serializer.hh"
#include "mutation_partition.hh"

//
// See mutation_partition_serializer.cc for representation layout.
Expand Down
22 changes: 11 additions & 11 deletions query-result.hh
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
#include <cryptopp/md5.h>
#include "bytes_ostream.hh"
#include "query-request.hh"
#include "db/serializer.hh"

namespace query {

Expand Down Expand Up @@ -139,17 +140,16 @@ public:
return result_digest(std::move(b));
}
sstring pretty_print(schema_ptr, const query::partition_slice&) const;
size_t serialized_size() const { return _w.size(); }
void serialize(bytes::iterator& out) {
auto v = _w.linearize();
out = std::copy(v.begin(), v.end(), out);
}
static result deserialize(bytes_view& in) {
bytes_ostream w;
w.write(in);
in.remove_prefix(in.size());
return result(std::move(w));
}
};

}

namespace db {

template<> serializer<query::result>::serializer(const query::result&);
template<> void serializer<query::result>::write(output&, const query::result&);
template<> query::result serializer<query::result>::read(input&);

extern template class serializer<query::result>;

}
32 changes: 32 additions & 0 deletions query.cc
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
* along with Scylla. If not, see <http://www.gnu.org/licenses/>.
*/

#include <limits>
#include "db/serializer.hh"
#include "query-request.hh"
#include "query-result.hh"
Expand Down Expand Up @@ -270,3 +271,34 @@ result::pretty_print(schema_ptr s, const query::partition_slice& slice) const {
}

}

template class db::serializer<query::result>;

using query_result_size_type = uint32_t;

template<>
db::serializer<query::result>::serializer(const query::result& v)
: _item(v)
, _size(sizeof(query_result_size_type) + v.buf().size())
{
static_assert(std::numeric_limits<bytes_ostream::size_type>::max() <=
std::numeric_limits<query_result_size_type>::max(), "query_result_size_type too small");
}

template<>
void
db::serializer<query::result>::write(output& out, const query::result& v) {
const bytes_ostream& buf = v.buf();
out.write<query_result_size_type>(buf.size());
for (bytes_view frag : buf.fragments()) {
out.write(frag.begin(), frag.end());
}
}

template<>
query::result db::serializer<query::result>::read(input& in) {
bytes_ostream buf;
auto size = in.read<query_result_size_type>();
buf.write(in.read_view(size));
return query::result(std::move(buf));
}

0 comments on commit 098136f

Please sign in to comment.