Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
3 changes: 2 additions & 1 deletion src/include/daos/common.h
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/**
* (C) Copyright 2015-2024 Intel Corporation.
* (C) Copyright 2025 Hewlett Packard Enterprise Development LP
* (C) Copyright 2025-2026 Hewlett Packard Enterprise Development LP
*
* SPDX-License-Identifier: BSD-2-Clause-Patent
*/
Expand Down Expand Up @@ -927,6 +927,7 @@ enum {
#define DAOS_CHK_FAIL_REPORT_POOL2 (DAOS_FAIL_UNIT_TEST_GROUP_LOC | 0xb8)
#define DAOS_CHK_ENGINE_DEATH (DAOS_FAIL_UNIT_TEST_GROUP_LOC | 0xb9)
#define DAOS_CHK_VERIFY_CONT_SHARDS (DAOS_FAIL_UNIT_TEST_GROUP_LOC | 0xba)
#define DAOS_CHK_ORPHAN_POOL_SHARD (DAOS_FAIL_UNIT_TEST_GROUP_LOC | 0xbb)

#define DAOS_MGMT_FAIL_CREATE_QUERY (DAOS_FAIL_UNIT_TEST_GROUP_LOC | 0xe0)

Expand Down
42 changes: 31 additions & 11 deletions src/mgmt/srv_pool.c
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/*
* (C) Copyright 2016-2024 Intel Corporation.
* (C) Copyright 2025 Hewlett Packard Enterprise Development LP
* (C) Copyright 2025-2026 Hewlett Packard Enterprise Development LP
*
* SPDX-License-Identifier: BSD-2-Clause-Patent
*/
Expand Down Expand Up @@ -154,7 +154,7 @@ ds_mgmt_tgt_pool_create_ranks(uuid_t pool_uuid, d_rank_list_t *rank_list, size_t
}

static int
ds_mgmt_pool_svc_create(uuid_t pool_uuid, int ntargets, const char *group, d_rank_list_t *ranks,
ds_mgmt_pool_svc_create(uuid_t pool_uuid, const char *group, d_rank_list_t *ranks,
daos_prop_t *prop, d_rank_list_t **svc_list, size_t domains_nr,
uint32_t *domains)
{
Expand All @@ -170,10 +170,11 @@ ds_mgmt_create_pool(uuid_t pool_uuid, const char *group, d_rank_list_t *targets,
size_t nvme_size, size_t meta_size, daos_prop_t *prop, d_rank_list_t **svcp,
int domains_nr, uint32_t *domains)
{
d_rank_list_t *pg_ranks = NULL;
d_rank_list_t *pg_targets = NULL;
int rc;
int rc_cleanup;
d_rank_list_t *pg_ranks = NULL;
d_rank_list_t *pg_targets = NULL;
d_rank_list_t *dummy = NULL;
int rc;
int rc_cleanup;

D_DEBUG(DB_MGMT, DF_UUID ": create scm/meta/nvme sizes %ld/%ld/%ld\n", DP_UUID(pool_uuid),
scm_size, meta_size, nvme_size);
Expand Down Expand Up @@ -213,16 +214,33 @@ ds_mgmt_create_pool(uuid_t pool_uuid, const char *group, d_rank_list_t *targets,
D_GOTO(out, rc = -DER_OOG);
}

rc = ds_mgmt_tgt_pool_create_ranks(pool_uuid, targets, scm_size, nvme_size, meta_size);
/* Extend the targets list to simulate orphan pool shard. */
if (DAOS_FAIL_CHECK(DAOS_CHK_ORPHAN_POOL_SHARD)) {
d_rank_t rank;
int i;

rank = daos_fail_value_get();
if (!d_rank_in_rank_list(targets, rank)) {
dummy = d_rank_list_alloc(targets->rl_nr + 1);
D_ASSERT(dummy != NULL);

for (i = 0; i < targets->rl_nr; i++)
dummy->rl_ranks[i] = targets->rl_ranks[i];
dummy->rl_ranks[targets->rl_nr] = rank;
}
}

rc = ds_mgmt_tgt_pool_create_ranks(pool_uuid, dummy != NULL ? dummy : targets, scm_size,
nvme_size, meta_size);
if (rc != 0) {
DL_ERROR(rc, DF_UUID ": creating pool on ranks failed", DP_UUID(pool_uuid));
goto out_ranks;
}

D_INFO(DF_UUID": creating targets on ranks succeeded\n", DP_UUID(pool_uuid));
D_INFO(DF_UUID ": creating targets on %d ranks succeeded\n", DP_UUID(pool_uuid),
dummy != NULL ? dummy->rl_nr : targets->rl_nr);

rc = ds_mgmt_pool_svc_create(pool_uuid, targets->rl_nr, group, targets, prop, svcp,
domains_nr, domains);
rc = ds_mgmt_pool_svc_create(pool_uuid, group, targets, prop, svcp, domains_nr, domains);
if (rc) {
D_ERROR("create pool "DF_UUID" svc failed: rc "DF_RC"\n",
DP_UUID(pool_uuid), DP_RC(rc));
Expand All @@ -233,7 +251,8 @@ ds_mgmt_create_pool(uuid_t pool_uuid, const char *group, d_rank_list_t *targets,
* round of RPCs.
*/
out_ranks:
rc_cleanup = ds_mgmt_tgt_pool_destroy_ranks(pool_uuid, targets);
rc_cleanup =
ds_mgmt_tgt_pool_destroy_ranks(pool_uuid, dummy != NULL ? dummy : targets);
if (rc_cleanup)
D_ERROR(DF_UUID": failed to clean up failed pool: "DF_RC"\n",
DP_UUID(pool_uuid), DP_RC(rc_cleanup));
Expand All @@ -247,6 +266,7 @@ ds_mgmt_create_pool(uuid_t pool_uuid, const char *group, d_rank_list_t *targets,
out:
d_rank_list_free(pg_targets);
d_rank_list_free(pg_ranks);
d_rank_list_free(dummy);
D_DEBUG(DB_MGMT, "create pool "DF_UUID": "DF_RC"\n", DP_UUID(pool_uuid),
DP_RC(rc));
return rc;
Expand Down
Loading