Motr  M0
item_source.c
Go to the documentation of this file.
1 /* -*- C -*- */
2 /*
3  * Copyright (c) 2013-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 #include "lib/misc.h"
24 
25 #include "motr/magic.h"
26 #include "rpc/rpc.h"
27 #include "rpc/rpc_internal.h"
28 
35 M0_TL_DESCR_DEFINE(item_source, "item-source-list", M0_INTERNAL,
36  struct m0_rpc_item_source, ris_tlink, ris_magic,
38 M0_TL_DEFINE(item_source, M0_INTERNAL, struct m0_rpc_item_source);
39 
40 static bool item_source_invariant(const struct m0_rpc_item_source *ris)
41 {
42  return _0C(ris != NULL) &&
44  _0C(ris->ris_name != NULL) &&
45  _0C(ris->ris_ops != NULL) &&
46  _0C(ris->ris_ops->riso_has_item != NULL) &&
47  _0C(ris->ris_ops->riso_get_item != NULL) &&
49  _0C(equi(ris->ris_conn != NULL, item_source_tlink_is_in(ris)));
50 }
51 
53  const char *name,
54  const struct m0_rpc_item_source_ops *ops)
55 {
56  M0_PRE(ris != NULL && name != NULL && ops != NULL &&
57  ops->riso_has_item != NULL && ops->riso_get_item != NULL &&
58  ops->riso_conn_terminating != NULL);
59 
60  M0_SET0(ris);
61  ris->ris_name = name;
62  ris->ris_ops = ops;
63  ris->ris_conn = NULL;
65  item_source_tlink_init(ris);
66 
68 }
69 
71 {
73 
74  item_source_tlink_fini(ris);
75 }
76 
78 {
80  return item_source_tlink_is_in(ris);
81 }
82 
84  struct m0_rpc_item_source *ris)
85 {
86  M0_PRE(conn != NULL);
90  ris->ris_conn = conn;
91  item_source_tlist_add(&conn->c_item_sources, ris);
93 }
94 
96  struct m0_rpc_item_source *ris)
97 {
98  M0_PRE(conn != NULL);
101 
105 }
106 
108 {
109  struct m0_rpc_conn *conn;
110  struct m0_rpc_machine *machine;
111 
113  return;
114 
115  conn = ris->ris_conn;
118 
120 
121  item_source_tlist_del(ris);
122  ris->ris_conn = NULL;
123 
126 }
127 
130 /*
131  * Local variables:
132  * c-indentation-style: "K&R"
133  * c-basic-offset: 8
134  * tab-width: 8
135  * fill-column: 80
136  * scroll-step: 1
137  * End:
138  */
139 /*
140  * vim: tabstop=8 shiftwidth=8 noexpandtab textwidth=80 nowrap
141  */
void m0_rpc_item_source_fini(struct m0_rpc_item_source *ris)
Definition: item_source.c:70
void m0_rpc_item_source_register(struct m0_rpc_conn *conn, struct m0_rpc_item_source *ris)
Definition: item_source.c:95
const struct m0_rpc_item_source_ops * ris_ops
Definition: item_source.h:63
const char * ris_name
Definition: item_source.h:62
#define M0_PRE(cond)
M0_TL_DEFINE(item_source, M0_INTERNAL, struct m0_rpc_item_source)
struct m0_rpc_conn * ris_conn
Definition: item_source.h:64
uint64_t ris_magic
Definition: item_source.h:61
#define NULL
Definition: misc.h:38
void m0_rpc_item_source_deregister(struct m0_rpc_item_source *ris)
Definition: item_source.c:107
void m0_rpc_item_source_init(struct m0_rpc_item_source *ris, const char *name, const struct m0_rpc_item_source_ops *ops)
Definition: item_source.c:52
#define M0_SET0(obj)
Definition: misc.h:64
struct m0_tl c_item_sources
Definition: conn.h:314
struct m0_rpc_item *(* riso_get_item)(struct m0_rpc_item_source *ris, m0_bcount_t max_payload_size)
Definition: item_source.h:99
#define equi(a, b)
Definition: misc.h:297
M0_INTERNAL bool m0_rpc_machine_is_locked(const struct m0_rpc_machine *machine)
Definition: rpc_machine.c:565
struct m0_rpc_machine * c_rpc_machine
Definition: conn.h:278
M0_INTERNAL void m0_rpc_machine_unlock(struct m0_rpc_machine *machine)
Definition: rpc_machine.c:558
const char * name
Definition: trace.c:110
#define M0_ASSERT(cond)
#define M0_POST(cond)
struct m0_rpc_conn conn
Definition: fsync.c:96
M0_TL_DESCR_DEFINE(item_source, "item-source-list", M0_INTERNAL, struct m0_rpc_item_source, ris_tlink, ris_magic, M0_RPC_ITEM_SOURCE_MAGIC, M0_RPC_ITEM_SOURCE_HEAD_MAGIC)
struct m0_rpc_machine machine
Definition: mdstore.c:58
static bool item_source_invariant(const struct m0_rpc_item_source *ris)
Definition: item_source.c:40
M0_INTERNAL bool m0_rpc_machine_is_not_locked(const struct m0_rpc_machine *machine)
Definition: rpc_machine.c:573
M0_INTERNAL void m0_rpc_machine_lock(struct m0_rpc_machine *machine)
Definition: rpc_machine.c:551
void(* riso_conn_terminating)(struct m0_rpc_item_source *ris)
Definition: item_source.h:111
#define _0C(exp)
Definition: assert.h:311
struct m0_fom_ops ops
Definition: io_foms.c:623
bool m0_rpc_item_source_is_registered(const struct m0_rpc_item_source *ris)
Definition: item_source.c:77
void m0_rpc_item_source_register_locked(struct m0_rpc_conn *conn, struct m0_rpc_item_source *ris)
Definition: item_source.c:83
bool(* riso_has_item)(const struct m0_rpc_item_source *ris)
Definition: item_source.h:85