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_SNS_CM_H__
26 #define __MOTR_SNS_CM_H__
27 
28 #include "net/buffer_pool.h"
29 #include "pool/pool.h"
30 
31 #include "cm/cm.h"
32 #include "sns/cm/iter.h"
33 #include "sns/cm/ag.h"
34 #include "rm/rm.h"
35 #include "file/file.h"
36 #include "lib/hash.h"
37 #include "cm/repreb/cm.h" /* m0_cm_op */
38 #include "ha/msg.h" /* m0_ha_msg */
39 
40 
105  SNS_REPAIR = 1 << 1,
106  SNS_REBALANCE = 1 << 2,
113 };
114 
126 };
127 
132 };
133 
141  struct m0_chan sb_wait;
142 };
143 
154  const struct m0_cm_ag_id *id,
155  struct m0_sns_cm_file_ctx *fctx,
156  uint32_t *in_cp_nr,
157  uint32_t *in_units_nr,
158  struct m0_cm_proxy_in_count *pcount);
159 
164  uint64_t (*sch_ag_unit_start)(const struct m0_pdclust_layout *pl);
165 
170  uint64_t (*sch_ag_unit_end)(const struct m0_pdclust_layout *pl);
171 
177  struct m0_sns_cm_file_ctx *fctx,
178  uint64_t group);
179 
181  struct m0_pdclust_layout *pl);
182 
184  struct m0_cob_domain *cdom,
185  struct m0_poolmach *pm,
186  const struct m0_fid *cob_fid);
187 
188  bool (*sch_is_cob_failed)(struct m0_poolmach *pm,
189  uint32_t cob_index);
190 };
191 
194  /*
195  * Resource manager domain for this sns copy machine.
196  * Ideally this should be a part of reqh object, but
197  * that would require modifications in the rm code.
198  */
203 };
204 
205 struct m0_sns_cm {
206  struct m0_cm sc_base;
207 
210 
216 
218 
221 
228 
238 
241 
243  uint32_t sc_repair_done;
244 
250 
256 
258 
261 
269 
272 
275 
277  uint64_t sc_magic;
278 
279 };
280 
281 M0_INTERNAL int m0_sns_cm_type_register(void);
282 M0_INTERNAL void m0_sns_cm_type_deregister(void);
283 
284 M0_INTERNAL size_t m0_sns_cm_buffer_pool_provision(struct m0_net_buffer_pool *bp,
285  size_t bufs_nr);
286 M0_INTERNAL void m0_sns_cm_buffer_pools_prune(struct m0_cm *cm);
287 M0_INTERNAL struct m0_net_buffer *m0_sns_cm_buffer_get(struct m0_net_buffer_pool
288  *bp, size_t colour);
289 M0_INTERNAL void m0_sns_cm_buffer_put(struct m0_net_buffer_pool *bp,
290  struct m0_net_buffer *buf,
291  uint64_t colour);
292 
293 M0_INTERNAL int m0_sns_cm_buf_attach(struct m0_net_buffer_pool *bp, struct m0_cm_cp *cp);
294 M0_INTERNAL void m0_sns_cm_buf_wait(struct m0_sns_cm_buf_pool *sbp, struct m0_fom *fom);
295 
296 M0_INTERNAL struct m0_sns_cm *cm2sns(struct m0_cm *cm);
297 
298 M0_INTERNAL struct m0_cm_cp *m0_sns_cm_cp_alloc(struct m0_cm *cm);
299 
300 M0_INTERNAL int m0_sns_cm_prepare(struct m0_cm *cm);
301 
302 M0_INTERNAL void m0_sns_cm_stop(struct m0_cm *cm);
303 
304 M0_INTERNAL int m0_sns_cm_setup(struct m0_cm *cm);
305 
306 M0_INTERNAL bool m0_sns_is_peer(struct m0_cm *cm,
307  struct m0_reqh_service_ctx *ctx);
308 
309 M0_INTERNAL int m0_sns_cm_fail_dev_log(struct m0_cm *cm,
310  enum m0_pool_nd_state pd_state);
311 
312 M0_INTERNAL int m0_sns_cm_start(struct m0_cm *cm);
313 
314 M0_INTERNAL int m0_sns_cm_ag_next(struct m0_cm *cm,
315  const struct m0_cm_ag_id *id_curr,
316  struct m0_cm_ag_id *id_next);
317 
318 M0_INTERNAL void m0_sns_cm_complete(struct m0_cm *cm);
319 
320 M0_INTERNAL void m0_sns_cm_fini(struct m0_cm *cm);
321 
322 M0_INTERNAL int64_t
324  const struct m0_cm_ag_id *id);
325 
326 M0_INTERNAL uint64_t m0_sns_cm_data_seg_nr(struct m0_sns_cm *scm,
327  struct m0_pdclust_layout *pl);
328 
329 M0_INTERNAL uint64_t m0_sns_cm_cp_buf_nr(struct m0_net_buffer_pool *bp,
330  uint64_t data_seg_nr);
331 
332 M0_INTERNAL int m0_sns_cm_has_space_for(struct m0_sns_cm *scm,
333  struct m0_pdclust_layout *pl,
334  uint64_t nr_bufs);
335 
336 M0_INTERNAL void m0_sns_cm_reserve_space(struct m0_sns_cm *scm, size_t nr_bufs);
337 
338 M0_INTERNAL void m0_sns_cm_cancel_reservation(struct m0_sns_cm *scm, size_t nr_bufs);
339 
350 M0_INTERNAL enum sns_repair_state
352  enum m0_pool_nd_state device_state);
353 
354 M0_INTERNAL int m0_sns_cm_rm_init(struct m0_sns_cm *scm);
355 M0_INTERNAL void m0_sns_cm_rm_fini(struct m0_sns_cm *scm);
356 
357 M0_INTERNAL void m0_sns_cm_repair_trigger_fop_init(void);
358 M0_INTERNAL void m0_sns_cm_repair_trigger_fop_fini(void);
359 
360 M0_INTERNAL void m0_sns_cm_rebalance_trigger_fop_init(void);
361 M0_INTERNAL void m0_sns_cm_rebalance_trigger_fop_fini(void);
362 
363 M0_INTERNAL void m0_sns_cm_repair_sw_onwire_fop_init(void);
364 M0_INTERNAL void m0_sns_cm_repair_sw_onwire_fop_fini(void);
365 
366 M0_INTERNAL void m0_sns_cm_rebalance_sw_onwire_fop_init(void);
367 M0_INTERNAL void m0_sns_cm_rebalance_sw_onwire_fop_fini(void);
368 
369 M0_INTERNAL void m0_sns_cm_print_status(struct m0_sns_cm *scm);
370 
371 M0_INTERNAL void m0_sns_cm_ha_msg(struct m0_cm *cm,
372  struct m0_ha_msg *msg, int rc);
373 
375 #endif /* __MOTR_SNS_CM_CM_H__ */
376 /*
377  * Local variables:
378  * c-indentation-style: "K&R"
379  * c-basic-offset: 8
380  * tab-width: 8
381  * fill-column: 80
382  * scroll-step: 1
383  * End:
384  */
uint64_t(* sch_ag_unit_start)(const struct m0_pdclust_layout *pl)
Definition: cm.h:164
sns_repair_state
Definition: pool.h:568
uint64_t id
Definition: cob.h:2380
Definition: cm.h:205
struct m0_rm_resource_type rc_rt
Definition: cm.h:200
struct m0_sns_cm_buf_pool sc_obp
Definition: cm.h:240
struct m0_htable sc_file_ctx
Definition: cm.h:268
M0_INTERNAL void m0_sns_cm_repair_sw_onwire_fop_fini(void)
Definition: sw_onwire_fop.c:81
struct m0_rm_domain rc_dom
Definition: cm.h:199
M0_INTERNAL struct m0_sns_cm * cm2sns(struct m0_cm *cm)
Definition: cm.c:389
uint64_t sc_magic
Definition: cm.h:277
uint64_t m0_time_t
Definition: time.h:37
Definition: cp.h:160
M0_INTERNAL void m0_sns_cm_rebalance_trigger_fop_init(void)
Definition: trigger_fop.c:54
M0_INTERNAL int m0_sns_cm_has_space_for(struct m0_sns_cm *scm, struct m0_pdclust_layout *pl, uint64_t nr_bufs)
Definition: cm.c:894
M0_INTERNAL void m0_sns_cm_rebalance_sw_onwire_fop_fini(void)
Definition: sw_onwire_fop.c:81
struct m0_chan sb_wait
Definition: cm.h:141
m0_time_t sc_last_status_print_time
Definition: cm.h:257
static struct m0_sns_cm * scm
Definition: cm.c:64
M0_INTERNAL int m0_sns_cm_setup(struct m0_cm *cm)
Definition: cm.c:487
M0_INTERNAL size_t m0_sns_cm_buffer_pool_provision(struct m0_net_buffer_pool *bp, size_t bufs_nr)
Definition: cm.c:548
m0_cm_op
Definition: cm.h:37
M0_INTERNAL void m0_sns_cm_rebalance_sw_onwire_fop_init(void)
Definition: sw_onwire_fop.c:63
struct m0_sns_cm_buf_pool sc_ibp
Definition: cm.h:227
M0_INTERNAL int m0_sns_cm_buf_attach(struct m0_net_buffer_pool *bp, struct m0_cm_cp *cp)
Definition: cm.c:810
struct m0_pools_common * rc_pc
Definition: cm.h:202
m0_time_t sc_stop_time
Definition: cm.h:255
static struct m0_cob_domain * cdom
Definition: xform.c:55
Definition: sock.c:887
static struct m0_cm * cm
Definition: cm.c:63
M0_INTERNAL void m0_sns_cm_repair_trigger_fop_init(void)
Definition: trigger_fop.c:55
int(* sch_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.h:153
enum m0_cm_op sc_op
Definition: cm.h:209
M0_INTERNAL void m0_sns_cm_ha_msg(struct m0_cm *cm, struct m0_ha_msg *msg, int rc)
Definition: cm.c:756
static struct m0_sns_cm_ag * sag
Definition: cm.c:66
M0_INTERNAL enum sns_repair_state m0_sns_cm_fid_repair_done(struct m0_fid *gfid, struct m0_reqh *reqh, enum m0_pool_nd_state device_state)
Definition: cm.c:187
struct m0_mutex sc_file_ctx_mutex
Definition: cm.h:271
m0_time_t sc_start_time
Definition: cm.h:249
M0_INTERNAL int m0_sns_cm_start(struct m0_cm *cm)
Definition: cm.c:641
uint32_t sc_repair_done
Definition: cm.h:243
M0_INTERNAL void m0_sns_cm_stop(struct m0_cm *cm)
Definition: cm.c:716
m0_pool_nd_state
Definition: pool_machine.h:57
m0_sns_cm_local_unit_type
Definition: cm.h:128
m0_sns_cm_op
Definition: cm.h:103
M0_INTERNAL uint64_t m0_sns_cm_cp_buf_nr(struct m0_net_buffer_pool *bp, uint64_t data_seg_nr)
Definition: cm.c:795
static struct m0_fid cob_fid
Definition: net.c:116
struct m0_sns_cm_ag_iter sc_ag_it
Definition: cm.h:222
M0_INTERNAL void m0_sns_cm_buffer_pools_prune(struct m0_cm *cm)
M0_INTERNAL int m0_sns_cm_prepare(struct m0_cm *cm)
Definition: cm.c:561
M0_INTERNAL int m0_sns_cm_rm_init(struct m0_sns_cm *scm)
Definition: cm.c:451
bool(* sch_ag_is_relevant)(struct m0_sns_cm *scm, struct m0_sns_cm_file_ctx *fctx, uint64_t group)
Definition: cm.h:176
Definition: msg.h:115
Definition: reqh.h:94
Definition: dump.c:103
Definition: chan.h:229
uint64_t(* sch_ag_unit_end)(const struct m0_pdclust_layout *pl)
Definition: cm.h:170
static void group(void)
Definition: sm.c:386
struct m0_cob_domain * sc_cob_dom
Definition: cm.h:217
M0_INTERNAL struct m0_net_buffer * m0_sns_cm_buffer_get(struct m0_net_buffer_pool *bp, size_t colour)
M0_INTERNAL void m0_sns_cm_repair_sw_onwire_fop_init(void)
Definition: sw_onwire_fop.c:63
M0_INTERNAL void m0_sns_cm_buf_wait(struct m0_sns_cm_buf_pool *sbp, struct m0_fom *fom)
Definition: cm.c:803
Definition: fom.h:481
M0_INTERNAL void m0_sns_cm_type_deregister(void)
Definition: cm.c:404
M0_INTERNAL void m0_sns_cm_rebalance_trigger_fop_fini(void)
Definition: trigger_fop.c:42
M0_INTERNAL bool m0_sns_is_peer(struct m0_cm *cm, struct m0_reqh_service_ctx *ctx)
Definition: cm.c:542
struct m0_reqh reqh
Definition: rm_foms.c:48
struct m0_net_buffer_pool sb_bp
Definition: cm.h:135
Definition: fid.h:38
M0_INTERNAL uint64_t m0_sns_cm_data_seg_nr(struct m0_sns_cm *scm, struct m0_pdclust_layout *pl)
Definition: cm.c:845
uint64_t sc_ibp_reserved_nr
Definition: cm.h:237
size_t * sc_total_read_size
Definition: cm.h:259
Definition: cm.h:166
m0_sns_cm_status
Definition: cm.h:119
M0_INTERNAL void m0_sns_cm_buffer_put(struct m0_net_buffer_pool *bp, struct m0_net_buffer *buf, uint64_t colour)
M0_INTERNAL int m0_sns_cm_type_register(void)
Definition: cm.c:394
M0_INTERNAL void m0_sns_cm_cancel_reservation(struct m0_sns_cm *scm, size_t nr_bufs)
Definition: cm.c:926
struct m0_sns_cm_rm_ctx sc_rm_ctx
Definition: cm.h:274
M0_INTERNAL void m0_sns_cm_print_status(struct m0_sns_cm *scm)
Definition: cm.c:742
M0_INTERNAL int m0_sns_cm_fail_dev_log(struct m0_cm *cm, enum m0_pool_nd_state state)
Definition: cm.c:605
struct m0_cm sc_base
Definition: cm.h:206
M0_INTERNAL int64_t m0_sns_cm_incoming_reserve_bufs(struct m0_sns_cm *scm, const struct m0_cm_ag_id *id)
Definition: cm.c:859
static struct m0_sns_cm_file_ctx fctx
Definition: net.c:55
struct m0_sns_cm_iter sc_it
Definition: cm.h:220
M0_INTERNAL struct m0_cm_cp * m0_sns_cm_cp_alloc(struct m0_cm *cm)
Definition: cm.c:410
static struct bulkio_params * bp
Definition: bulkio_ut.c:44
Definition: cm.h:105
Definition: nucleus.c:42
struct m0_fid gfid
Definition: dir.c:626
M0_INTERNAL void m0_sns_cm_fini(struct m0_cm *cm)
Definition: cm.c:773
int(* sch_ag_setup)(struct m0_sns_cm_ag *sag, struct m0_pdclust_layout *pl)
Definition: cm.h:180
Definition: mutex.h:47
M0_INTERNAL void m0_sns_cm_repair_trigger_fop_fini(void)
Definition: trigger_fop.c:43
M0_INTERNAL void m0_sns_cm_complete(struct m0_cm *cm)
bool(* sch_is_cob_failed)(struct m0_poolmach *pm, uint32_t cob_index)
Definition: cm.h:188
int(* sch_cob_locate)(struct m0_sns_cm *scm, struct m0_cob_domain *cdom, struct m0_poolmach *pm, const struct m0_fid *cob_fid)
Definition: cm.h:183
M0_INTERNAL void m0_sns_cm_rm_fini(struct m0_sns_cm *scm)
Definition: cm.c:670
const struct m0_sns_cm_helpers * sc_helpers
Definition: cm.h:215
int32_t rc
Definition: trigger_fop.h:47
M0_INTERNAL int m0_sns_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:938
Definition: ag.h:49
M0_INTERNAL void m0_sns_cm_reserve_space(struct m0_sns_cm *scm, size_t nr_bufs)
Definition: cm.c:916
size_t * sc_total_write_size
Definition: cm.h:260
static uint nr_bufs