Motr  M0
rconfc.h
Go to the documentation of this file.
1 /* -*- C -*- */
2 /*
3  * Copyright (c) 2015-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_CONF_RCONFC_H__
26 #define __MOTR_CONF_RCONFC_H__
27 
28 #include "lib/mutex.h"
29 #include "lib/chan.h"
30 #include "lib/tlist.h"
31 #include "fop/fop.h" /* m0_fop */
32 #include "sm/sm.h"
33 #include "conf/confc.h"
34 #include "ha/entrypoint_fops.h" /* m0_ha_entrypoint_rep */
35 
36 struct m0_rconfc;
37 struct m0_rpc_machine;
38 struct m0_rpc_item;
39 
180 
204 };
205 
209  bool run;
211  } rx_ast;
212  int rx_rc;
213 };
214 
215 typedef void (*m0_rconfc_cb_t)(struct m0_rconfc *rconfc);
216 
220 struct m0_rconfc {
247  struct m0_sm rc_sm;
253  uint64_t rc_ver;
258  uint32_t rc_quorum;
259 
260  /* Private part. Consumer is not welcomed to access the data below. */
261 
279 
295 
316 
327  int rc_datum;
333  struct m0_tl rc_herd;
335  struct m0_tl rc_active;
349 
351  void *rc_qctx;
436 };
437 
455 M0_INTERNAL int m0_rconfc_init(struct m0_rconfc *rconfc,
456  const struct m0_fid *profile,
457  struct m0_sm_group *sm_group,
458  struct m0_rpc_machine *rmach,
459  m0_rconfc_cb_t expired_cb,
460  m0_rconfc_cb_t ready_cb);
461 
493 M0_INTERNAL int m0_rconfc_start(struct m0_rconfc *rconfc);
494 
499 M0_INTERNAL int m0_rconfc_start_wait(struct m0_rconfc *rconfc,
500  uint64_t timeout_ns);
501 
502 static inline int m0_rconfc_start_sync(struct m0_rconfc *rconfc)
503 {
505 }
506 
518 M0_INTERNAL void m0_rconfc_stop(struct m0_rconfc *rconfc);
519 
523 M0_INTERNAL void m0_rconfc_stop_sync(struct m0_rconfc *rconfc);
524 
528 M0_INTERNAL void m0_rconfc_fini(struct m0_rconfc *rconfc);
529 
530 M0_INTERNAL void m0_rconfc_lock(struct m0_rconfc *rconfc);
531 M0_INTERNAL void m0_rconfc_unlock(struct m0_rconfc *rconfc);
532 
542 M0_INTERNAL uint64_t m0_rconfc_ver_max_read(struct m0_rconfc *rconfc);
543 
549 M0_INTERNAL void m0_rconfc_fatal_cb_set(struct m0_rconfc *rconfc,
550  m0_rconfc_cb_t cb);
551 
559 M0_INTERNAL int m0_rconfc_confd_endpoints(struct m0_rconfc *rconfc,
560  const char ***eps);
561 
569 M0_INTERNAL int m0_rconfc_rm_endpoint(struct m0_rconfc *rconfc, char **ep);
570 
576 M0_INTERNAL void m0_rconfc_rm_fid(struct m0_rconfc *rconfc, struct m0_fid *out);
577 
591 M0_INTERNAL bool m0_rconfc_is_preloaded(struct m0_rconfc *rconfc);
592 
597 M0_INTERNAL bool m0_rconfc_reading_is_allowed(const struct m0_rconfc *rconfc);
598 
600 #endif /* __MOTR_CONF_RCONFC_H__ */
601 
602 /*
603  * Local variables:
604  * c-indentation-style: "K&R"
605  * c-basic-offset: 8
606  * tab-width: 8
607  * fill-column: 80
608  * scroll-step: 1
609  * End:
610  */
M0_INTERNAL int m0_rconfc_confd_endpoints(struct m0_rconfc *rconfc, const char ***eps)
Definition: rconfc.c:3081
struct m0_sm rc_sm
Definition: rconfc.h:247
struct m0_tl rc_herd
Definition: rconfc.h:333
m0_rconfc_cb_t rc_fatal_cb
Definition: rconfc.h:315
struct m0_clink rc_conductor_clink
Definition: rconfc.h:418
void * rc_qctx
Definition: rconfc.h:351
struct rconfc_load_ctx rc_rx
Definition: rconfc.h:399
bool rc_stopping
Definition: rconfc.h:355
M0_INTERNAL void m0_rconfc_fatal_cb_set(struct m0_rconfc *rconfc, m0_rconfc_cb_t cb)
Definition: rconfc.c:3067
struct m0_sm_ast rc_load_fini_ast
Definition: rconfc.h:403
struct m0_clink rc_ha_entrypoint_cl
Definition: rconfc.h:339
char * rc_local_conf
Definition: rconfc.h:390
struct m0_ha_entrypoint_rep rc_ha_entrypoint_rep
Definition: rconfc.h:420
struct m0_sm_ast rc_cctx_fini_ast
Definition: rconfc.h:331
M0_INTERNAL int m0_rconfc_init(struct m0_rconfc *rconfc, const struct m0_fid *profile, struct m0_sm_group *sm_group, struct m0_rpc_machine *rmach, m0_rconfc_cb_t expired_cb, m0_rconfc_cb_t ready_cb)
Definition: rconfc.c:2860
const m0_time_t M0_TIME_NEVER
Definition: time.c:108
bool rc_quorum_decision_is_made
Definition: rconfc.h:435
uint32_t rc_ha_entrypoint_retries
Definition: rconfc.h:425
struct rconfc_load_ctx::rconfc_load_ast rx_ast
void(* m0_rconfc_cb_t)(struct m0_rconfc *rconfc)
Definition: rconfc.h:215
M0_INTERNAL void m0_rconfc_rm_fid(struct m0_rconfc *rconfc, struct m0_fid *out)
Definition: rconfc.c:3122
uint32_t rc_quorum
Definition: rconfc.h:258
M0_INTERNAL void m0_rconfc_fini(struct m0_rconfc *rconfc)
Definition: rconfc.c:3009
M0_INTERNAL void m0_rconfc_stop(struct m0_rconfc *rconfc)
Definition: rconfc.c:2978
M0_INTERNAL void m0_rconfc_unlock(struct m0_rconfc *rconfc)
Definition: rconfc.c:2855
M0_INTERNAL uint64_t m0_rconfc_ver_max_read(struct m0_rconfc *rconfc)
Definition: rconfc.c:3052
struct m0_confc_gate_ops rc_gops
Definition: rconfc.h:323
struct m0_rpc_machine * rc_rmach
Definition: rconfc.h:318
Definition: sm.h:504
uint32_t rc_sm_state_on_abort
Definition: rconfc.h:431
M0_INTERNAL bool m0_rconfc_is_preloaded(struct m0_rconfc *rconfc)
Definition: rconfc.c:3135
struct m0_sm_ast rc_load_ast
Definition: rconfc.h:401
Definition: sock.c:754
uint64_t rc_ver
Definition: rconfc.h:253
struct m0_clink rc_ha_update_cl
Definition: rconfc.h:346
struct m0_clink rc_herd_cl
Definition: rconfc.h:341
struct m0_confc rc_phony
Definition: rconfc.h:378
bool rc_rlock_conflict
Definition: rconfc.h:360
m0_rconfc_state
Definition: rconfc.h:190
struct m0_mutex rc_herd_lock
Definition: rconfc.h:410
struct m0_clink rc_unpinned_cl
Definition: rconfc.h:337
Definition: tlist.h:251
struct m0_tl rc_active
Definition: rconfc.h:335
struct m0_chan rc_herd_chan
Definition: rconfc.h:416
struct m0_fid rc_profile
Definition: rconfc.h:392
M0_INTERNAL int m0_rconfc_start(struct m0_rconfc *rconfc)
Definition: rconfc.c:2928
static int m0_rconfc_start_sync(struct m0_rconfc *rconfc)
Definition: rconfc.h:502
Definition: chan.h:229
M0_INTERNAL bool m0_rconfc_reading_is_allowed(const struct m0_rconfc *rconfc)
Definition: rconfc.c:1241
struct m0_sm_group rx_grp
Definition: rconfc.h:207
M0_INTERNAL void m0_rconfc_lock(struct m0_rconfc *rconfc)
Definition: rconfc.c:2841
M0_INTERNAL int m0_rconfc_rm_endpoint(struct m0_rconfc *rconfc, char **ep)
Definition: rconfc.c:3106
M0_INTERNAL int m0_rconfc_start_wait(struct m0_rconfc *rconfc, uint64_t timeout_ns)
Definition: rconfc.c:2942
m0_rconfc_cb_t rc_expired_cb
Definition: rconfc.h:278
static struct m0_fid profile
Definition: rconfc.c:49
Definition: fid.h:38
struct m0_ha_nvec rc_nvec
Definition: rconfc.h:348
struct m0_confc rc_confc
Definition: rconfc.h:235
struct m0_sm_ast rc_ast
Definition: rconfc.h:325
M0_INTERNAL void m0_rconfc_stop_sync(struct m0_rconfc *rconfc)
Definition: rconfc.c:2995
Definition: sm.h:301
void * rc_rlock_ctx
Definition: rconfc.h:353
static struct m0_rconfc * rconfc(struct m0_client *m0c)
Definition: client_init.c:310
struct m0_sm_ast rc_stop_ast
Definition: rconfc.h:329
struct m0_thread thread
Definition: rconfc.h:210
#define out(...)
Definition: gen.c:41
int rc_datum
Definition: rconfc.h:327
Definition: mutex.h:47
m0_rconfc_cb_t rc_ready_cb
Definition: rconfc.h:294