-
Notifications
You must be signed in to change notification settings - Fork 306
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
DAOS-4441 Placement: Modify Placement for OS Reintegration #2402
Conversation
Modified the placement API functionality so that now when a reintegration operation is ongoing it will temporarily extend the layout to include the reintegrating targets. Signed-off-by: Peter Fetros <[email protected]>
Test stage Functional completed with status FAILURE. https://build.hpdd.intel.com//job/daos-stack/job/daos/view/change-requests/job/PR-2402/1/execution/node/692/log |
#2284 Needs to be landed first if possible. |
PL_REBUILD, | ||
PL_REINT, | ||
PL_ADD, | ||
}; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It's better to put some comments to explain these ops, that'll be helpful for understanding the code.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
what is the difference between PL_PLACE_EXTENDED and PL_ADD?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Style warning(s) for job https://build.hpdd.intel.com/job/daos-stack/job/daos/job/PR-2402/3/
Please review https://wiki.hpdd.intel.com/display/DC/Coding+Rules
src/placement/jump_map.c
Outdated
* PL_PLACE_EXTENDED calculates an extended layout for use when there | ||
* is a reintegration operation currently ongoing. | ||
* | ||
* PL_REINT calculates the post-reintegration layout for use during |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
(style) trailing whitespace
src/placement/jump_map.c
Outdated
@@ -31,6 +31,27 @@ | |||
#include <daos/pool_map.h> | |||
#include <isa-l.h> | |||
|
|||
|
|||
/* | |||
* These ops determine whether extra information is calculated during |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
(style) trailing whitespace
Test stage checkpatch completed with status FAILURE. https://build.hpdd.intel.com//job/daos-stack/job/daos/view/change-requests/job/PR-2402/3/execution/node/60/log |
Test stage Build RPM on CentOS 7 completed with status UNSTABLE. https://build.hpdd.intel.com//job/daos-stack/job/daos/view/change-requests/job/PR-2402/3/execution/node/209/log |
Signed-off-by: Peter Fetros <[email protected]>
Test stage Build RPM on CentOS 7 completed with status UNSTABLE. https://build.hpdd.intel.com//job/daos-stack/job/daos/view/change-requests/job/PR-2402/4/execution/node/210/log |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Style warning(s) for job https://build.hpdd.intel.com/job/daos-stack/job/daos/job/PR-2402/5/
Please review https://wiki.hpdd.intel.com/display/DC/Coding+Rules
Test stage checkpatch completed with status FAILURE. https://build.hpdd.intel.com//job/daos-stack/job/daos/view/change-requests/job/PR-2402/5/execution/node/60/log |
Test stage Build RPM on Leap 15 completed with status UNSTABLE. https://build.hpdd.intel.com//job/daos-stack/job/daos/view/change-requests/job/PR-2402/5/execution/node/206/log |
Test stage Build RPM on CentOS 7 completed with status UNSTABLE. https://build.hpdd.intel.com//job/daos-stack/job/daos/view/change-requests/job/PR-2402/5/execution/node/209/log |
Test stage Build on Ubuntu 18.04 with Clang completed with status FAILURE. https://build.hpdd.intel.com//job/daos-stack/job/daos/view/change-requests/job/PR-2402/5/execution/node/201/log |
Test stage Build on Leap 15 with Intel-C and TARGET_PREFIX completed with status FAILURE. https://build.hpdd.intel.com//job/daos-stack/job/daos/view/change-requests/job/PR-2402/5/execution/node/202/log |
Test stage Build on CentOS 7 completed with status FAILURE. https://build.hpdd.intel.com//job/daos-stack/job/daos/view/change-requests/job/PR-2402/5/execution/node/259/log |
Test stage Functional completed with status UNSTABLE. https://build.hpdd.intel.com/job/daos-stack/job/daos//view/change-requests/job/PR-2402/6/testReport/(root)/ |
Test stage checkpatch completed with status FAILURE. https://build.hpdd.intel.com//job/daos-stack/job/daos/view/change-requests/job/PR-2402/15/execution/node/57/log |
Fixed several edge cases related to new extended layout sometimes returned during the test. - There was a problem with the new extended layout being returned during the IO test. This was because the IO test was triggering reintegration by making a call to pool_add_target which had not triggered reintegration in the past but was now causing a race between the rebuild process and the IO test. - It was also possible that while choosing the leader during placement, the newly extended shard would be chosen as the leader when it shouldn't have been. Now any shard which is not yet reintegrated will be skipped as the leader. Signed-off-by: Peter Fetros <[email protected]>
OID Test Failure and Some Intermittent Rebuild Failures. These one's I do think are intermittent failures that are affecting everyone. |
Previously failed on rebuild Test 22, This can be found here https://jira.hpdd.intel.com/browse/DAOS-3952. otherwise no failures on run 18. |
Test stage run_test.sh completed with status FAILURE. https://build.hpdd.intel.com//job/daos-stack/job/daos/view/change-requests/job/PR-2402/20/execution/node/389/log |
@@ -139,9 +139,6 @@ obj_shard_open(struct dc_object *obj, unsigned int shard, unsigned int map_ver, | |||
D_GOTO(unlock, rc = -DER_NONEXIST); | |||
} | |||
|
|||
/* XXX could be otherwise for some object classes? */ | |||
D_ASSERT(obj_shard->do_shard == shard); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
In what use case they are not equal?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
In this patches scenario.
When performing online features (reintegration/drain/etc.) we need to return an extended layout containing the shards we're moving data to, that way when we perform concurrent I/O the new writes also go to the targets we're reintegrating.
In this case we need a way keep track of which shards are in the extended layout by giving them the same shard number.
For example
[T1 T2 T3] <- original layout.
[S1 S2 S3] <- shard ordering
[T4 T2 T3] <- new layout after failure and rebuild.
[S1 S2 S3]
[T4 T2 T3 T1] <- for online reintegration, we need to write to everything because of concurrent I/O.
[S1 S2 S3 S1] <- Reintegrating target being reintegrated for shard 1
[T1 T2 T3] <- reintegration complete.
[S1 S2 S3]
for (i = 0; i < *spare_cnt; i++) | ||
D_PRINT("shard %d, spare target rank %d\n", | ||
shard_ids[i], spare_tgt_ranks[i]); | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
that'll leave an empty for loop?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
That was a mistake, thanks for catching it!
int rc = 0; | ||
|
||
grp_map = NULL; | ||
grp_count = NULL; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
could initialize when declaring them
goto out; | ||
|
||
D_ALLOC_ARRAY(grp_map, (layout->ol_nr / 8) + 1); | ||
D_ALLOC_ARRAY(grp_count, layout->ol_grp_nr); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
indeed
grp_count = NULL; | ||
|
||
/* Empty list, no extension needed */ | ||
if (extended_list == extended_list->next || layout->ol_grp_size == 1) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
d_list_empty(extended_list)
max_fail_grp = 0; | ||
|
||
current = extended_list->next; | ||
while (current != extended_list) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
d_list_for_each_safe?
if (max_fail_grp < grp_count[grp]) | ||
max_fail_grp = grp_count[grp]; | ||
} else | ||
d_list_del_init(&f_shard->fs_list); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
style: use braces for all code blocks if any of code blocks of "if{}else" require braces
new_group_size = layout->ol_grp_size + max_fail_grp; | ||
D_ALLOC_ARRAY(new_shards, new_group_size * layout->ol_grp_nr); | ||
if (new_shards == NULL) | ||
return -DER_NOMEM; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
indeed
if (extended_list == extended_list->next || layout->ol_grp_size == 1) | ||
goto out; | ||
|
||
D_ALLOC_ARRAY(grp_map, (layout->ol_nr / 8) + 1); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
no big deal, but we normally use this: (layout->ol_nr + 1)/8, otherwise you got two bytes if nr==8.
|
||
current = extended_list->next; | ||
while (current != extended_list) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
d_list_for_each_entry?
if (new_shards == NULL) | ||
return -DER_NOMEM; | ||
|
||
while (k < layout->ol_nr) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
easier to understand in this way? " for (i = k = 0; k < layout->ol_nr;)"
if we need to set initial value of loop, I think it's cleaner to just use "for" statement
Test stage Functional completed with status FAILURE. https://build.hpdd.intel.com/job/daos-stack/job/daos/job/PR-2402/22/display/redirect |
Test stage Functional_Hardware_Large completed with status FAILURE. https://build.hpdd.intel.com/job/daos-stack/job/daos/job/PR-2402/22/display/redirect |
Test stage Functional completed with status FAILURE. https://build.hpdd.intel.com/job/daos-stack/job/daos/job/PR-2402/23/display/redirect |
Test stage Functional_Hardware_Medium completed with status FAILURE. https://build.hpdd.intel.com/job/daos-stack/job/daos/job/PR-2402/23/display/redirect |
Currently failing Rebuild Test #3.
Di is working on a patch for this issue (DAOS-4623) |
Test stage Functional_Hardware_Large completed with status UNSTABLE. https://build.hpdd.intel.com/job/daos-stack/job/daos//view/change-requests/job/PR-2402/26/testReport/(root)/ |
* DAOS-4441 Placement: Modify Placement for OS Reintegration Modified the placement API functionality so that now when a reintegration operation is ongoing it will temporarily extend the layout to include the reintegrating targets. Fixed several edge cases related to new extended layout sometimes returned during the test. - There was a problem with the new extended layout being returned during the IO test. This was because the IO test was triggering reintegration by making a call to pool_add_target which had not triggered reintegration in the past but was now causing a race between the rebuild process and the IO test. - It was also possible that while choosing the leader during placement, the newly extended shard would be chosen as the leader when it shouldn't have been. Now any shard which is not yet reintegrated will be skipped as the leader. Signed-off-by: Peter Fetros <[email protected]>
Modified the placement API functionality so that now when
a reintegration operation is ongoing it will temporarily extend
the layout to include the reintegrating targets.
Signed-off-by: Peter Fetros [email protected]