]> git.proxmox.com Git - ceph.git/blame - ceph/src/erasure-code/ErasureCode.h
update sources to v12.1.1
[ceph.git] / ceph / src / erasure-code / ErasureCode.h
CommitLineData
7c673cae
FG
1// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2// vim: ts=8 sw=2 smarttab
3/*
4 * Ceph distributed storage system
5 *
6 * Copyright (C) 2014 Cloudwatt <libre.licensing@cloudwatt.com>
7 *
8 * Author: Loic Dachary <loic@dachary.org>
9 *
10 * This library is free software; you can redistribute it and/or
11 * modify it under the terms of the GNU Lesser General Public
12 * License as published by the Free Software Foundation; either
13 * version 2.1 of the License, or (at your option) any later version.
14 *
15 */
16
17#ifndef CEPH_ERASURE_CODE_H
18#define CEPH_ERASURE_CODE_H
19
20/*! @file ErasureCode.h
21 @brief Base class for erasure code plugins implementors
22
23 */
24
7c673cae
FG
25#include "ErasureCodeInterface.h"
26
27namespace ceph {
28
29 class ErasureCode : public ErasureCodeInterface {
30 public:
31 static const unsigned SIMD_ALIGN;
32
31f18b77 33 std::vector<int> chunk_mapping;
7c673cae
FG
34 ErasureCodeProfile _profile;
35
224ce89b
WB
36 // for CRUSH rule
37 std::string rule_root;
38 std::string rule_failure_domain;
39 std::string rule_device_class;
40
7c673cae
FG
41 ~ErasureCode() override {}
42
224ce89b 43 int init(ErasureCodeProfile &profile, std::ostream *ss) override;
7c673cae
FG
44
45 const ErasureCodeProfile &get_profile() const override {
46 return _profile;
47 }
48
224ce89b
WB
49 int create_rule(const std::string &name,
50 CrushWrapper &crush,
51 std::ostream *ss) const;
52
31f18b77 53 int sanity_check_k(int k, std::ostream *ss);
7c673cae
FG
54
55 unsigned int get_coding_chunk_count() const override {
56 return get_chunk_count() - get_data_chunk_count();
57 }
58
31f18b77
FG
59 int minimum_to_decode(const std::set<int> &want_to_read,
60 const std::set<int> &available_chunks,
61 std::set<int> *minimum) override;
7c673cae 62
31f18b77
FG
63 int minimum_to_decode_with_cost(const std::set<int> &want_to_read,
64 const std::map<int, int> &available,
65 std::set<int> *minimum) override;
7c673cae
FG
66
67 int encode_prepare(const bufferlist &raw,
31f18b77 68 std::map<int, bufferlist> &encoded) const;
7c673cae 69
31f18b77 70 int encode(const std::set<int> &want_to_encode,
7c673cae 71 const bufferlist &in,
31f18b77 72 std::map<int, bufferlist> *encoded) override;
7c673cae 73
31f18b77
FG
74 int encode_chunks(const std::set<int> &want_to_encode,
75 std::map<int, bufferlist> *encoded) override;
7c673cae 76
31f18b77
FG
77 int decode(const std::set<int> &want_to_read,
78 const std::map<int, bufferlist> &chunks,
79 std::map<int, bufferlist> *decoded) override;
7c673cae 80
31f18b77
FG
81 int decode_chunks(const std::set<int> &want_to_read,
82 const std::map<int, bufferlist> &chunks,
83 std::map<int, bufferlist> *decoded) override;
7c673cae 84
31f18b77 85 const std::vector<int> &get_chunk_mapping() const override;
7c673cae
FG
86
87 int to_mapping(const ErasureCodeProfile &profile,
31f18b77 88 std::ostream *ss);
7c673cae
FG
89
90 static int to_int(const std::string &name,
91 ErasureCodeProfile &profile,
92 int *value,
93 const std::string &default_value,
31f18b77 94 std::ostream *ss);
7c673cae
FG
95
96 static int to_bool(const std::string &name,
97 ErasureCodeProfile &profile,
98 bool *value,
99 const std::string &default_value,
31f18b77 100 std::ostream *ss);
7c673cae
FG
101
102 static int to_string(const std::string &name,
103 ErasureCodeProfile &profile,
104 std::string *value,
105 const std::string &default_value,
31f18b77 106 std::ostream *ss);
7c673cae 107
31f18b77 108 int decode_concat(const std::map<int, bufferlist> &chunks,
7c673cae
FG
109 bufferlist *decoded) override;
110
111 protected:
112 int parse(const ErasureCodeProfile &profile,
31f18b77 113 std::ostream *ss);
7c673cae
FG
114
115 private:
116 int chunk_index(unsigned int i) const;
117 };
118}
119
120#endif