Skip to content

DAOS-19591 container: avoid false sluggish EC boundary warning - #19015

Merged
daltonbohning merged 1 commit into
masterfrom
lxz/cont_agg_eph_sync
Sep 8, 2026
Merged

daltonbohning merged 1 commit into
masterfrom
lxz/cont_agg_eph_sync

Conversation

@liuxuezhao

Copy link
Copy Markdown
Contributor

A new container service leader loads the EC aggregation boundary from rdb, which can be far behind the current time. The first comparison of the tracked epoch against the newly reported minimum then shows a large gap and triggers a bogus "Sluggish EC boundary reporting" warning.

Record the time when the leader starts tracking a container and only warn when the leader has been tracking it at least as long as the observed epoch gap, so a gap that predates this leader is not reported as a stall.

Steps for the author:

  • Commit message follows the guidelines.
  • Appropriate Features or Test-tag pragmas were used.
  • Appropriate Functional Test Stages were run.
  • At least two positive code reviews including at least one code owner from each category referenced in the PR.
  • Testing is complete. If necessary, forced-landing label added and a reason added in a comment.

After all prior steps are complete:

  • Gatekeeper requested (daos-gatekeeper added as a reviewer).

A new container service leader loads the EC aggregation boundary from
rdb, which can be far behind the current time. The first comparison of
the tracked epoch against the newly reported minimum then shows a large
gap and triggers a bogus "Sluggish EC boundary reporting" warning.

Record the time when the leader starts tracking a container and only
warn when the leader has been tracking it at least as long as the
observed epoch gap, so a gap that predates this leader is not reported
as a stall.

Signed-off-by: Xuezhao Liu <xuezhao.liu@hpe.com>
@liuxuezhao
liuxuezhao requested review from a team as code owners September 4, 2026 09:48
@github-actions

github-actions Bot commented Sep 4, 2026

Copy link
Copy Markdown

Ticket title is 'Aurora daos_user: engine printing continuously in log "cont_agg_eph_sync() 66e9ae82/2416cc43: Sluggish EC boundary report from rank 117, 165933 Seconds." '
Status is 'In Progress'
Labels: 'ALCF'
https://daosio.atlassian.net/browse/DAOS-19591

Comment thread src/container/srv_container.c
@liuxuezhao
liuxuezhao requested a review from a team September 8, 2026 06:18
@daltonbohning daltonbohning added the release-3.0.0 Targeted for release 3.0.0 label Sep 8, 2026
@daltonbohning
daltonbohning merged commit da16283 into master Sep 8, 2026
39 checks passed
@daltonbohning
daltonbohning deleted the lxz/cont_agg_eph_sync branch September 8, 2026 15:15
mchaarawi added a commit that referenced this pull request Oct 16, 2026
…#19304)

A reintegrated rank that gets the VOS container after the leader's last
boundary refresh never starts EC aggregation: it waits for a refresh to
set sc_ec_agg_eph_valid, while its eph 0 report pins the leader's
min_eph to ea_rdb_eph == ea_current_eph, so cont_agg_eph_sync() skips
the refresh as unchanged. The boundary is stuck for the whole pool and
space is not reclaimed until all engines restart.

Treat an eph 0 report as a request for the boundary and re-send it in
the next cont_agg_eph_sync() round even if min_eph did not change.

Also suppress the false "Sluggish EC boundary reporting" warning for
boundary jumps that predate this leader (backport of #19015).

Features: container rebuild

Signed-off-by: Mohamad Chaarawi <mohamad.chaarawi@hpe.com>
mchaarawi added a commit that referenced this pull request Oct 16, 2026
…#19304)

A reintegrated rank that gets the VOS container after the leader's last
boundary refresh never starts EC aggregation: it waits for a refresh to
set sc_ec_agg_eph_valid, while its eph 0 report pins the leader's
min_eph to ea_rdb_eph == ea_current_eph, so cont_agg_eph_sync() skips
the refresh as unchanged. The boundary is stuck for the whole pool and
space is not reclaimed until all engines restart.

Treat an eph 0 report as a request for the boundary and re-send it in
the next cont_agg_eph_sync() round even if min_eph did not change.

Also suppress the false "Sluggish EC boundary reporting" warning for
boundary jumps that predate this leader (backport of #19015).

Features: container rebuild

Signed-off-by: Mohamad Chaarawi <mohamad.chaarawi@hpe.com>
liuxuezhao pushed a commit that referenced this pull request Oct 19, 2026
…#19304)

A reintegrated rank that gets the VOS container after the leader's last
boundary refresh never starts EC aggregation: it waits for a refresh to
set sc_ec_agg_eph_valid, while its eph 0 report pins the leader's
min_eph to ea_rdb_eph == ea_current_eph, so cont_agg_eph_sync() skips
the refresh as unchanged. The boundary is stuck for the whole pool and
space is not reclaimed until all engines restart.

Treat an eph 0 report as a request for the boundary and re-send it in
the next cont_agg_eph_sync() round even if min_eph did not change.

Also suppress the false "Sluggish EC boundary reporting" warning for
boundary jumps that predate this leader (backport of #19015).

Features: container rebuild

Signed-off-by: Mohamad Chaarawi <mohamad.chaarawi@hpe.com>
liuxuezhao added a commit that referenced this pull request Oct 23, 2026
After a target is reintegrated its EC aggregation boundary restarts
from zero and the container shard stays paused until the leader pushes
the boundary again. That push never comes in two cases:

1. The rank's report of a zero epoch is ignored by the leader because
   ds_cont_leader_update_track_eph() only ever raises the per-rank
   value, so the global minimum does not change and
   cont_agg_eph_sync() skips the unchanged boundary forever.
2. If a target (SSD) of a live engine was evicted and reintegrated,
   ds_cont_tgt_ec_eph_query_ult() sees min_ec_agg_eph == 0 with a
   non-zero last reported epoch and skips the report entirely, so the
   leader does not even see the zero.

Leader side: take a zero report as the rank's current value, so that a
zero minimum tells that some target waits for the boundary. While that
is the case, re-push the boundary every 30 seconds even if it is
unchanged, once rebuild is done and reclaim is enabled. The pushed
boundary cannot regress since the minimum is still raised to the rdb
epoch.
Rank side: always report a zero minimum epoch so the leader learns that
a target of this rank waits for the boundary.

Also fix the false "Sluggish EC boundary reporting" warning (#19015 on
master): only warn when the epoch gap is not larger than the period
observed by this leader (since it started tracking the container, or
since rebuild ended / reclaim was enabled), a gap inherited from rdb at
leader step-up is not a real stall.

Signed-off-by: Xuezhao Liu <xuezhao.liu@hpe.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

release-3.0.0 Targeted for release 3.0.0

Development

Successfully merging this pull request may close these issues.

4 participants