Motr  M0
cm.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_DIX_CM_H__
26 #define __MOTR_DIX_CM_H__
27 
28 
89 #include "lib/chan.h" /* m0_clink */
90 #include "cm/cm.h"
91 #include "cm/repreb/cm.h"
92 #include "dix/cm/iter.h"
93 
94 /* Import */
95 enum m0_pool_nd_state;
96 struct m0_pdclust_layout;
97 
98 #define M0_DIX_CM_TYPE_DECLARE(cmtype, id, ops, name, typecode) \
99 M0_CM_TYPE_DECLARE(cmtype, id, ops, name, typecode); \
100 M0_INTERNAL struct m0_dix_cm_type cmtype ## _dcmt = { \
101  .dct_base = &cmtype ## _cmt, \
102 }
103 
108 };
109 
112  uint64_t dcs_read_size;
113  uint64_t dcs_write_size;
114 };
115 
117 struct m0_dix_cm {
118  /* Base copy machine context. */
119  struct m0_cm dcm_base;
120 
121  /* DIX copy machine specific type. */
123 
126 
129 
135 
141 
144 
150 
153 
158 
165  uint64_t dcm_recs_nr;
166 
168  uint64_t dcm_magic;
169 };
170 
171 M0_EXTERN const struct m0_cm_cp_ops m0_dix_cm_repair_cp_ops;
173 M0_EXTERN struct m0_cm_type dix_repair_cmt;
174 M0_EXTERN struct m0_cm_type dix_rebalance_cmt;
177 
182 M0_INTERNAL int m0_dix_cm_type_register(void);
187 M0_INTERNAL void m0_dix_cm_type_deregister(void);
188 
196 M0_INTERNAL struct m0_dix_cm *cm2dix(struct m0_cm *cm);
197 
205 M0_INTERNAL int m0_dix_cm_prepare(struct m0_cm *cm);
206 
212 M0_INTERNAL void m0_dix_cm_stop(struct m0_cm *cm);
213 
219 M0_INTERNAL int m0_dix_cm_setup(struct m0_cm *cm);
220 
230 M0_INTERNAL int m0_dix_cm_start(struct m0_cm *cm);
231 
237 M0_INTERNAL void m0_dix_cm_fini(struct m0_cm *cm);
238 
244 M0_INTERNAL void m0_dix_cm_svc_fini(struct m0_reqh_service *service);
245 
259 M0_INTERNAL enum dix_repair_state
261  enum m0_pool_nd_state device_state);
262 
264 M0_INTERNAL void m0_dix_cm_repair_trigger_fop_init(void);
266 M0_INTERNAL void m0_dix_cm_repair_trigger_fop_fini(void);
267 
269 M0_INTERNAL void m0_dix_cm_rebalance_trigger_fop_init(void);
271 M0_INTERNAL void m0_dix_cm_rebalance_trigger_fop_fini(void);
272 
274 M0_INTERNAL void m0_dix_repair_sw_onwire_fop_init(void);
276 M0_INTERNAL void m0_dix_repair_sw_onwire_fop_fini(void);
277 
279 M0_INTERNAL void m0_dix_rebalance_sw_onwire_fop_init(void);
281 M0_INTERNAL void m0_dix_rebalance_sw_onwire_fop_fini(void);
282 
289 M0_INTERNAL int m0_dix_get_space_for(struct m0_cm *cm,
290  const struct m0_cm_ag_id *id,
291  size_t *count);
292 
300 M0_INTERNAL int m0_dix_cm_data_next(struct m0_cm *cm, struct m0_cm_cp *cp);
301 
307 M0_INTERNAL int m0_dix_cm_ag_next(struct m0_cm *cm,
308  const struct m0_cm_ag_id *id_curr,
309  struct m0_cm_ag_id *id_next);
310 
320 M0_INTERNAL bool m0_dix_is_peer(struct m0_cm *cm,
321  struct m0_reqh_service_ctx *ctx);
322 
330 M0_INTERNAL struct m0_reqh *m0_dix_cm2reqh(const struct m0_dix_cm *dcm);
331 
333 #endif /* __MOTR_DIX_CM_H__ */
334 
335 /*
336  * Local variables:
337  * c-indentation-style: "K&R"
338  * c-basic-offset: 8
339  * tab-width: 8
340  * fill-column: 80
341  * scroll-step: 1
342  * End:
343  */
uint64_t dcm_recs_nr
Definition: cm.h:165
M0_INTERNAL void m0_dix_cm_rebalance_trigger_fop_init(void)
Definition: trigger_fop.c:63
M0_INTERNAL struct m0_dix_cm * cm2dix(struct m0_cm *cm)
Definition: cm.c:308
M0_INTERNAL int m0_dix_cm_prepare(struct m0_cm *cm)
Definition: cm.c:337
M0_EXTERN struct m0_cm_type dix_rebalance_cmt
Definition: cm.h:174
m0_time_t dcm_start_time
Definition: cm.h:134
int dcm_stats_key
Definition: cm.h:143
M0_INTERNAL void m0_dix_rebalance_sw_onwire_fop_fini(void)
Definition: sw_fop.c:84
struct m0_cm_type * dct_base
Definition: cm.h:106
struct m0_clink dcm_proxies_completed
Definition: cm.h:157
M0_INTERNAL void m0_dix_repair_sw_onwire_fop_fini(void)
Definition: sw_fop.c:84
M0_INTERNAL void m0_dix_cm_repair_trigger_fop_init(void)
Definition: trigger_fop.c:63
M0_EXTERN const struct m0_cm_cp_ops m0_dix_cm_repair_cp_ops
Definition: cm.h:171
uint64_t m0_time_t
Definition: time.h:37
M0_INTERNAL void m0_dix_cm_svc_fini(struct m0_reqh_service *service)
Definition: service.c:113
Definition: cp.h:160
M0_INTERNAL void m0_dix_cm_repair_trigger_fop_fini(void)
Definition: trigger_fop.c:45
m0_time_t dcm_stop_time
Definition: cm.h:140
M0_INTERNAL int m0_dix_cm_data_next(struct m0_cm *cm, struct m0_cm_cp *cp)
Definition: cm.c:535
m0_cm_op
Definition: cm.h:37
M0_INTERNAL void m0_dix_cm_fini(struct m0_cm *cm)
Definition: cm.c:461
M0_INTERNAL void m0_dix_rebalance_sw_onwire_fop_init(void)
Definition: sw_fop.c:65
static m0_bcount_t count
Definition: xcode.c:167
M0_INTERNAL int m0_dix_cm_setup(struct m0_cm *cm)
Definition: cm.c:332
static struct m0_cm * cm
Definition: cm.c:63
uint64_t dcm_magic
Definition: cm.h:168
M0_INTERNAL enum dix_repair_state m0_dix_cm_fid_repair_done(struct m0_fid *gfid, struct m0_reqh *reqh, enum m0_pool_nd_state device_state)
M0_EXTERN struct m0_dix_cm_type dix_rebalance_dcmt
Definition: cm.h:176
M0_INTERNAL int m0_dix_cm_ag_next(struct m0_cm *cm, const struct m0_cm_ag_id *id_curr, struct m0_cm_ag_id *id_next)
Definition: cm.c:473
m0_pool_nd_state
Definition: pool_machine.h:57
M0_INTERNAL void m0_dix_cm_type_deregister(void)
Definition: cm.c:326
struct m0_cm dcm_base
Definition: cm.h:119
M0_EXTERN struct m0_dix_cm_type dix_repair_dcmt
Definition: cm.h:175
Definition: reqh.h:94
M0_EXTERN const struct m0_cm_cp_ops m0_dix_cm_rebalance_cp_ops
Definition: cm.h:172
Definition: cm.h:117
M0_INTERNAL int m0_dix_cm_start(struct m0_cm *cm)
Definition: cm.c:367
bool dcm_iter_inprogress
Definition: cm.h:149
Definition: cm.h:143
enum m0_cm_op dcm_op
Definition: cm.h:125
struct m0_reqh reqh
Definition: rm_foms.c:48
Definition: fid.h:38
M0_INTERNAL bool m0_dix_is_peer(struct m0_cm *cm, struct m0_reqh_service_ctx *ctx)
Definition: cm.c:623
M0_EXTERN struct m0_cm_type dix_repair_cmt
Definition: cm.h:173
M0_INTERNAL void m0_dix_repair_sw_onwire_fop_init(void)
Definition: sw_fop.c:65
struct m0_dix_cm_type * dcm_type
Definition: cm.h:122
struct m0_fom_type dct_iter_fomt
Definition: cm.h:107
M0_INTERNAL int m0_dix_cm_type_register(void)
Definition: cm.c:313
bool dcm_cp_in_progress
Definition: cm.h:152
Definition: cm.h:166
M0_INTERNAL struct m0_reqh * m0_dix_cm2reqh(const struct m0_dix_cm *dcm)
Definition: cm.c:486
M0_INTERNAL int m0_dix_get_space_for(struct m0_cm *cm, const struct m0_cm_ag_id *id, size_t *count)
Definition: cm.c:465
M0_INTERNAL void m0_dix_cm_rebalance_trigger_fop_fini(void)
Definition: trigger_fop.c:45
Definition: nucleus.c:42
uint64_t dcs_write_size
Definition: cm.h:113
int dcm_processed_nr
Definition: cm.h:160
struct m0_fid gfid
Definition: dir.c:626
uint64_t dcs_read_size
Definition: cm.h:112
M0_INTERNAL void m0_dix_cm_stop(struct m0_cm *cm)
Definition: cm.c:425
static struct m0_reqh_service * service[REQH_IN_UT_MAX]
Definition: long_lock_ut.c:46
Definition: ag.h:49
struct m0_dix_cm_iter dcm_it
Definition: cm.h:128