Motr  M0
req.h
Go to the documentation of this file.
1 /* -*- C -*- */
2 /*
3  * Copyright (c) 2016-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_REQ_H__
26 #define __MOTR_DIX_REQ_H__
27 
80 #include "fid/fid.h" /* m0_fid */
81 #include "sm/sm.h" /* m0_sm */
82 #include "pool/pool_machine.h" /* m0_poolmach_versions */
83 #include "dix/layout.h" /* m0_dix_layout */
84 #include "dix/req_internal.h" /* m0_dix_idxop_ctx */
85 
86 /* Import */
87 struct m0_bufvec;
88 struct m0_dix_ldesc;
89 struct m0_dtx;
90 struct m0_dix_meta_req;
91 struct m0_dix_cli;
92 struct m0_cas_req;
93 
107 };
108 
110 struct m0_dix {
111  struct m0_fid dd_fid;
113 };
114 
136  uint32_t sc_reps_nr;
137  bool sc_stop;
138  bool sc_done;
139  uint32_t sc_pos;
140 };
141 
144  uint32_t sca_nr;
145 };
146 
155  uint32_t drs_nr;
156  uint32_t drs_pos;
157 };
158 
167  uint32_t nrs_res_nr;
169 };
170 
186 } M0_XCA_ENUM;
187 
188 struct m0_dix_req {
190  struct m0_sm dr_sm;
216  uint32_t dr_indices_nr;
230  uint64_t dr_items_nr;
234  const struct m0_bufvec *dr_keys;
238  const struct m0_bufvec *dr_vals;
240  struct m0_dtx *dr_dtx;
255  uint32_t *dr_recs_nr;
257  uint32_t dr_flags;
258 
261 };
262 
267  int dgr_rc;
269  struct m0_buf dgr_val;
270 };
271 
278  struct m0_buf dnr_key;
280  struct m0_buf dnr_val;
281 };
282 
284 M0_INTERNAL void m0_dix_req_init(struct m0_dix_req *req,
285  struct m0_dix_cli *cli,
286  struct m0_sm_group *grp);
287 
294 M0_INTERNAL void m0_dix_mreq_init(struct m0_dix_req *req,
295  struct m0_dix_cli *cli,
296  struct m0_sm_group *grp);
297 
301 M0_INTERNAL void m0_dix_req_lock(struct m0_dix_req *req);
302 
306 M0_INTERNAL void m0_dix_req_unlock(struct m0_dix_req *req);
307 
311 M0_INTERNAL bool m0_dix_req_is_locked(const struct m0_dix_req *req);
312 
319 M0_INTERNAL int m0_dix_req_wait(struct m0_dix_req *req, uint64_t states,
320  m0_time_t to);
321 
339 M0_INTERNAL int m0_dix_create(struct m0_dix_req *req,
340  const struct m0_dix *indices,
341  uint32_t indices_nr,
342  struct m0_dtx *dtx,
343  uint32_t flags);
344 
352 M0_INTERNAL int m0_dix_cctgs_lookup(struct m0_dix_req *req,
353  const struct m0_dix *indices,
354  uint32_t indices_nr);
355 
367 M0_INTERNAL int m0_dix_delete(struct m0_dix_req *req,
368  const struct m0_dix *indices,
369  uint64_t indices_nr,
370  struct m0_dtx *dtx,
371  uint32_t flags);
372 
383 M0_INTERNAL int m0_dix_put(struct m0_dix_req *req,
384  const struct m0_dix *index,
385  const struct m0_bufvec *keys,
386  const struct m0_bufvec *vals,
387  struct m0_dtx *dtx,
388  uint32_t flags);
389 
400 M0_INTERNAL int m0_dix_get(struct m0_dix_req *req,
401  const struct m0_dix *index,
402  const struct m0_bufvec *keys);
403 
412 M0_INTERNAL void m0_dix_get_rep(const struct m0_dix_req *req,
413  uint64_t idx,
414  struct m0_dix_get_reply *rep);
415 
425 M0_INTERNAL int m0_dix_del(struct m0_dix_req *req,
426  const struct m0_dix *index,
427  const struct m0_bufvec *keys,
428  struct m0_dtx *dtx,
429  uint32_t flags);
430 
451 M0_INTERNAL int m0_dix_next(struct m0_dix_req *req,
452  const struct m0_dix *index,
453  const struct m0_bufvec *start_keys,
454  const uint32_t *recs_nr,
455  uint32_t flags);
456 
467 M0_INTERNAL void m0_dix_next_rep(const struct m0_dix_req *req,
468  uint64_t key_idx,
469  uint64_t val_idx,
470  struct m0_dix_next_reply *rep);
471 
472 
473 M0_INTERNAL void m0_dix_req_cancel(struct m0_dix_req *req);
474 
482 M0_INTERNAL uint32_t m0_dix_next_rep_nr(const struct m0_dix_req *req,
483  uint64_t key_idx);
484 
494 M0_INTERNAL void m0_dix_next_rep_mlock(struct m0_dix_req *req,
495  uint32_t key_idx,
496  uint32_t val_idx);
497 
507 M0_INTERNAL int m0_dix_generic_rc(const struct m0_dix_req *req);
508 
515 M0_INTERNAL int m0_dix_item_rc(const struct m0_dix_req *req,
516  uint64_t idx);
517 
521 M0_INTERNAL int m0_dix_req_rc(const struct m0_dix_req *req);
522 
530 M0_INTERNAL uint64_t m0_dix_req_nr(const struct m0_dix_req *req);
531 
540 M0_INTERNAL void m0_dix_get_rep_mlock(struct m0_dix_req *req, uint64_t idx);
541 
548 M0_INTERNAL void m0_dix_req_fini(struct m0_dix_req *req);
549 
556 M0_INTERNAL void m0_dix_req_fini_lock(struct m0_dix_req *req);
557 
561 M0_INTERNAL int m0_dix_desc_set(struct m0_dix *dix,
562  const struct m0_dix_ldesc *desc);
563 
567 M0_INTERNAL int m0_dix_copy(struct m0_dix *dst, const struct m0_dix *src);
568 
574 M0_INTERNAL void m0_dix_fini(struct m0_dix *dix);
575 
576 M0_INTERNAL int m0_dix_sm_conf_init(void);
577 M0_INTERNAL void m0_dix_sm_conf_fini(void);
578 
581 #endif /* __MOTR_DIX_REQ_H__ */
582 
583 /*
584  * Local variables:
585  * c-indentation-style: "K&R"
586  * c-basic-offset: 8
587  * tab-width: 8
588  * fill-column: 80
589  * scroll-step: 1
590  * End:
591  */
592 /*
593  * vim: tabstop=8 shiftwidth=8 noexpandtab textwidth=80 nowrap
594  */
static m0_bindex_t indices[ZEROVEC_UT_SEGS_NR]
Definition: zerovec.c:38
struct m0_cas_next_reply * sc_reps
Definition: req.h:135
struct m0_dix_layout dd_layout
Definition: req.h:112
Definition: dtm.h:554
M0_INTERNAL void m0_dix_get_rep(const struct m0_dix_req *req, uint64_t idx, struct m0_dix_get_reply *rep)
Definition: req.c:2378
struct m0_dix_cli * dr_cli
Definition: req.h:192
int const char const void size_t int flags
Definition: dir.c:328
Definition: req.h:179
uint32_t dr_flags
Definition: req.h:257
static struct m0_bufvec dst
Definition: xform.c:61
uint32_t nrs_res_nr
Definition: req.h:167
struct m0_dix_next_sort_ctx_arr nrs_sctx_arr
Definition: req.h:168
M0_INTERNAL int m0_dix_desc_set(struct m0_dix *dix, const struct m0_dix_ldesc *desc)
Definition: req.c:2596
static struct io_request req
Definition: file.c:100
static struct m0_sm_group * grp
Definition: bytecount.c:38
uint64_t m0_time_t
Definition: time.h:37
M0_INTERNAL void m0_dix_mreq_init(struct m0_dix_req *req, struct m0_dix_cli *cli, struct m0_sm_group *grp)
Definition: req.c:221
M0_INTERNAL int m0_dix_delete(struct m0_dix_req *req, const struct m0_dix *indices, uint64_t indices_nr, struct m0_dtx *dtx, uint32_t flags)
Definition: req.c:1190
void m0_dix_req_cancel(struct m0_dix_req *dreq)
Definition: req.c:1152
struct m0_dix_next_sort_ctx * sca_ctx
Definition: req.h:143
M0_INTERNAL int m0_dix_req_rc(const struct m0_dix_req *req)
Definition: req.c:2489
dix_req_type
Definition: req.h:171
M0_INTERNAL int m0_dix_item_rc(const struct m0_dix_req *req, uint64_t idx)
Definition: req.c:2475
struct m0_dix_rop_ctx * dr_rop
Definition: req.h:244
enum dix_req_type M0_XCA_ENUM
Definition: sm.h:504
struct m0_fop_getxattr_rep * rep
Definition: dir.c:455
M0_INTERNAL void m0_dix_req_fini(struct m0_dix_req *req)
Definition: req.c:2553
struct m0_buf dnr_val
Definition: req.h:280
uint32_t sc_pos
Definition: req.h:139
M0_INTERNAL int m0_dix_copy(struct m0_dix *dst, const struct m0_dix *src)
Definition: req.c:2587
M0_INTERNAL uint64_t m0_dix_req_nr(const struct m0_dix_req *req)
Definition: req.c:2504
Definition: buf.h:37
const struct m0_bufvec * dr_keys
Definition: req.h:234
M0_INTERNAL int m0_dix_next(struct m0_dix_req *req, const struct m0_dix *index, const struct m0_bufvec *start_keys, const uint32_t *recs_nr, uint32_t flags)
Definition: req.c:2415
bool dr_is_meta
Definition: req.h:222
uint32_t drs_nr
Definition: req.h:155
struct m0_cas_next_reply ** drs_reps
Definition: req.h:154
struct m0_sm dr_sm
Definition: req.h:190
struct m0_cas_req * sc_creq
Definition: req.h:134
Definition: req.h:106
struct m0_fid dd_fid
Definition: req.h:111
M0_INTERNAL int m0_dix_get(struct m0_dix_req *req, const struct m0_dix *index, const struct m0_bufvec *keys)
Definition: req.c:2357
Definition: req.h:185
m0_dix_req_state
Definition: req.h:94
struct m0_dix_item * dr_items
Definition: req.h:228
struct m0_dix_idxop_ctx dr_idxop
Definition: req.h:242
struct m0_buf dgr_val
Definition: req.h:269
M0_INTERNAL void m0_dix_req_lock(struct m0_dix_req *req)
Definition: req.c:184
M0_INTERNAL void m0_dix_req_init(struct m0_dix_req *req, struct m0_dix_cli *cli, struct m0_sm_group *grp)
Definition: req.c:228
M0_INTERNAL int m0_dix_req_wait(struct m0_dix_req *req, uint64_t states, m0_time_t to)
Definition: req.c:201
M0_INTERNAL int m0_dix_sm_conf_init(void)
Definition: req.c:2609
M0_INTERNAL void m0_dix_req_fini_lock(struct m0_dix_req *req)
Definition: req.c:2577
M0_INTERNAL int m0_dix_create(struct m0_dix_req *req, const struct m0_dix *indices, uint32_t indices_nr, struct m0_dtx *dtx, uint32_t flags)
Definition: req.c:990
Definition: req.h:181
struct m0_dix_next_resultset dr_rs
Definition: req.h:250
uint32_t drs_pos
Definition: req.h:156
void * dr_sync_datum
Definition: req.h:260
Definition: req.h:183
Definition: fid.h:38
uint64_t dr_items_nr
Definition: req.h:230
M0_INTERNAL void m0_dix_sm_conf_fini(void)
Definition: req.c:2617
struct m0_dtx * dr_dtx
Definition: req.h:240
M0_INTERNAL int m0_dix_del(struct m0_dix_req *req, const struct m0_dix *index, const struct m0_bufvec *keys, struct m0_dtx *dtx, uint32_t flags)
Definition: req.c:2388
Definition: sm.h:301
const struct m0_bufvec * dr_vals
Definition: req.h:238
M0_INTERNAL void m0_dix_req_unlock(struct m0_dix_req *req)
Definition: req.c:190
M0_INTERNAL void m0_dix_get_rep_mlock(struct m0_dix_req *req, uint64_t idx)
Definition: req.c:2509
struct m0_clink dr_clink
Definition: req.h:201
struct m0_dix * dr_indices
Definition: req.h:214
struct m0_sm_ast dr_ast
Definition: req.h:246
enum dix_req_type dr_type
Definition: req.h:248
uint32_t sc_reps_nr
Definition: req.h:136
M0_INTERNAL void m0_dix_next_rep_mlock(struct m0_dix_req *req, uint32_t key_idx, uint32_t val_idx)
Definition: req.c:2519
struct m0_dix_next_results * nrs_res
Definition: req.h:166
M0_INTERNAL void m0_dix_next_rep(const struct m0_dix_req *req, uint64_t key_idx, uint64_t val_idx, struct m0_dix_next_reply *rep)
Definition: req.c:2449
M0_INTERNAL bool m0_dix_req_is_locked(const struct m0_dix_req *req)
Definition: req.c:196
M0_INTERNAL uint32_t m0_dix_next_rep_nr(const struct m0_dix_req *req, uint64_t key_idx)
Definition: req.c:2468
struct m0_pdclust_src_addr src
Definition: fd.c:108
int dgr_rc
Definition: req.h:267
M0_INTERNAL int m0_dix_cctgs_lookup(struct m0_dix_req *req, const struct m0_dix *indices, uint32_t indices_nr)
Definition: req.c:1214
static struct m0_sm_state_descr states[C_NR]
Definition: sm.c:512
M0_INTERNAL int m0_dix_put(struct m0_dix_req *req, const struct m0_dix *index, const struct m0_bufvec *keys, const struct m0_bufvec *vals, struct m0_dtx *dtx, uint32_t flags)
Definition: req.c:2326
uint32_t dr_indices_nr
Definition: req.h:216
M0_INTERNAL void m0_dix_fini(struct m0_dix *dix)
Definition: req.c:2603
Definition: vec.h:145
struct m0_dix_meta_req * dr_meta_req
Definition: req.h:199
Definition: req.h:110
struct m0_dix * dr_orig_indices
Definition: req.h:207
M0_INTERNAL int m0_dix_generic_rc(const struct m0_dix_req *req)
Definition: req.c:2483
struct m0_buf dnr_key
Definition: req.h:278
uint32_t * dr_recs_nr
Definition: req.h:255