30 #define M0_TRACE_SUBSYSTEM M0_TRACE_SUBSYS_DIX 41 #define NOENT (-ENOENT) 42 #define PROCESSING_IS_DONE (-ENOKEY) 79 if (
ctx->sc_pos >=
ctx->sc_reps_nr)
87 if (
ctx->sc_reps_nr != 0 &&
88 (
ctx->sc_done ||
ctx->sc_pos >=
ctx->sc_reps_nr))
90 if (
ctx->sc_stop ||
ctx->sc_reps_nr == 0)
93 if ((*rep)->cnp_rc ==
NOENT) {
106 const uint32_t *recs_nr)
109 uint32_t start_pos = 0;
113 if (
ctx->sc_reps_nr == 0) {
118 for (
i = 0;
i < key_idx && pos <
ctx->sc_reps_nr;
i++) {
120 start_pos += recs_nr[
i];
126 for (; pos < start_pos && pos <
ctx->sc_reps_nr; pos++);
129 ctx->sc_stop =
false;
153 uint32_t done_cnt = 0;
154 uint32_t nokey_cnt = 0;
164 for (ctx_id = 0; ctx_id < ctxarr->
sca_nr; ctx_id++) {
165 ctx = &ctx_arr[ctx_id];
178 *ret_idx =
ctx->sc_pos;
182 if (done_cnt == ctxarr->
sca_nr || nokey_cnt == ctxarr->
sca_nr)
186 for (ctx_id = 0; ctx_id < ctxarr->
sca_nr; ctx_id++) {
187 ctx = &ctx_arr[ctx_id];
198 uint32_t key_idx, uint32_t
nr)
232 ctx = &ctxs[ctx_id++];
236 if (
ctx->sc_reps_nr == 0)
241 for (
i = 0;
i < ctx_id;
i++)
245 for (
i = 0;
i <
ctx->sc_reps_nr;
i++)
261 const uint32_t *recs_nr;
262 uint64_t start_keys_nr;
268 recs_nr =
req->dr_recs_nr;
269 start_keys_nr =
req->dr_items_nr;
272 ctxs_nr =
req->dr_rop->dg_cas_reqs_nr;
278 for (
i = 0;
rc == 0 &&
i < start_keys_nr;
i++)
293 for (key_id = 0; !
done &&
rc == 0 && key_id < start_keys_nr; key_id++) {
298 for (ctx_id = 0; ctx_id < ctxs_nr; ctx_id++)
301 while (
rc == 0 &&
i < recs_nr[key_id]) {
315 for (ctx_id = 0; ctx_id < ctxs_nr; ctx_id++)
343 uint32_t start_keys_nr,
409 reps =
res->drs_reps;
410 reps[
res->drs_pos++] =
rep;
413 #undef M0_TRACE_SUBSYSTEM M0_INTERNAL void m0_cas_req_fini(struct m0_cas_req *req)
static bool sc_rep_le(const struct m0_cas_next_reply *a, const struct m0_cas_next_reply *b)
static int sc_rep_get(struct m0_dix_next_sort_ctx *ctx, struct m0_cas_next_reply **rep)
struct m0_cas_next_reply * sc_reps
static void sc_next(struct m0_dix_next_sort_ctx *ctx)
static bool sc_min_val_get(struct m0_dix_next_sort_ctx_arr *ctxarr, struct m0_cas_next_reply **rep, struct m0_dix_next_sort_ctx **ret_ctx, uint32_t *ret_idx)
#define M0_ALLOC_ARR(arr, nr)
struct m0_dix_next_sort_ctx_arr nrs_sctx_arr
static int dix_data_load(struct m0_dix_req *req, struct m0_dix_next_resultset *rs)
static struct io_request req
M0_INTERNAL int m0_dix_next_result_prepare(struct m0_dix_req *req)
struct m0_dix_next_sort_ctx * sca_ctx
static int sc_key_pos_set(struct m0_dix_next_sort_ctx *ctx, uint32_t key_idx, const uint32_t *recs_nr)
#define PROCESSING_IS_DONE
struct m0_fop_getxattr_rep * rep
M0_INTERNAL void m0_dix_rs_fini(struct m0_dix_next_resultset *rs)
struct m0_cas_req crp_creq
static bool sc_rep_eq(const struct m0_cas_next_reply *a, const struct m0_cas_next_reply *b)
return M0_ERR(-EOPNOTSUPP)
struct m0_cas_next_reply ** drs_reps
struct m0_cas_req * sc_creq
M0_INTERNAL void m0_cas_next_rep(const struct m0_cas_req *req, uint32_t idx, struct m0_cas_next_reply *rep)
static int sc_rep_cmp(const struct m0_cas_next_reply *a, const struct m0_cas_next_reply *b)
static void sc_result_add(struct m0_dix_next_sort_ctx *key_ctx, uint32_t cidx, struct m0_dix_next_resultset *rs, uint32_t key_id, struct m0_cas_next_reply *rep)
M0_INTERNAL void m0_buf_free(struct m0_buf *buf)
static struct fdmi_ctx ctx
static int sc_init(struct m0_dix_next_sort_ctx_arr *ctx_arr, uint32_t nr)
static long long min(long long a, long long b)
M0_INTERNAL uint64_t m0_cas_req_nr(const struct m0_cas_req *req)
#define M0_FI_ENABLED(tag)
M0_INTERNAL int m0_dix_rs_init(struct m0_dix_next_resultset *rs, uint32_t start_keys_nr, uint32_t sctx_nr)
static int64_t min64(int64_t a, int64_t b)
static int dix_rs_vals_alloc(struct m0_dix_next_resultset *rs, uint32_t key_idx, uint32_t nr)
M0_INTERNAL void m0_cas_rep_mlock(const struct m0_cas_req *req, uint64_t idx)
struct m0_dix_next_results * nrs_res
#define m0_tl_for(name, head, obj)
static void sc_fini(struct m0_dix_next_sort_ctx_arr *ctx_arr)