// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- // vim: ts=8 sw=2 smarttab /* * Ceph - scalable distributed file system * * Copyright (C) 2013 Inktank Storage, Inc. * * This is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License version 2.1, as published by the Free Software * Foundation. See file COPYING. * */ #ifndef ECBMSGTYPES_H #define ECBMSGTYPES_H #include "osd_types.h" #include "include/buffer.h" #include "os/ObjectStore.h" #include "boost/tuple/tuple.hpp" struct ECSubWrite { pg_shard_t from; ceph_tid_t tid; osd_reqid_t reqid; hobject_t soid; pg_stat_t stats; ObjectStore::Transaction t; eversion_t at_version; eversion_t trim_to; eversion_t roll_forward_to; std::vector log_entries; std::set temp_added; std::set temp_removed; std::optional updated_hit_set_history; bool backfill_or_async_recovery = false; ECSubWrite() : tid(0) {} ECSubWrite( pg_shard_t from, ceph_tid_t tid, osd_reqid_t reqid, hobject_t soid, const pg_stat_t &stats, const ObjectStore::Transaction &t, eversion_t at_version, eversion_t trim_to, eversion_t roll_forward_to, std::vector log_entries, std::optional updated_hit_set_history, const std::set &temp_added, const std::set &temp_removed, bool backfill_or_async_recovery) : from(from), tid(tid), reqid(reqid), soid(soid), stats(stats), t(t), at_version(at_version), trim_to(trim_to), roll_forward_to(roll_forward_to), log_entries(log_entries), temp_added(temp_added), temp_removed(temp_removed), updated_hit_set_history(updated_hit_set_history), backfill_or_async_recovery(backfill_or_async_recovery) {} void claim(ECSubWrite &other) { from = other.from; tid = other.tid; reqid = other.reqid; soid = other.soid; stats = other.stats; t.swap(other.t); at_version = other.at_version; trim_to = other.trim_to; roll_forward_to = other.roll_forward_to; log_entries.swap(other.log_entries); temp_added.swap(other.temp_added); temp_removed.swap(other.temp_removed); updated_hit_set_history = other.updated_hit_set_history; backfill_or_async_recovery = other.backfill_or_async_recovery; } void encode(ceph::buffer::list &bl) const; void decode(ceph::buffer::list::const_iterator &bl); void dump(ceph::Formatter *f) const; static void generate_test_instances(std::list& o); private: // no outside copying -- slow ECSubWrite(ECSubWrite& other); const ECSubWrite& operator=(const ECSubWrite& other); }; WRITE_CLASS_ENCODER(ECSubWrite) struct ECSubWriteReply { pg_shard_t from; ceph_tid_t tid; eversion_t last_complete; bool committed; bool applied; ECSubWriteReply() : tid(0), committed(false), applied(false) {} void encode(ceph::buffer::list &bl) const; void decode(ceph::buffer::list::const_iterator &bl); void dump(ceph::Formatter *f) const; static void generate_test_instances(std::list& o); }; WRITE_CLASS_ENCODER(ECSubWriteReply) struct ECSubRead { pg_shard_t from; ceph_tid_t tid; std::map >> to_read; std::set attrs_to_read; std::map>> subchunks; void encode(ceph::buffer::list &bl, uint64_t features) const; void decode(ceph::buffer::list::const_iterator &bl); void dump(ceph::Formatter *f) const; static void generate_test_instances(std::list& o); }; WRITE_CLASS_ENCODER_FEATURES(ECSubRead) struct ECSubReadReply { pg_shard_t from; ceph_tid_t tid; std::map >> buffers_read; std::map>> attrs_read; std::map errors; void encode(ceph::buffer::list &bl) const; void decode(ceph::buffer::list::const_iterator &bl); void dump(ceph::Formatter *f) const; static void generate_test_instances(std::list& o); }; WRITE_CLASS_ENCODER(ECSubReadReply) std::ostream &operator<<( std::ostream &lhs, const ECSubWrite &rhs); std::ostream &operator<<( std::ostream &lhs, const ECSubWriteReply &rhs); std::ostream &operator<<( std::ostream &lhs, const ECSubRead &rhs); std::ostream &operator<<( std::ostream &lhs, const ECSubReadReply &rhs); #endif