Motr  M0
cm_utils.h
Go to the documentation of this file.
1 /* -*- C -*- */
2 /*
3  * Copyright (c) 2012-2020 Seagate Technology LLC and/or its Affiliates
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  * For any questions about this software or licensing,
18  * please email opensource@seagate.com or cortx-questions@seagate.com.
19  *
20  */
21 
22 
23 #pragma once
24 
25 #ifndef __MOTR_SNS_CM_UTILS_H__
26 #define __MOTR_SNS_CM_UTILS_H__
27 
28 #include "layout/pdclust.h"
29 
30 #include "sns/cm/cm.h"
31 
38 struct m0_cob_domain;
39 struct m0_cm;
40 struct m0_sns_cm;
41 struct m0_sns_cm_ag;
42 
47 M0_INTERNAL void
49  const struct m0_pdclust_src_addr *sa,
50  struct m0_pdclust_tgt_addr *ta,
51  struct m0_fid *cfid_out);
52 
53 M0_INTERNAL uint32_t m0_sns_cm_device_index_get(uint64_t group,
54  uint64_t unit_number,
55  struct m0_sns_cm_file_ctx *fctx);
56 
57 M0_INTERNAL uint64_t m0_sns_cm_ag_unit2cobindex(struct m0_sns_cm_ag *sag,
58  uint64_t unit);
59 
63 M0_INTERNAL int m0_sns_cm_cob_locate(struct m0_cob_domain *cdom,
64  const struct m0_fid *cob_fid);
65 
66 
76 M0_INTERNAL uint64_t m0_sns_cm_ag_nr_local_units(struct m0_sns_cm *scm,
77  struct m0_sns_cm_file_ctx *fctx,
78  uint64_t group);
79 
80 
81 M0_INTERNAL uint64_t m0_sns_cm_ag_nr_global_units(const struct m0_sns_cm_ag *ag,
82  struct m0_pdclust_layout *pl);
83 
84 M0_INTERNAL uint64_t m0_sns_cm_ag_size(const struct m0_pdclust_layout *pl);
85 
86 M0_INTERNAL uint64_t m0_sns_cm_ag_nr_data_units(const struct m0_pdclust_layout *pl);
87 
88 M0_INTERNAL uint64_t m0_sns_cm_ag_nr_parity_units(const struct m0_pdclust_layout *pl);
89 
90 M0_INTERNAL uint64_t m0_sns_cm_ag_nr_spare_units(const struct m0_pdclust_layout *pl);
91 
92 M0_INTERNAL int m0_sns_cm_ag_in_cp_units(const struct m0_sns_cm *scm,
93  const struct m0_cm_ag_id *id,
94  struct m0_sns_cm_file_ctx *fctx,
95  uint32_t *in_cp_nr,
96  uint32_t *in_units_nr,
97  struct m0_cm_proxy_in_count *pcount);
98 
99 M0_INTERNAL bool m0_sns_cm_is_cob_repaired(struct m0_poolmach *pm,
100  uint32_t cob_index);
101 
102 M0_INTERNAL bool m0_sns_cm_is_cob_repairing(struct m0_poolmach *pm,
103  uint32_t cob_index);
104 
105 M0_INTERNAL bool m0_sns_cm_is_cob_rebalancing(struct m0_poolmach *pm,
106  uint32_t cob_index);
107 
112 M0_INTERNAL uint64_t
114  uint64_t fidx);
115 
116 M0_INTERNAL bool m0_sns_cm_unit_is_spare(struct m0_sns_cm_file_ctx *fctx,
117  uint64_t group_number,
118  uint64_t spare_unit_number);
119 
125 M0_INTERNAL uint64_t m0_sns_cm_ag_unit_start(const struct m0_sns_cm *scm,
126  const struct m0_pdclust_layout *pl);
127 
133 M0_INTERNAL uint64_t m0_sns_cm_ag_unit_end(const struct m0_sns_cm *scm,
134  const struct m0_pdclust_layout *pl);
135 
140 M0_INTERNAL int m0_sns_cm_ag_tgt_unit2cob(struct m0_sns_cm_ag *sag,
141  uint64_t tgt_unit,
142  struct m0_fid *cobfid);
143 
148 M0_INTERNAL int
150 
158 M0_INTERNAL const char *m0_sns_cm_tgt_ep(const struct m0_cm *cm,
159  const struct m0_pool_version *pv,
160  const struct m0_fid *gfid,
161  struct m0_conf_obj **hostage);
162 
163 M0_INTERNAL size_t m0_sns_cm_ag_unrepaired_units(const struct m0_sns_cm *scm,
164  struct m0_sns_cm_file_ctx *fctx,
165  uint64_t group,
166  struct m0_bitmap *fmap_out);
167 
174 M0_INTERNAL bool m0_sns_cm_ag_is_relevant(struct m0_sns_cm *scm,
175  struct m0_sns_cm_file_ctx *fctx,
176  const struct m0_cm_ag_id *id);
177 
178 M0_INTERNAL bool
180  uint64_t nr_cps_fini);
181 
182 M0_INTERNAL bool m0_sns_cm_fid_is_valid(const struct m0_sns_cm *snscm,
183  const struct m0_fid *fid);
184 
185 M0_INTERNAL struct m0_reqh *m0_sns_cm2reqh(const struct m0_sns_cm *snscm);
186 
187 M0_INTERNAL bool m0_sns_cm_is_local_cob(const struct m0_cm *cm,
188  const struct m0_pool_version *pv,
189  const struct m0_fid *cob_fid);
190 
191 M0_INTERNAL bool m0_sns_cm_disk_has_dirty_pver(struct m0_cm *cm,
192  struct m0_conf_drive *disk,
193  bool clear);
194 M0_INTERNAL bool m0_sns_cm_pver_is_dirty(struct m0_pool_version *pver);
195 M0_INTERNAL void m0_sns_cm_pver_dirty_set(struct m0_pool_version *pver);
196 M0_INTERNAL int m0_sns_cm_pool_ha_nvec_alloc(struct m0_pool *pool,
197  enum m0_pool_nd_state state,
198  struct m0_ha_nvec *nvec);
199 M0_INTERNAL enum m0_sns_cm_local_unit_type
201  uint64_t unit);
202 
205 /* __MOTR_SNS_CM_UTILS_H__ */
206 
207 #endif
208 
209 /*
210  * Local variables:
211  * c-indentation-style: "K&R"
212  * c-basic-offset: 8
213  * tab-width: 8
214  * fill-column: 80
215  * scroll-step: 1
216  * End:
217  */
M0_INTERNAL uint64_t m0_sns_cm_ag_nr_global_units(const struct m0_sns_cm_ag *sag, struct m0_pdclust_layout *pl)
Definition: cm_utils.c:215
M0_INTERNAL void m0_sns_cm_pver_dirty_set(struct m0_pool_version *pver)
Definition: cm_utils.c:580
M0_INTERNAL uint64_t m0_sns_cm_ag_nr_data_units(const struct m0_pdclust_layout *pl)
Definition: cm_utils.c:222
M0_INTERNAL bool m0_sns_cm_ag_is_relevant(struct m0_sns_cm *scm, struct m0_sns_cm_file_ctx *fctx, const struct m0_cm_ag_id *id)
Definition: cm_utils.c:505
Definition: cm.h:205
M0_INTERNAL void m0_sns_cm_unit2cobfid(struct m0_sns_cm_file_ctx *fctx, const struct m0_pdclust_src_addr *sa, struct m0_pdclust_tgt_addr *ta, struct m0_fid *cfid_out)
Definition: cm_utils.c:117
M0_INTERNAL bool m0_sns_cm_pver_is_dirty(struct m0_pool_version *pver)
Definition: cm_utils.c:575
M0_INTERNAL bool m0_sns_cm_fid_is_valid(const struct m0_sns_cm *snscm, const struct m0_fid *fid)
Definition: cm_utils.c:539
M0_INTERNAL const char * m0_sns_cm_tgt_ep(const struct m0_cm *cm, const struct m0_pool_version *pv, const struct m0_fid *cob_fid, struct m0_conf_obj **hostage)
Definition: cm_utils.c:434
M0_INTERNAL uint64_t m0_sns_cm_ag_unit_start(const struct m0_sns_cm *scm, const struct m0_pdclust_layout *pl)
Definition: cm_utils.c:369
struct m0_pool_version * pv
Definition: dir.c:629
M0_INTERNAL bool m0_sns_cm_ag_relevant_is_done(const struct m0_cm_aggr_group *ag, uint64_t nr_cps_fini)
M0_INTERNAL bool m0_sns_cm_is_local_cob(const struct m0_cm *cm, const struct m0_pool_version *pv, const struct m0_fid *cob_fid)
Definition: cm_utils.c:449
static struct m0_sns_cm * scm
Definition: cm.c:64
M0_INTERNAL uint64_t m0_sns_cm_ag_nr_parity_units(const struct m0_pdclust_layout *pl)
Definition: cm_utils.c:228
M0_INTERNAL int m0_sns_cm_ag_tgt_unit2cob(struct m0_sns_cm_ag *sag, uint64_t tgt_unit, struct m0_fid *cobfid)
Definition: cm_utils.c:381
M0_INTERNAL uint64_t m0_sns_cm_ag_unit2cobindex(struct m0_sns_cm_ag *sag, uint64_t unit)
Definition: cm_utils.c:143
static struct m0_cob_domain * cdom
Definition: xform.c:55
M0_INTERNAL uint64_t m0_sns_cm_ag_unit_end(const struct m0_sns_cm *scm, const struct m0_pdclust_layout *pl)
Definition: cm_utils.c:375
struct m0_fid fid
Definition: di.c:46
static struct m0_cm * cm
Definition: cm.c:63
static struct m0_sns_cm_ag * sag
Definition: cm.c:66
M0_INTERNAL bool m0_sns_cm_is_cob_repairing(struct m0_poolmach *pm, uint32_t cob_index)
Definition: cm_utils.c:256
M0_INTERNAL bool m0_sns_cm_is_cob_rebalancing(struct m0_poolmach *pm, uint32_t cob_index)
Definition: cm_utils.c:266
M0_INTERNAL uint32_t m0_sns_cm_device_index_get(uint64_t group, uint64_t unit_number, struct m0_sns_cm_file_ctx *fctx)
Definition: cm_utils.c:126
M0_INTERNAL size_t m0_sns_cm_ag_unrepaired_units(const struct m0_sns_cm *scm, struct m0_sns_cm_file_ctx *fctx, uint64_t group, struct m0_bitmap *fmap_out)
Definition: cm_utils.c:464
struct m0_fid pver
Definition: idx_dix.c:74
m0_pool_nd_state
Definition: pool_machine.h:57
M0_INTERNAL int m0_sns_cm_cob_locate(struct m0_cob_domain *cdom, const struct m0_fid *cob_fid)
Definition: cm_utils.c:157
M0_INTERNAL uint64_t m0_sns_cm_ag_nr_local_units(struct m0_sns_cm *scm, struct m0_sns_cm_file_ctx *fctx, uint64_t group)
Definition: cm_utils.c:176
m0_sns_cm_local_unit_type
Definition: cm.h:128
static struct m0_fid cob_fid
Definition: net.c:116
M0_INTERNAL bool m0_sns_cm_is_cob_repaired(struct m0_poolmach *pm, uint32_t cob_index)
Definition: cm_utils.c:246
M0_INTERNAL uint64_t m0_sns_cm_ag_spare_unit_nr(const struct m0_pdclust_layout *pl, uint64_t fidx)
Definition: cm_utils.c:362
Definition: reqh.h:94
static void group(void)
Definition: sm.c:386
M0_INTERNAL int m0_sns_cm_ag_in_cp_units(const struct m0_sns_cm *scm, const struct m0_cm_ag_id *id, struct m0_sns_cm_file_ctx *fctx, uint32_t *in_cp_nr, uint32_t *in_units_nr, struct m0_cm_proxy_in_count *pcount)
Definition: cm_utils.c:526
M0_INTERNAL uint64_t m0_sns_cm_ag_nr_spare_units(const struct m0_pdclust_layout *pl)
Definition: cm_utils.c:234
M0_INTERNAL struct m0_reqh * m0_sns_cm2reqh(const struct m0_sns_cm *snscm)
Definition: cm_utils.c:547
static struct m0_pool pool
Definition: iter_ut.c:58
M0_INTERNAL enum m0_sns_cm_local_unit_type m0_sns_cm_local_unit_type_get(struct m0_sns_cm_file_ctx *fctx, uint64_t group, uint64_t unit)
Definition: cm_utils.c:634
Definition: fid.h:38
M0_INTERNAL uint64_t m0_sns_cm_ag_size(const struct m0_pdclust_layout *pl)
Definition: cm_utils.c:239
M0_INTERNAL int m0_sns_cm_pool_ha_nvec_alloc(struct m0_pool *pool, enum m0_pool_nd_state state, struct m0_ha_nvec *nvec)
Definition: cm_utils.c:585
Definition: cm.h:166
M0_INTERNAL bool m0_sns_cm_unit_is_spare(struct m0_sns_cm_file_ctx *fctx, uint64_t group_nr, uint64_t spare_nr)
Definition: cm_utils.c:277
static struct m0_sns_cm_file_ctx fctx
Definition: net.c:55
Definition: pool.h:80
struct m0_fid gfid
Definition: dir.c:626
M0_INTERNAL int m0_sns_cm_ut_file_size_layout(struct m0_sns_cm_file_ctx *fctx)
Definition: cm_utils.c:68
M0_INTERNAL bool m0_sns_cm_disk_has_dirty_pver(struct m0_cm *cm, struct m0_conf_drive *disk, bool clear)
Definition: cm_utils.c:552
Definition: ag.h:49