Repository navigation
Conversation
|
Ticket title is 'FIO crc mismatch detected on 4x node IB config while running HSN cable pulls test' |
57eeaa1 to
92d88df
Compare
|
Test stage Functional on EL 9 completed with status FAILURE. https://jenkins-3.daos.hpc.amslabs.hpecorp.net//job/daos-stack/job/daos/view/change-requests/job/PR-19227/3/execution/node/1355/log |
cb9634f to
fdba1f9
Compare
|
Test stage Functional on EL 9 completed with status FAILURE. https://jenkins-3.daos.hpc.amslabs.hpecorp.net//job/daos-stack/job/daos/view/change-requests/job/PR-19227/5/execution/node/1355/log |
fdba1f9 to
acdd437
Compare
|
Test stage Functional on EL 9 completed with status FAILURE. https://jenkins-3.daos.hpc.amslabs.hpecorp.net//job/daos-stack/job/daos/view/change-requests/job/PR-19227/6/execution/node/1361/log |
4978f8d to
701593c
Compare
|
Test stage Functional on EL 9 completed with status FAILURE. https://jenkins-3.daos.hpc.amslabs.hpecorp.net//job/daos-stack/job/daos/view/change-requests/job/PR-19227/11/execution/node/1356/log |
cad90f8 to
2869b3b
Compare
| * For old backend, we cannot use the container's global stable epoch to defense | ||
| * potential inflight IO. Then directly wait for 1 minute on the first container. | ||
| */ | ||
| if (rpt->rt_remaining_wait_time > 0) { |
There was a problem hiding this comment.
I assume this container wouldn't be checked for twice, so we don't need to check/set rt_remaining_wait_time at all for 2.6 container?
There was a problem hiding this comment.
2.6 does not support global stable epoch, so need such logic for 2.6
2869b3b to
b1a2157
Compare
|
Test stage Functional on EL 9 completed with status FAILURE. https://jenkins-3.daos.hpc.amslabs.hpecorp.net//job/daos-stack/job/daos/view/change-requests/job/PR-19227/15/execution/node/1350/log |
b1a2157 to
b589d74
Compare
|
Test stage Functional on EL 9 completed with status FAILURE. https://jenkins-3.daos.hpc.amslabs.hpecorp.net/job/daos-stack/job/daos/job/PR-19227/16/display/redirect |
3617998 to
9ebdc6f
Compare
4c60248 to
27b7deb
Compare
| continue; | ||
|
|
||
| /* Skip non-healthy one. */ | ||
| if (target->ta_comp.co_status != PO_COMP_ST_UP && |
There was a problem hiding this comment.
why UP should be removed from here?
There was a problem hiding this comment.
It is not removed, still be there at L199.
| DSHR_CORRUPT = 5, | ||
| DSHR_NEED_COMMIT = DTX_ST_MAX + 100, | ||
| DSHR_NEED_RETRY, | ||
| DSHR_IGNORE, |
There was a problem hiding this comment.
style: I think it's confusing (and easy to make mistake) for vos_dtx_check() to return two different sets of value, would be better to add a new output paramter to vos_dtx_check(), but we can do this cleanup later on master
|
|
||
| int | ||
| dtx_abort(struct ds_cont_child *cont, struct dtx_entry *dte, daos_epoch_t epoch) | ||
| dtx_abort(struct ds_cont_child *cont, struct dtx_entry *dte, daos_epoch_t epoch, uint32_t ver) |
There was a problem hiding this comment.
I'm trying to under the ver parameter, it's current pool map version and can be different with dte::dte_ver right? Why is zero passed in some cases?
There was a problem hiding this comment.
Yes, the pool map version can be changed according to the latest pool map. The dte::dte_ver is the version when the DTX is generated. Zero version means that the caller wants to abort related entry by force.
| return 0; | ||
| } | ||
|
|
||
| again: |
There was a problem hiding this comment.
why do we close/open again after sleep?
There was a problem hiding this comment.
It is possible that someone may destroy the container during our sleep for wait. Then refreshing global stable epoch for such container will be stopped. If we do not put the reference, we may wait/block there until timeout.
| goto out; | ||
| } | ||
| } | ||
|
|
There was a problem hiding this comment.
Is it safe to remove this?
There was a problem hiding this comment.
I think so. Need @liuxuezhao to confirm.
|
Test stage Functional Hardware Large MD on SSD completed with status FAILURE. https://jenkins-3.daos.hpc.amslabs.hpecorp.net//job/daos-stack/job/daos/view/change-requests/job/PR-19227/25/execution/node/1629/log |
27b7deb to
40b2780
Compare
|
Test stage Functional Hardware Medium MD on SSD completed with status FAILURE. https://jenkins-3.daos.hpc.amslabs.hpecorp.net//job/daos-stack/job/daos/view/change-requests/job/PR-19227/25/execution/node/1734/log |
1. On each target, before scanning the container shard for rebuild, the logic will wait its global stable epoch (per container based) to exceed rebuild epoch. It will guarantee that all the inflight IO result that are triggered before rebuild start is visible to the subsequent rebuild logic whether on DTX leader or not. 2. Before handling some modification on DTX leader, need to check whether the epoch for current modification is newer than pool's rebuild epoch or not. If not, then return -DER_UPDATE_AGAIN to the client that will retry the modification sometime later. 3. In theory, it is possible that when exclude some engine, related ULT maybe trying to abort a DTX because of some failure happened during local modification (but related modification has succeeded on remote targets). Related DTX_ABORT RPC has been sent out but not been received or processed by related remote targets. Under such case, the DTX leader is switched because of related engine is exlcuded. And then DTX resync is triggered by new DTX leader who may regard such DTX as committable since all alive targets claim 'PREPARED'. Then the new DTX leader will make different decision that conflict with old DTX leader did. That may cause related DTX to be aborted on some targets but committed on the others, as to data inconsistency among related redundancy group. The new logic forbids to abort DTX from old DTX leader to avoid such inconsistency. 4. If the modification is in rebuilding/reintegrating, then related modification will use synchronous DTX to refresh related global stable epoch more quickly. 5. During DTX resync, the DTX CHECK RPC should not be sent to the target that will be reintegrated (with PO_COMP_ST_UP). Because such target may have removed related DTX entries. Add server side environment variable DAOS_REBUILD_CONTINUE_ON_TIMEOUT to control whether continue rebuild process or not if got timeout when wait for global stable epoch. It is false by default and rebuild will failout (and restart) when got timeout. If explicitly set it as true, then there is risk of data lost in subsequent rebuild process if race with inflight IO. It is a temporary solution. Signed-off-by: Fan Yong <fan.yong@hpe.com> Co-authored-by: Xuezhao Liu <xuezhao.liu@hpe.com> Co-authored-by: Wang Shilong <shilong.wang@hpe.com>
40b2780 to
9600127
Compare
|
Test stage Functional on EL 9 completed with status FAILURE. https://jenkins-3.daos.hpc.amslabs.hpecorp.net//job/daos-stack/job/daos/view/change-requests/job/PR-19227/26/execution/node/1356/log |
| D_GOTO(close, rc); | ||
| } | ||
|
|
||
| rc = vos_cont_get_global_stable_epoch(coh, &gse); |
There was a problem hiding this comment.
probably skip wait for reclaim/fail_reclaim.
On each target, before scanning the container shard for rebuild,
the logic will wait its global stable epoch (per container based)
to exceed rebuild epoch. It will guarantee that all the inflight
IO result that are triggered before rebuild start is visible to
the subsequent rebuild logic whether on DTX leader or not.
Before handling some modification on DTX leader, need to check
whether the epoch for current modification is newer than pool's
rebuild epoch or not. If not, then return -DER_UPDATE_AGAIN to
the client that will retry the modification sometime later.
In theory, it is possible that when exclude some engine, related
ULT maybe trying to abort a DTX because of some failure happened
during local modification (but related modification has succeeded
on remote targets). Related DTX_ABORT RPC has been sent out but
not been received or processed by related remote targets. Under
such case, the DTX leader is switched because of related engine
is exlcuded. And then DTX resync is triggered by new DTX leader
who may regard such DTX as committable since all alive targets
claim 'PREPARED'. Then the new DTX leader will make different
decision that conflict with old DTX leader did. That may cause
related DTX to be aborted on some targets but committed on the
others, as to data inconsistency among related redundancy group.
The new logic forbids to abort DTX from old DTX leader to avoid
such inconsistency.
If the modification is in rebuilding/reintegrating, then related
modification will use synchronous DTX to refresh related global
stable epoch more quickly.
During DTX resync, the DTX CHECK RPC should not be sent to the
target that will be reintegrated (with PO_COMP_ST_UP). Because
such target may have removed related DTX entries.
Signed-off-by: Fan Yong fan.yong@hpe.com
Co-authored-by: Xuezhao Liu xuezhao.liu@hpe.com
Co-authored-by: Wang Shilong shilong.wang@hpe.com
Steps for the author:
After all prior steps are complete: