Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feature/multiprovider #8427

Draft
wants to merge 154 commits into
base: master
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from 122 commits
Commits
Show all changes
154 commits
Select commit Hold shift + click to select a range
cacd732
DAOS-9623 control: Enable multi-provider in server (#8396)
kjacque Mar 9, 2022
0394f24
Merge branch 'master' into feature/multiprovider
kjacque Mar 9, 2022
06dc8a9
Merge branch 'master' into feature/multiprovider
kjacque Mar 11, 2022
7ddb133
DAOS-9623 agent: Support configurable provider (#8452)
kjacque Mar 15, 2022
1d421ab
Merge branch 'master' into feature/multiprovider
kjacque Mar 15, 2022
7d8861c
Merge branch 'master' into feature/multiprovider
kjacque Mar 18, 2022
ffaa379
DAOS-9928 srv: xstreams for secondary cart contexts (#8413)
NiuYawei Mar 22, 2022
839fbff
Merge branch 'master' into feature/multiprovider
kjacque Mar 22, 2022
1f1d0d3
Merge branch 'master' into feature/multiprovider
kjacque Mar 23, 2022
802e223
Merge branch 'master' into feature/multiprovider
kjacque Mar 30, 2022
c647c56
DAOS-9623 control: Use comma separator for providers (#8578)
kjacque Apr 1, 2022
2c4e7eb
Merge branch 'master' into feature/multiprovider
kjacque Apr 1, 2022
2cbaa40
DAOS-9623 control: Add secondary context count to config (#8516)
kjacque Apr 4, 2022
54593fa
Merge branch 'master' into feature/multiprovider
kjacque Apr 4, 2022
89b906e
DAOS-9623 control: Check multiprovider interfaces (#8580)
kjacque Apr 4, 2022
4e77479
DAOS-9623 agent: Let client specify desired fabric iface (#8619)
kjacque Apr 6, 2022
997ad70
Merge branch 'master' into feature/multiprovider
kjacque Apr 7, 2022
cf1f081
Merge branch 'master' into feature/multiprovider
kjacque Apr 19, 2022
42f9819
Merge branch 'master' into feature/multiprovider
kjacque Apr 26, 2022
e0bb96e
Merge branch 'master' into feature/multiprovider
kjacque Apr 26, 2022
26b6d06
Merge branch 'master' into feature/multiprovider
kjacque May 3, 2022
edc2b76
Merge branch 'master' into feature/multiprovider
kjacque May 11, 2022
fd04661
Merge branch 'master' into feature/multiprovider
kjacque May 17, 2022
514121a
Merge branch 'master' into feature/multiprovider
kjacque May 18, 2022
569c3aa
Merge branch 'master' into feature/multiprovider
kjacque May 19, 2022
984d20b
Merge branch 'master' into feature/multiprovider
kjacque May 24, 2022
5e6311f
Merge branch 'master' into feature/multiprovider
kjacque Jun 3, 2022
b98906a
CART-89 cart: Cart multiprov changes (#8952)
frostedcmos Jun 6, 2022
02bd010
Merge branch 'master' into feature/multiprovider
kjacque Jun 6, 2022
fb77cc6
Merge branch 'master' into feature/multiprovider
kjacque Jun 9, 2022
610dc4e
Merge branch 'master' into feature/multiprovider
kjacque Jun 10, 2022
fb30733
Merge branch 'master' into feature/multiprovider
kjacque Jun 13, 2022
e4a7ce0
Merge branch 'master' into feature/multiprovider
kjacque Jun 14, 2022
b9ed282
DAOS-9928 object: RPC & bulk hanlder for secondary provider (#8974)
NiuYawei Jun 14, 2022
b44dcd1
Merge branch 'master' into feature/multiprovider
kjacque Jun 17, 2022
e9e998f
DAOS-10876: Fix merges from master (#9411)
kjacque Jun 21, 2022
9483a33
CART-89 multiprovider: Add new api to query original src provider (#9…
frostedcmos Jun 23, 2022
dcf5e99
Merge branch 'master' into feature/multiprovider
kjacque Jun 23, 2022
ceb116a
CART-89 multiprovider: Fix issues, add new api (#9485)
frostedcmos Jun 23, 2022
b068f36
DAOS-9928 engine: incorporate new Cart API (#9484)
NiuYawei Jun 27, 2022
954cee8
Merge branch 'master' into feature/multiprovider
kjacque Jun 27, 2022
3fe5b69
CART-89 multi_prov: new api, fixes (#9514)
frostedcmos Jun 29, 2022
5aacc13
Merge branch 'master' into feature/multiprovider
kjacque Jul 6, 2022
10833df
DAOS-10897 control: Add plumbing for secondary URIs (#9483)
kjacque Jul 7, 2022
7fcd5be
CART-89 bug: Fix provider settings (#9644)
frostedcmos Jul 8, 2022
5cda9a7
DAOS-11027 control: Set client secondary provider env (#9559)
kjacque Jul 11, 2022
352712b
Merge branch 'master' into feature/multiprovider
kjacque Jul 11, 2022
635c0ac
DAOS-11038 control: Switch to using provider_idx (#9648)
kjacque Jul 13, 2022
51dbe49
CART-89 multiprov: Auto-tag replacement for secondary providers (#9519)
frostedcmos Jul 15, 2022
12623b7
Merge branch 'master' into feature/multiprovider
kjacque Jul 18, 2022
0404051
Merge branch 'master' into feature/multiprovider
kjacque Jul 22, 2022
f9830cd
Merge branch 'master' into feature/multiprovider
kjacque Aug 1, 2022
388d8ae
Merge branch 'master' into feature/multiprovider
kjacque Aug 8, 2022
b5ea81f
Merge branch 'master' into feature/multiprovider
kjacque Aug 15, 2022
b5bf0df
Merge branch 'master' into feature/multiprovider
kjacque Aug 19, 2022
a1ae454
Merge branch 'master' into feature/multiprovider
kjacque Aug 22, 2022
8d4289a
Merge branch 'master' into feature/multiprovider
kjacque Aug 29, 2022
896a6c2
Merge branch 'master' into feature/multiprovider
kjacque Sep 2, 2022
3dddc64
Merge branch 'master' into feature/multiprovider
kjacque Sep 6, 2022
85f385c
Merge branch 'master' into feature/multiprovider
kjacque Sep 12, 2022
cbd4cf1
Merge branch 'master' into feature/multiprovider
kjacque Sep 19, 2022
d18cb5b
Merge branch 'master' into feature/multiprovider
kjacque Sep 26, 2022
a463f5c
Merge branch 'master' into feature/multiprovider
kjacque Oct 4, 2022
2ae3f0f
Merge branch 'master' into feature/multiprovider
kjacque Oct 11, 2022
20e9fa7
DAOS-11884 cart: Add new API to set a number of remote endpoints (#1…
frostedcmos Oct 13, 2022
780d65b
DAOS-11893 control: Include num ctxs in GetAttachInfo (#10544)
kjacque Oct 14, 2022
854773e
Merge branch 'master' into feature/multiprovider
kjacque Oct 14, 2022
8155934
Merge branch 'master' into feature/multiprovider
kjacque Oct 18, 2022
843a825
Merge branch 'master' into feature/multiprovider
kjacque Oct 24, 2022
493565d
Merge branch 'master' into feature/multiprovider
kjacque Oct 28, 2022
791d795
Merge branch 'master' into feature/multiprovider
kjacque Nov 15, 2022
afaa547
DAOS-12108 cart: Fix segfault over secondary provider (#10860)
frostedcmos Nov 18, 2022
b6979b8
Merge branch 'master' into feature/multiprovider
kjacque Nov 29, 2022
8207c13
DAOS-12111 object: fix race in obj_bulk_inflights() (#10949)
NiuYawei Dec 3, 2022
5a3d955
Merge branch 'master' into feature/multiprovider
kjacque Dec 13, 2022
4f48c63
Merge branch 'master' into feature/multiprovider
kjacque Jan 3, 2023
b5862f4
Merge branch 'master' into feature/multiprovider
kjacque Jan 25, 2023
3080abe
Merge branch 'master' into feature/multiprovider
kjacque Feb 6, 2023
caaf087
Merge branch 'master' into feature/multiprovider
kjacque Feb 10, 2023
b059ab5
Merge branch 'master' into feature/multiprovider
kjacque Feb 23, 2023
8745e29
Merge branch 'master' into feature/multiprovider
kjacque Mar 7, 2023
f209fc8
Merge branch 'master' into feature/multiprovider
kjacque Mar 13, 2023
7361e0d
Merge branch 'master' into feature/multiprovider
kjacque Mar 21, 2023
1184fd6
Merge branch 'master' into feature/multiprovider
kjacque Mar 24, 2023
f06fe3d
Merge branch 'master' into feature/multiprovider
kjacque Mar 28, 2023
31abc38
Merge branch 'master' into feature/multiprovider
kjacque Apr 3, 2023
b9d0596
Merge branch 'master' into feature/multiprovider
kjacque Apr 4, 2023
0465847
Merge branch 'master' into feature/multiprovider
kjacque Apr 4, 2023
9a0a9c2
Merge branch 'master' into feature/multiprovider
kjacque Apr 10, 2023
3222b0a
Merge branch 'master' into feature/multiprovider
kjacque Apr 13, 2023
07e10f6
DAOS-13088 control: Fix provider query with multiprovider (#11936)
kjacque Apr 14, 2023
4ea2394
Merge branch 'master' into feature/multiprovider
kjacque Apr 17, 2023
0f2e046
DAOS-13134 pool: use primary context to do bcast (#11923)
NiuYawei Apr 18, 2023
fd2c538
Merge branch 'master' into feature/multiprovider
kjacque Apr 25, 2023
5f47460
Merge branch 'master' into feature/multiprovider
kjacque May 9, 2023
e2cc532
Merge branch 'master' into feature/multiprovider
kjacque May 16, 2023
153e5e7
Merge branch 'master' into feature/multiprovider
kjacque May 23, 2023
83f24dd
Merge branch 'master' into feature/multiprovider
kjacque May 30, 2023
9839c64
DAOS-13539 control: Fix network related commands for multiprovider (#…
kjacque Jun 2, 2023
adeecf7
Merge branch 'master' into feature/multiprovider
kjacque Jun 5, 2023
578aa37
DAOS-7029 control: Add refresh methods for agent cache (#12370)
kjacque Jun 14, 2023
b36367b
Merge branch 'master' into feature/multiprovider
kjacque Jun 14, 2023
4f3ccef
Merge branch 'master' into feature/multiprovider
kjacque Jun 21, 2023
607f682
Merge branch 'master' into feature/multiprovider
kjacque Jun 26, 2023
3c33a37
Merge branch 'master' into feature/multiprovider
kjacque Jul 6, 2023
cf20d32
Merge branch 'master' into feature/multiprovider
kjacque Jul 10, 2023
a0e4c9b
Merge branch 'master' into feature/multiprovider
kjacque Jul 18, 2023
4374c0c
Merge branch 'master' into feature/multiprovider
kjacque Aug 3, 2023
e8a1981
Merge branch 'master' into feature/multiprovider
kjacque Aug 11, 2023
300afc8
Merge branch 'master' into feature/multiprovider
kjacque Aug 23, 2023
04a8a6d
Merge branch 'master' into feature/multiprovider
kjacque Aug 28, 2023
9e1304f
Merge branch 'master' into feature/multiprovider
kjacque Sep 5, 2023
4483c73
Merge branch 'master' into feature/multiprovider
kjacque Sep 11, 2023
ab04444
Merge branch 'master' into feature/multiprovider
kjacque Sep 21, 2023
566d27a
Merge branch 'master' into feature/multiprovider
kjacque Sep 25, 2023
f41d396
Merge branch 'master' into feature/multiprovider
kjacque Oct 2, 2023
99cc48b
Merge branch 'master' into feature/multiprovider
kjacque Oct 16, 2023
705f624
Merge branch 'master' into feature/multiprovider
kjacque Oct 23, 2023
1388374
Merge branch 'master' into feature/multiprovider
kjacque Oct 31, 2023
6db03d2
Merge branch 'master' into niu/multiprovider-merge
NiuYawei Nov 15, 2023
513815c
Merge branch 'master' into feature/multiprovider
kjacque Dec 8, 2023
1095fe1
Merge branch 'master' into feature/multiprovider
kjacque Dec 12, 2023
06c70a3
Merge branch 'master' into feature/multiprovider
kjacque Dec 20, 2023
474adb0
Merge branch 'master' into feature/multiprovider
kjacque Jan 29, 2024
d271f17
Merge branch 'master' into feature/multiprovider
kjacque Feb 14, 2024
cea3585
Merge branch 'master' into feature/multiprovider
kjacque Mar 19, 2024
a90999e
Merge branch 'master' into feature/multiprovider
kjacque Mar 19, 2024
0a0807a
Fix src/rdb/raft reference
kjacque Mar 19, 2024
98dc057
Merge remote-tracking branch 'origin/master' into niu/multiprovider-m…
NiuYawei Mar 27, 2024
65e76b1
Merge branch 'master' into feature/multiprovider
kjacque Apr 8, 2024
6fe90ac
Merge branch 'master' into feature/multiprovider
kjacque Apr 16, 2024
3e294bc
Merge branch 'master' into feature/multiprovider
kjacque Apr 22, 2024
5cc67c4
Merge remote-tracking branch 'origin/master' into niu/multiprovider-m…
NiuYawei May 15, 2024
4d1db74
Merge pull request #14373 from daos-stack/niu/multiprovider-merge
kjacque May 16, 2024
80136ee
Merge branch 'master' into feature/multiprovider
kjacque May 20, 2024
a4da1e2
Merge branch 'master' into feature/multiprovider
kjacque May 30, 2024
9617c8f
Merge branch 'master' into feature/multiprovider
kjacque Jun 10, 2024
3b1d834
Merge branch 'master' into feature/multiprovider
kjacque Jun 17, 2024
cc9036d
Merge branch 'master' into feature/multiprovider
kjacque Jul 10, 2024
d778b9a
Merge branch 'master' into feature/multiprovider
kjacque Jul 10, 2024
c1bca41
Merge branch 'master' into feature/multiprovider
kjacque Jul 17, 2024
8417661
Merge branch 'master' into feature/multiprovider
kjacque Jul 24, 2024
2c50c30
Merge remote-tracking branch 'origin/master' into niu/multiprovider-m…
NiuYawei Aug 22, 2024
61392e6
Merge pull request #14981 from daos-stack/niu/multiprovider-merge
kjacque Aug 22, 2024
42b9717
Merge remote-tracking branch 'origin/master' into niu/multiprovider/m…
NiuYawei Sep 20, 2024
578d9d0
Merge pull request #15162 from daos-stack/niu/multiprovider/merge-0920
kjacque Sep 20, 2024
f9e4f82
Merge branch 'master' into feature/multiprovider
kjacque Sep 23, 2024
fc3bba5
Merge branch 'master' into feature/multiprovider
kjacque Oct 4, 2024
21c914d
Merge branch 'master' into feature/multiprovider
kjacque Oct 14, 2024
f3c05b4
Merge branch 'master' into feature/multiprovider
kjacque Oct 30, 2024
6f5e9bb
Merge branch 'master' into feature/multiprovider
kjacque Jan 10, 2025
b88b2e3
Merge branch 'master' into feature/multiprovider
kjacque Feb 19, 2025
d10025a
Merge branch 'master' into feature/multiprovider
kjacque Mar 4, 2025
540bb21
Merge branch 'master' into feature/multiprovider
kjacque Mar 10, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 1 addition & 10 deletions src/cart/crt_group.c
Original file line number Diff line number Diff line change
Expand Up @@ -1853,28 +1853,19 @@ crt_group_config_path_set(const char *path)
int
crt_nr_secondary_remote_tags_set(int idx, int num_tags)
{
struct crt_prov_gdata *prov_data;

D_DEBUG(DB_ALL, "secondary_idx=%d num_tags=%d\n", idx, num_tags);

if (idx != 0) {
D_ERROR("Only idx=0 is currently supported\n");
return -DER_NONEXIST;
}

if ((crt_gdata.cg_prov_gdata_secondary == NULL) ||
(idx >= crt_gdata.cg_num_secondary_provs)) {
D_ERROR("Secondary providers not initialized\n");
return -DER_NONEXIST;
}

if (num_tags <= 0) {
D_ERROR("Invalid number of tags: %d\n", num_tags);
return -DER_INVAL;
}

prov_data = &crt_gdata.cg_prov_gdata_secondary[idx];
prov_data->cpg_num_remote_tags = num_tags;
crt_gdata.cg_num_remote_tags = num_tags;

return DER_SUCCESS;
}
Expand Down
3 changes: 2 additions & 1 deletion src/cart/crt_hg_proc.c
Original file line number Diff line number Diff line change
Expand Up @@ -583,7 +583,8 @@ crt_proc_in_common(crt_proc_t proc, crt_rpc_input_t *data)
);
hdr->cch_dst_tag = rpc_priv->crp_pub.cr_ep.ep_tag;

hdr->cch_src_timeout = rpc_priv->crp_timeout_sec;
hdr->cch_src_timeout = rpc_priv->crp_timeout_sec;
hdr->cch_src_is_primary = rpc_priv->crp_src_is_primary;
if (crt_is_service()) {
hdr->cch_src_rank =
crt_grp_priv_get_primary_rank(
Expand Down
4 changes: 4 additions & 0 deletions src/cart/crt_init.c
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,10 @@ crt_lib_init(void)
crt_gdata.cg_inited = 0;
crt_gdata.cg_primary_prov = CRT_PROV_OFI_TCP_RXM;

/* By default set number of secondary remote tags to 1 */
crt_gdata.cg_num_remote_tags = 1;
crt_gdata.cg_last_remote_tag = 0;

d_srand(d_timeus_secdiff(0) + getpid());
start_rpcid = ((uint64_t)d_rand()) << 32;

Expand Down
6 changes: 6 additions & 0 deletions src/cart/crt_internal_types.h
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,12 @@ struct crt_gdata {

ATOMIC uint64_t cg_rpcid; /* rpc id */

/** Last remote tag sent */
uint32_t cg_last_remote_tag;

/** Number of remote tags */
uint32_t cg_num_remote_tags;

/* protects crt_gdata (see the lock order comment on crp_mutex) */
pthread_rwlock_t cg_rwlock;

Expand Down
38 changes: 31 additions & 7 deletions src/cart/crt_rpc.c
Original file line number Diff line number Diff line change
Expand Up @@ -1201,7 +1201,6 @@ crt_req_ep_lc_lookup(struct crt_rpc_priv *rpc_priv, bool *uri_exists)
crt_phy_addr_t uri = NULL;
int rc = 0;
crt_phy_addr_t base_addr = NULL;
struct crt_prov_gdata *prov_data;
int dst_tag;

req = &rpc_priv->crp_pub;
Expand All @@ -1216,13 +1215,12 @@ crt_req_ep_lc_lookup(struct crt_rpc_priv *rpc_priv, bool *uri_exists)
/* For a secondary provider round-robin between all available remote contexts */
if (!crt_gdata.cg_provider_is_primary) {

prov_data = &crt_gdata.cg_prov_gdata_secondary[0];
D_RWLOCK_WRLOCK(&crt_gdata.cg_rwlock);
crt_gdata.cg_last_remote_tag++;
crt_gdata.cg_last_remote_tag %= crt_gdata.cg_num_remote_tags;

D_MUTEX_LOCK(&prov_data->cpg_mutex);
prov_data->cpg_last_remote_tag++;
prov_data->cpg_last_remote_tag %= prov_data->cpg_num_remote_tags;
dst_tag = prov_data->cpg_last_remote_tag;
D_MUTEX_UNLOCK(&prov_data->cpg_mutex);
dst_tag = crt_gdata.cg_last_remote_tag;
D_RWLOCK_UNLOCK(&crt_gdata.cg_rwlock);
}

crt_grp_lc_lookup(grp_priv, ctx->cc_idx,
Expand Down Expand Up @@ -1805,6 +1803,10 @@ crt_rpc_common_hdlr(struct crt_rpc_priv *rpc_priv)
skip_check = true;
}

/* Skip check for secondary provider clients */
if (!rpc_priv->crp_req_hdr.cch_src_is_primary)
skip_check = true;

if ((self_rank != rpc_priv->crp_req_hdr.cch_dst_rank) ||
(crt_ctx->cc_idx != rpc_priv->crp_req_hdr.cch_dst_tag)) {
if (!skip_check) {
Expand Down Expand Up @@ -1926,6 +1928,28 @@ crt_req_src_rank_get(crt_rpc_t *rpc, d_rank_t *rank)
return rc;
}

int
crt_req_src_provider_is_primary(crt_rpc_t *req, bool *result)
{
struct crt_rpc_priv *rpc_priv = NULL;
int rc = 0;

if (req == NULL) {
D_ERROR("req is NULL\n");
D_GOTO(out, rc = -DER_INVAL);
}

if (result == NULL) {
D_ERROR("result is NULL\n");
D_GOTO(out, rc = -DER_INVAL);
}

rpc_priv = container_of(req, struct crt_rpc_priv, crp_pub);
*result = rpc_priv->crp_req_hdr.cch_src_is_primary;
out:
return rc;
}

int
crt_req_dst_rank_get(crt_rpc_t *rpc, d_rank_t *rank)
{
Expand Down
5 changes: 3 additions & 2 deletions src/cart/crt_rpc.h
Original file line number Diff line number Diff line change
Expand Up @@ -66,8 +66,9 @@ struct crt_common_hdr {
/* originator rank in default primary group */
d_rank_t cch_src_rank;
/* destination tag */
uint32_t cch_dst_tag;

uint16_t cch_dst_tag;
/* indicates whether rpc originator intended to send on a primary ctx */
uint32_t cch_src_is_primary : 1;

/* used in crp_reply_hdr to propagate rpc failure back to sender */
/* TODO: workaround for DAOS-13973 */
Expand Down
2 changes: 1 addition & 1 deletion src/container/srv_cli.c
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/**
* (C) Copyright 2017-2021 Intel Corporation.
* (C) Copyright 2017-2022 Intel Corporation.
*
* SPDX-License-Identifier: BSD-2-Clause-Patent
*/
Expand Down
37 changes: 16 additions & 21 deletions src/container/srv_container.c
Original file line number Diff line number Diff line change
Expand Up @@ -1487,12 +1487,10 @@ find_hdls_by_cont_cb(daos_handle_t ih, d_iov_t *key, d_iov_t *val, void *varg)
}

static int cont_close_hdls(struct cont_svc *svc,
struct cont_tgt_close_rec *recs, int nrecs,
crt_context_t ctx);
struct cont_tgt_close_rec *recs, int nrecs);

static int
evict_hdls(struct rdb_tx *tx, struct cont *cont, bool force, struct ds_pool_hdl *pool_hdl,
crt_context_t ctx)
evict_hdls(struct rdb_tx *tx, struct cont *cont, bool force, struct ds_pool_hdl *pool_hdl)
{
struct find_hdls_by_cont_arg arg;
int rc;
Expand All @@ -1518,7 +1516,7 @@ evict_hdls(struct rdb_tx *tx, struct cont *cont, bool force, struct ds_pool_hdl
goto out;
}

rc = cont_close_hdls(cont->c_svc, arg.fha_buf.rb_recs, arg.fha_buf.rb_nrecs, ctx);
rc = cont_close_hdls(cont->c_svc, arg.fha_buf.rb_recs, arg.fha_buf.rb_nrecs);

out:
recs_buf_fini(&arg.fha_buf);
Expand Down Expand Up @@ -1570,11 +1568,11 @@ cont_destroy(struct rdb_tx *tx, struct ds_pool_hdl *pool_hdl, struct cont *cont,
D_GOTO(out_prop, rc = -DER_NO_PERM);
}

rc = evict_hdls(tx, cont, force, NULL /* pool_hdl */, rpc->cr_ctx);
rc = evict_hdls(tx, cont, force, NULL /* pool_hdl */);
if (rc != 0)
goto out_prop;

rc = cont_destroy_bcast(rpc->cr_ctx, cont->c_svc, cont->c_uuid);
rc = cont_destroy_bcast(dss_get_module_info()->dmi_ctx, cont->c_svc, cont->c_uuid);
if (rc != 0)
goto out_prop;

Expand Down Expand Up @@ -2279,7 +2277,7 @@ cont_open(struct rdb_tx *tx, struct ds_pool_hdl *pool_hdl, struct cont *cont, cr

if (flags & (DAOS_COO_EVICT | DAOS_COO_EVICT_ALL)) {
rc = evict_hdls(tx, cont, true /* force */,
(flags & DAOS_COO_EVICT_ALL) ? NULL : pool_hdl, rpc->cr_ctx);
(flags & DAOS_COO_EVICT_ALL) ? NULL : pool_hdl);
if (rc != 0) {
daos_prop_free(prop);
goto out;
Expand Down Expand Up @@ -2451,8 +2449,7 @@ cont_open(struct rdb_tx *tx, struct ds_pool_hdl *pool_hdl, struct cont *cont, cr
}

static int
cont_close_recs(crt_context_t ctx, struct cont_svc *svc,
struct cont_tgt_close_rec recs[], int nrecs)
cont_close_recs(struct cont_svc *svc, struct cont_tgt_close_rec recs[], int nrecs)
{
int i;
int rc = 0;
Expand Down Expand Up @@ -2492,7 +2489,7 @@ cont_close_recs(crt_context_t ctx, struct cont_svc *svc,

static int
cont_close_one_hdl(struct rdb_tx *tx, struct d_hash_table *nhc, struct cont_svc *svc,
crt_context_t ctx, const uuid_t uuid)
const uuid_t uuid)
{
d_iov_t key;
d_iov_t value;
Expand Down Expand Up @@ -2529,8 +2526,7 @@ cont_close_one_hdl(struct rdb_tx *tx, struct d_hash_table *nhc, struct cont_svc

/* Close an array of handles, possibly belonging to different containers. */
static int
cont_close_hdls(struct cont_svc *svc, struct cont_tgt_close_rec *recs,
int nrecs, crt_context_t ctx)
cont_close_hdls(struct cont_svc *svc, struct cont_tgt_close_rec *recs, int nrecs)
{
struct rdb_tx tx;
struct d_hash_table txs_nhc; /* TX per-container number of handles cache (HT). */
Expand All @@ -2544,7 +2540,7 @@ cont_close_hdls(struct cont_svc *svc, struct cont_tgt_close_rec *recs,
" recs[0].hce="DF_U64"\n", DP_CONT(svc->cs_pool_uuid, NULL),
nrecs, DP_UUID(recs[0].tcr_hdl), recs[0].tcr_hce);

rc = cont_close_recs(ctx, svc, recs, nrecs);
rc = cont_close_recs(svc, recs, nrecs);
if (rc != 0) {
D_ERROR(DF_CONT": failed to close %d recs: "DF_RC"\n",
DP_CONT(svc->cs_pool_uuid, NULL), nrecs, DP_RC(rc));
Expand All @@ -2566,7 +2562,7 @@ cont_close_hdls(struct cont_svc *svc, struct cont_tgt_close_rec *recs,
DP_CONT(svc->cs_pool_uuid, NULL), num_tx);

for (i = 0; i < nrecs; i++) {
rc = cont_close_one_hdl(&tx, &txs_nhc, svc, ctx, recs[i].tcr_hdl);
rc = cont_close_one_hdl(&tx, &txs_nhc, svc, recs[i].tcr_hdl);
if (rc != 0) {
D_ERROR(DF_CONT": failed to close handle: "DF_UUID", "DF_RC"\n",
DP_CONT(svc->cs_pool_uuid, NULL), DP_UUID(recs[i].tcr_hdl),
Expand Down Expand Up @@ -2669,11 +2665,11 @@ cont_close(struct rdb_tx *tx, struct ds_pool_hdl *pool_hdl, struct cont *cont,
DP_CONT(cont->c_svc->cs_pool_uuid, in->cci_op.ci_uuid),
DP_UUID(rec.tcr_hdl), rec.tcr_hce);

rc = cont_close_recs(rpc->cr_ctx, cont->c_svc, &rec, 1 /* nrecs */);
rc = cont_close_recs(cont->c_svc, &rec, 1 /* nrecs */);
if (rc != 0)
D_GOTO(out, rc);

rc = cont_close_one_hdl(tx, NULL /* nhc */, cont->c_svc, rpc->cr_ctx, rec.tcr_hdl);
rc = cont_close_one_hdl(tx, NULL /* nhc */, cont->c_svc, rec.tcr_hdl);

/* On success update modify time (except if open specified read-only metadata stats) */
if (rc == 0 && !(chdl.ch_flags & DAOS_COO_RO_MDSTATS))
Expand Down Expand Up @@ -3330,7 +3326,7 @@ cont_query(struct rdb_tx *tx, struct ds_pool_hdl *pool_hdl, struct cont *cont,
if (qbits & DAOS_CO_QUERY_TGT) {
/* need RF if user query cont_info */
qbits |= (DAOS_CO_QUERY_PROP_REDUN_FAC | DAOS_CO_QUERY_PROP_REDUN_LVL);
rc = cont_query_bcast(rpc->cr_ctx, cont, in->cqi_op.ci_pool_hdl,
rc = cont_query_bcast(dss_get_module_info()->dmi_ctx, cont, in->cqi_op.ci_pool_hdl,
in->cqi_op.ci_hdl, out);
if (rc)
return rc;
Expand Down Expand Up @@ -4001,8 +3997,7 @@ close_iter_cb(daos_handle_t ih, d_iov_t *key, d_iov_t *val, void *varg)
* and managed by local container services.
*/
int
ds_cont_close_by_pool_hdls(uuid_t pool_uuid, uuid_t *pool_hdls, int n_pool_hdls,
crt_context_t ctx)
ds_cont_close_by_pool_hdls(uuid_t pool_uuid, uuid_t *pool_hdls, int n_pool_hdls)
{
struct cont_svc *svc;
struct rdb_tx tx;
Expand Down Expand Up @@ -4040,7 +4035,7 @@ ds_cont_close_by_pool_hdls(uuid_t pool_uuid, uuid_t *pool_hdls, int n_pool_hdls,

if (arg.cia_buf.rb_nrecs > 0)
rc = cont_close_hdls(svc, arg.cia_buf.rb_recs,
arg.cia_buf.rb_nrecs, ctx);
arg.cia_buf.rb_nrecs);

out_buf:
recs_buf_fini(&arg.cia_buf);
Expand Down
3 changes: 2 additions & 1 deletion src/container/srv_epoch.c
Original file line number Diff line number Diff line change
Expand Up @@ -310,7 +310,8 @@ ds_cont_snap_create(struct rdb_tx *tx, struct ds_pool_hdl *pool_hdl, struct cont

cont_epoch_op_in_get_data(rpc, CONT_SNAP_CREATE, cont_proto_ver, &snap_eph, &opts);

rc = snap_create_bcast(tx, cont, in->cei_op.ci_hdl, opts, rpc->cr_ctx, &snap_eph);
rc = snap_create_bcast(tx, cont, in->cei_op.ci_hdl, opts, dss_get_module_info()->dmi_ctx,
&snap_eph);
if (rc == 0) {
out->ceo_epoch = snap_eph;
*(daos_epoch_t *)op_val->ov_resvd = snap_eph;
Expand Down
46 changes: 42 additions & 4 deletions src/control/cmd/daos_agent/attachinfo.go
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
//
// (C) Copyright 2020-2021 Intel Corporation.
// (C) Copyright 2020-2022 Intel Corporation.
//
// SPDX-License-Identifier: BSD-2-Clause-Patent
//
Expand All @@ -22,7 +22,8 @@ type dumpAttachInfoCmd struct {
configCmd
ctlInvokerCmd
cmdutil.JSONOutputCmd
Output string `short:"o" long:"output" default:"stdout" description:"Dump output to this location"`
Output string `short:"o" long:"output" default:"stdout" description:"Dump output to this location"`
ProviderIdx *uint `short:"n" long:"provider_idx" description:"Index of provider to fetch (if multiple)"`
}

func (cmd *dumpAttachInfoCmd) Execute(_ []string) error {
Expand Down Expand Up @@ -50,10 +51,21 @@ func (cmd *dumpAttachInfoCmd) Execute(_ []string) error {
return cmd.OutputJSON(resp, err)
}

providerIdx := cmd.cfg.ProviderIdx
if cmd.ProviderIdx != nil {
providerIdx = *cmd.ProviderIdx
}

ranks, err := getServiceRanksForProviderIdx(resp, int(providerIdx))
if err != nil {
return err
}

system := cmd.cfg.SystemName
if resp.System != "" {
system = resp.System
}

/**
* cart/crt_group.c:crt_group_config_save()
*
Expand All @@ -77,11 +89,37 @@ func (cmd *dumpAttachInfoCmd) Execute(_ []string) error {
*/
ew := txtfmt.NewErrWriter(out)
fmt.Fprintf(ew, "name %s\n", system)
fmt.Fprintf(ew, "size %d\n", len(resp.ServiceRanks))
fmt.Fprintf(ew, "size %d\n", len(ranks))
fmt.Fprintln(ew, "all")
for _, psr := range resp.ServiceRanks {
for _, psr := range ranks {
fmt.Fprintf(ew, "%d %s\n", psr.Rank, psr.Uri)
}

return ew.Err
}

func getServiceRanksForProviderIdx(inResp *control.GetAttachInfoResp, idx int) ([]*control.PrimaryServiceRank, error) {
if idx == 0 {
// Primary provider
return inResp.ServiceRanks, nil
}

secIdx := idx - 1
if secIdx < 0 || secIdx >= len(inResp.AlternateClientNetHints) {
return nil, errors.Errorf("provider index must be in range 0 <= idx <= %d", len(inResp.AlternateClientNetHints))
}

hint := inResp.AlternateClientNetHints[secIdx]
ranks := make([]*control.PrimaryServiceRank, 0)
for _, r := range inResp.AlternateServiceRanks {
if r.ProviderIdx == hint.ProviderIdx {
ranks = append(ranks, r)
}
}

if len(ranks) == 0 {
return nil, errors.Errorf("no ranks for provider %q (idx %d)", hint.Provider, idx)
}

return ranks, nil
}
1 change: 1 addition & 0 deletions src/control/cmd/daos_agent/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ type Config struct {
DisableAutoEvict bool `yaml:"disable_auto_evict,omitempty"`
ExcludeFabricIfaces common.StringSet `yaml:"exclude_fabric_ifaces,omitempty"`
FabricInterfaces []*NUMAFabricConfig `yaml:"fabric_ifaces,omitempty"`
ProviderIdx uint `yaml:"provider_idx"`
}

// NUMAFabricConfig defines a list of fabric interfaces that belong to a NUMA
Expand Down
2 changes: 2 additions & 0 deletions src/control/cmd/daos_agent/config_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@ fabric_ifaces:
-
iface: ib3
domain: mlx5_3
provider_idx: 1
`)

badLogMaskCfg := test.CreateTestFile(t, dir, `
Expand Down Expand Up @@ -165,6 +166,7 @@ transport_config:
},
},
},
ProviderIdx: 1,
},
},
} {
Expand Down
Loading