Motr  M0
proxy.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_CM_PROXY_H__
26 #define __MOTR_CM_PROXY_H__
27 
28 #include "lib/chan.h"
29 
30 #include "fop/fom_simple.h"
31 #include "rpc/conn.h"
32 #include "rpc/session.h"
33 #include "sm/sm.h"
34 #include "conf/obj.h"
35 
36 #include "cm/sw.h"
37 #include "cm/ag.h"
38 
46 struct m0_cm_cp;
47 
49  M0_PX_INIT, /* 0 */
50  M0_PX_READY, /* 1 */
51  M0_PX_ACTIVE, /* 2 */
52  M0_PX_COMPLETE, /* 3 */
53  M0_PX_STOP, /* 4 */
54  M0_PX_FAILED /* 5 */
55 };
56 
61 struct m0_cm_proxy {
63  uint64_t px_id;
64 
66 
68  struct m0_cm_sw px_sw;
69 
72 
78 
84 
86 
88 
90 
92 
93  bool px_is_done;
94 
96 
99 
101 
103  struct m0_cm *px_cm;
104 
111 
113 
115 
117 
118  const char *px_endpoint;
119 
125 
127 
135 
143 
144  uint64_t px_magic;
145 };
146 
152  uint32_t p_nr;
154  uint32_t *p_count;
155 };
156 
162  struct m0_fop pso_fop;
168 };
169 
170 M0_INTERNAL int m0_cm_proxy_init(struct m0_cm_proxy *pxy, uint64_t px_id,
171  struct m0_cm_ag_id *lo, struct m0_cm_ag_id *hi,
172  const char *endpoint);
173 
174 M0_INTERNAL void m0_cm_proxy_add(struct m0_cm *cm, struct m0_cm_proxy *pxy);
175 
176 M0_INTERNAL void m0_cm_proxy_del(struct m0_cm *cm, struct m0_cm_proxy *pxy);
177 
178 M0_INTERNAL struct m0_cm_proxy *m0_cm_proxy_locate(struct m0_cm *cm,
179  const char *ep);
180 
181 M0_INTERNAL int m0_cm_proxy_update(struct m0_cm_proxy *pxy,
182  struct m0_cm_sw *in_interval,
183  struct m0_cm_sw *out_interval,
184  uint32_t px_status,
186 
187 M0_INTERNAL int m0_cm_proxy_remote_update(struct m0_cm_proxy *proxy,
188  struct m0_cm_sw *in_interval,
189  struct m0_cm_sw *out_interval);
190 
191 M0_INTERNAL void m0_cm_proxy_cp_add(struct m0_cm_proxy *pxy,
192  struct m0_cm_cp *cp);
193 
194 M0_INTERNAL uint64_t m0_cm_proxy_nr(struct m0_cm *cm);
195 
196 M0_INTERNAL bool m0_cm_proxy_agid_is_in_sw(struct m0_cm_proxy *pxy,
197  struct m0_cm_ag_id *id);
198 
199 M0_INTERNAL void m0_cm_proxy_fini(struct m0_cm_proxy *pxy);
200 
201 M0_INTERNAL bool m0_cm_proxy_is_done(const struct m0_cm_proxy *pxy);
202 M0_INTERNAL void m0_cm_proxy_pending_cps_wakeup(struct m0_cm *cm);
203 
204 M0_INTERNAL void m0_cm_proxy_event_handle_register(struct m0_cm_proxy *pxy,
205  struct m0_conf_obj *svc_obj);
206 
207 M0_INTERNAL bool m0_cm_proxy_is_locked(struct m0_cm_proxy *pxy);
208 M0_INTERNAL void m0_cm_proxy_lock(struct m0_cm_proxy *pxy);
209 M0_INTERNAL void m0_cm_proxy_unlock(struct m0_cm_proxy *pxy);
210 
211 M0_INTERNAL bool m0_cm_proxies_ready(const struct m0_cm *cm);
212 
213 M0_INTERNAL int m0_cm_proxy_in_count_alloc(struct m0_cm_proxy_in_count *pcount,
214  uint32_t nr_proxies);
215 M0_INTERNAL void m0_cm_proxy_in_count_free(struct m0_cm_proxy_in_count *pcount);
216 
217 M0_INTERNAL bool m0_cm_proxy_is_updated(struct m0_cm_proxy *proxy,
218  struct m0_cm_sw *in_interval);
219 
220 M0_INTERNAL void m0_cm_proxies_sent_reset(struct m0_cm *cm);
221 
222 M0_TL_DESCR_DECLARE(proxy, M0_EXTERN);
223 M0_TL_DECLARE(proxy, M0_INTERNAL, struct m0_cm_proxy);
224 
225 M0_TL_DESCR_DECLARE(proxy_fail, M0_EXTERN);
226 M0_TL_DECLARE(proxy_fail, M0_INTERNAL, struct m0_cm_proxy);
227 
228 M0_TL_DESCR_DECLARE(proxy_cp, M0_EXTERN);
229 M0_TL_DECLARE(proxy_cp, M0_INTERNAL, struct m0_cm_cp);
230 
233 /* __MOTR_CM_PROXY_H__ */
234 
235 #endif
236 
237 /*
238  * Local variables:
239  * c-indentation-style: "K&R"
240  * c-basic-offset: 8
241  * tab-width: 8
242  * fill-column: 80
243  * scroll-step: 1
244  * End:
245  */
M0_INTERNAL bool m0_cm_proxy_is_done(const struct m0_cm_proxy *pxy)
Definition: proxy.c:615
struct m0_mutex px_mutex
Definition: proxy.h:112
Definition: sw.h:45
M0_INTERNAL void m0_cm_proxy_lock(struct m0_cm_proxy *pxy)
Definition: proxy.c:738
uint64_t m0_time_t
Definition: time.h:37
Definition: cp.h:160
struct m0_cm_sw px_last_sw_onwire_sent
Definition: proxy.h:71
M0_INTERNAL void m0_cm_proxy_unlock(struct m0_cm_proxy *pxy)
Definition: proxy.c:743
struct m0_tl px_pending_cps
Definition: proxy.h:110
M0_INTERNAL bool m0_cm_proxies_ready(const struct m0_cm *cm)
Definition: proxy.c:748
Definition: sm.h:504
M0_INTERNAL bool m0_cm_proxy_is_updated(struct m0_cm_proxy *proxy, struct m0_cm_sw *in_interval)
Definition: proxy.c:390
uint64_t px_magic
Definition: proxy.h:144
int px_update_rc
Definition: proxy.h:98
uint32_t * p_count
Definition: proxy.h:154
struct m0_rpc_session * px_session
Definition: proxy.h:116
static struct m0_cm * cm
Definition: cm.c:63
Definition: sock.c:754
M0_INTERNAL bool m0_cm_proxy_agid_is_in_sw(struct m0_cm_proxy *pxy, struct m0_cm_ag_id *id)
Definition: proxy.c:650
M0_INTERNAL void m0_cm_proxy_cp_add(struct m0_cm_proxy *pxy, struct m0_cm_cp *cp)
Definition: proxy.c:139
struct m0_clink px_ha_link
Definition: proxy.h:134
M0_INTERNAL void m0_cm_proxies_sent_reset(struct m0_cm *cm)
Definition: proxy.c:780
M0_INTERNAL void m0_cm_proxy_event_handle_register(struct m0_cm_proxy *pxy, struct m0_conf_obj *svc_obj)
Definition: proxy.c:726
enum m0_proxy_state px_status
Definition: proxy.h:91
struct m0_sm_ast px_online_ast
Definition: proxy.h:89
const char * px_endpoint
Definition: proxy.h:118
uint64_t px_nr_updates_posted
Definition: proxy.h:95
struct m0_rpc_conn * px_conn
Definition: proxy.h:114
Definition: tlist.h:251
struct m0_cm_sw px_sw
Definition: proxy.h:68
M0_INTERNAL void m0_cm_proxy_del(struct m0_cm *cm, struct m0_cm_proxy *pxy)
Definition: proxy.c:124
bool px_is_done
Definition: proxy.h:93
M0_INTERNAL bool m0_cm_proxy_is_locked(struct m0_cm_proxy *pxy)
Definition: proxy.c:733
M0_INTERNAL int m0_cm_proxy_update(struct m0_cm_proxy *pxy, struct m0_cm_sw *in_interval, struct m0_cm_sw *out_interval, uint32_t px_status, m0_time_t px_epoch)
Definition: proxy.c:327
struct m0_sm_ast px_fail_ast
Definition: proxy.h:87
uint64_t px_id
Definition: proxy.h:63
M0_INTERNAL uint64_t m0_cm_proxy_nr(struct m0_cm *cm)
Definition: proxy.c:643
struct m0_cm_proxy * pso_proxy
Definition: proxy.h:167
bool px_send_final_update
Definition: proxy.h:142
M0_INTERNAL void m0_cm_proxy_in_count_free(struct m0_cm_proxy_in_count *pcount)
Definition: proxy.c:771
uint32_t p_nr
Definition: proxy.h:152
struct m0_cm_sw px_out_interval
Definition: proxy.h:77
M0_TL_DESCR_DECLARE(proxy, M0_EXTERN)
M0_INTERNAL void m0_cm_proxy_fini(struct m0_cm_proxy *pxy)
Definition: proxy.c:627
M0_INTERNAL int m0_cm_proxy_init(struct m0_cm_proxy *proxy, uint64_t px_id, struct m0_cm_ag_id *lo, struct m0_cm_ag_id *hi, const char *endpoint)
Definition: proxy.c:90
M0_INTERNAL int m0_cm_proxy_in_count_alloc(struct m0_cm_proxy_in_count *pcount, uint32_t nr_proxies)
Definition: proxy.c:758
Definition: cm.h:166
M0_TL_DECLARE(proxy, M0_INTERNAL, struct m0_cm_proxy)
struct m0_tlink px_fail_linkage
Definition: proxy.h:126
M0_INTERNAL struct m0_cm_proxy * m0_cm_proxy_locate(struct m0_cm *cm, const char *addr)
Definition: proxy.c:161
struct m0_fop pso_fop
Definition: proxy.h:162
M0_INTERNAL void m0_cm_proxy_pending_cps_wakeup(struct m0_cm *cm)
Definition: proxy.c:663
struct m0_tlink px_linkage
Definition: proxy.h:124
struct m0_cm_ag_id px_last_out_sent
Definition: proxy.h:83
struct m0_sm_ast px_sw_onwire_ast
Definition: proxy.h:85
m0_time_t px_epoch
Definition: proxy.h:65
Definition: mutex.h:47
M0_INTERNAL int m0_cm_proxy_remote_update(struct m0_cm_proxy *proxy, struct m0_cm_sw *in_interval, struct m0_cm_sw *out_interval)
Definition: proxy.c:553
uint32_t px_updates_pending
Definition: proxy.h:100
M0_INTERNAL void m0_cm_proxy_add(struct m0_cm *cm, struct m0_cm_proxy *pxy)
Definition: proxy.c:110
static void hi(void)
Definition: nucleus.c:93
Definition: ag.h:49
Definition: fop.h:79
struct m0_cm * px_cm
Definition: proxy.h:103
m0_proxy_state
Definition: proxy.h:48