]>
Commit | Line | Data |
---|---|---|
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 | ||
27 | namespace 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 |