]> git.proxmox.com Git - ceph.git/blame - ceph/src/msg/async/compression_onwire.h
update ceph source to reef 18.1.2
[ceph.git] / ceph / src / msg / async / compression_onwire.h
CommitLineData
20effc67
TL
1// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2// vim: ts=8 sw=2 smarttab
3
4#ifndef CEPH_COMPRESSION_ONWIRE_H
5#define CEPH_COMPRESSION_ONWIRE_H
6
1e59de90 7#include <cstdint>
20effc67
TL
8#include <optional>
9
10#include "compressor/Compressor.h"
11#include "include/buffer.h"
12
13class CompConnectionMeta;
14
15namespace ceph::compression::onwire {
16 using Compressor = TOPNSPC::Compressor;
17 using CompressorRef = TOPNSPC::CompressorRef;
18
19 class Handler {
20 public:
21 Handler(CephContext* const cct, CompressorRef compressor)
22 : m_cct(cct), m_compressor(compressor) {}
23
24 protected:
25 CephContext* const m_cct;
26 CompressorRef m_compressor;
27 };
28
29 class RxHandler final : private Handler {
30 public:
31 RxHandler(CephContext* const cct, CompressorRef compressor)
32 : Handler(cct, compressor) {}
33 ~RxHandler() {};
34
35 /**
36 * Decompresses a bufferlist
37 *
38 * @param input compressed bufferlist
39 * @param out decompressed bufferlist
40 *
41 * @returns true on success, false on failure
42 */
43 std::optional<ceph::bufferlist> decompress(const ceph::bufferlist &input);
44 };
45
46 class TxHandler final : private Handler {
47 public:
48 TxHandler(CephContext* const cct, CompressorRef compressor, int mode, std::uint64_t min_size)
49 : Handler(cct, compressor),
50 m_min_size(min_size),
51 m_mode(static_cast<Compressor::CompressionMode>(mode))
52 {}
53 ~TxHandler() {}
54
55 void reset_handler(int num_segments, uint64_t size) {
56 m_init_onwire_size = size;
57 m_compress_potential = size;
58 m_onwire_size = 0;
59 }
60
61 void done();
62
63 /**
64 * Compresses a bufferlist
65 *
66 * @param input bufferlist to compress
67 * @param out compressed bufferlist
68 *
69 * @returns true on success, false on failure
70 */
71 std::optional<ceph::bufferlist> compress(const ceph::bufferlist &input);
72
73 double get_ratio() const {
74 return get_initial_size() / (double) get_final_size();
75 }
76
77 uint64_t get_initial_size() const {
78 return m_init_onwire_size;
79 }
80
81 uint64_t get_final_size() const {
82 return m_onwire_size;
83 }
84
85 private:
86 uint64_t m_min_size;
87 Compressor::CompressionMode m_mode;
88
89 uint64_t m_init_onwire_size;
90 uint64_t m_onwire_size;
91 uint64_t m_compress_potential;
92 };
93
94 struct rxtx_t {
95 std::unique_ptr<RxHandler> rx;
96 std::unique_ptr<TxHandler> tx;
97
98 static rxtx_t create_handler_pair(
99 CephContext* ctx,
100 const CompConnectionMeta& comp_meta,
101 std::uint64_t compress_min_size);
102 };
103}
104
105#endif // CEPH_COMPRESSION_ONWIRE_H