Repository navigation
Conversation
|
Ticket title is 'Improve DAOS format/startup workflow with explicit system start' |
8623f37 to
dbee278
Compare
|
Test stage Test RPMs 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-19255/2/execution/node/1291/log |
|
Test stage Test RPMs on Leap 15 completed with status FAILURE. https://jenkins-3.daos.hpc.amslabs.hpecorp.net//job/daos-stack/job/daos/view/change-requests/job/PR-19255/2/execution/node/1304/log |
dbee278 to
51c54c6
Compare
c5ffb49 to
0971682
Compare
|
Test stage Test RPMs on Leap 15 completed with status FAILURE. https://jenkins-3.daos.hpc.amslabs.hpecorp.net/job/daos-stack/job/daos/job/PR-19255/4/display/redirect |
0971682 to
3420d29
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-19255/5/execution/node/1475/log |
|
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-19255/6/execution/node/1434/log |
|
Test stage Functional Cluster Box 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-19255/6/execution/node/1721/log |
|
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-19255/6/execution/node/1860/log |
|
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-19255/6/execution/node/1917/log |
3420d29 to
8ec4ada
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-19255/7/execution/node/1852/log |
8ec4ada to
4ef6d2f
Compare
|
Test stage Build 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-19255/8/execution/node/555/log |
|
Test stage Build on Leap 15 completed with status FAILURE. https://jenkins-3.daos.hpc.amslabs.hpecorp.net//job/daos-stack/job/daos/view/change-requests/job/PR-19255/8/execution/node/554/log |
4ef6d2f to
d459450
Compare
|
Test stage Functional on EL 9 completed with status UNSTABLE. https://jenkins-3.daos.hpc.amslabs.hpecorp.net/job/daos-stack/job/daos//view/change-requests/job/PR-19255/9/testReport/ |
|
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-19255/9/execution/node/1864/log |
Engines will hold after format until released by dmg system initialize or extend. The server needs an RPC to release held engines, and the management service needs one that tells a rank whether to start. Signed-off-by: Michael MacDonald <mjmac@vectorsolutionsgroup.com>
Engines launch themselves after format, so a reboot restarts ranks the admin stopped on purpose and a fresh system starts before anyone asked. Hold them until dmg system initialize or extend releases them, or until the management service says the rank should restart; a dmg-stopped rank stays Stopped, out of the group map, until dmg system start. Signed-off-by: Michael MacDonald <mjmac@vectorsolutionsgroup.com>
Engines no longer launch themselves after format, so the harness, NLT and the tests that format storage must start them explicitly, and servers added to a running system join through dmg system extend. New tests cover the behaviour itself and the legacy configuration. Signed-off-by: Michael MacDonald <mjmac@vectorsolutionsgroup.com>
Features: control server pool Signed-off-by: Michael MacDonald <mjmac@vectorsolutionsgroup.com>
d459450 to
90e6366
Compare
|
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-19255/10/execution/node/1967/log |
|
Test stage Functional Hardware Medium MD on SSD completed with status UNSTABLE. https://jenkins-3.daos.hpc.amslabs.hpecorp.net/job/daos-stack/job/daos//view/change-requests/job/PR-19255/10/testReport/ |
|
Known failures:
|
|
oof this is a huge PR |
tanabarr
left a comment
There was a problem hiding this comment.
first round of review comments
| // SystemExtendReq supplies system extend parameters. | ||
| message SystemExtendReq | ||
| { | ||
| string sys = 1; // DAOS system name |
There was a problem hiding this comment.
nit: shares the same message fields as system init, embed shared message type
There was a problem hiding this comment.
IMO this is fine as-is. Trying to combine things like that is a false economy that is undermined over time as things evolve and diverge, and we wind up with frankenmessages that have different fields used depending on the RPC.
| uint32 daos_version = 7; // DAOS version that system supported. | ||
| } | ||
|
|
||
| // EnginePreflightReq asks what a server needs to know before it launches engines. |
There was a problem hiding this comment.
nit: clarity of comment could be improved, currently the check is just whether to start and why if not
There was a problem hiding this comment.
The name of the method reflects the longer-term intent. You're right that currently it only checks to see if an engine should start, but the plan is to leverage this to rework the CR mode switch logic so that we don't have the weird start/join/restart/join dance that can lead to mode bugs (e.g. https://daosio.atlassian.net/browse/DAOS-18622).
| continue | ||
| } | ||
| if rank, _ := ei.GetRank(); !rank.Equals(e.Rank) { | ||
| h.log.Noticef("instance %d: preflight result for rank %s ignored; now rank %s and asking again", |
There was a problem hiding this comment.
When would this rank update happen? does this case cover the initial assignment or later change? does the "asking again" statement refer to the next time to the next time runPreflight() gets called on the timer? Presumably the next time it's run the request gets sent with the new updated rank in the request?
There was a problem hiding this comment.
The log message should be fixed. What this guards against is a race where a preflight request is made for rank X, and then the engine instance is erased/reformatted before the response comes back. A new preflight request will be made for the reformatted instance, so we can ignore this stale response.
| Returns: | ||
| tuple: the host as a NodeSet and its rank | ||
| """ | ||
| host = NodeSet(self.server_managers[0].hosts.difference(self.mgmt_svc_replicas)[-1]) |
There was a problem hiding this comment.
If you wanted to sprinkle some randomness
| host = NodeSet(self.server_managers[0].hosts.difference(self.mgmt_svc_replicas)[-1]) | |
| host = NodeSet( | |
| self.random.choice(self.server_managers[0].hosts.difference(self.mgmt_svc_replicas))) |
| Args: | ||
| host (NodeSet): host to check | ||
| seconds (int): seconds to keep checking | ||
| """ | ||
| for _ in range(seconds): | ||
| if self.engine_running(host): | ||
| self.fail(f"An engine started on {host}") | ||
| time.sleep(1) |
There was a problem hiding this comment.
Nit - The run_remote / clush can sometimes take ~0.1 seconds or more depending on the system. So technically this is trying up to seconds TIMES, not necessarily 30 seconds. But not a big deal
There was a problem hiding this comment.
Yeah, good point. I'll change it to have a proper deadline if I need to make other changes.
| if self.server_managers[0].check_rank_state([rank], [state], checks): | ||
| self.fail(f"Rank {rank} did not reach the {state} state") | ||
|
|
||
| def test_initialize(self): |
There was a problem hiding this comment.
These test_* names are global across the framework, so I'd recommend putting some context in there. Maybe one of these?
test_dmg_system_initialize
test_dmg_system_init
| self.log_step('Scenario 2 - Kill a rank and verify it is not excluded') | ||
| self.server_managers[0].kill_ranks(ranks_x) |
There was a problem hiding this comment.
Why change the stop to a kill? Are we potentially missing test coverage?
There was a problem hiding this comment.
This PR changes the Stopped state such that it can only be entered or exited by explicit admin action, and it's persistent. Some of the tests relied on stopped ranks eventually going into the Excluded state, but Stopped->Excluded is an invalid transition now, deliberately. In order for a rank to be Excluded, it has to have exited unexpectedly and been marked dead by SWIM.
| telemetry_before = self.collect_telemetry(rank_count=rank_count) | ||
|
|
||
| # 2. Stop a rank. | ||
| # 2. Kill a rank. |
There was a problem hiding this comment.
Similar here. Why change the stop to a kill?
* Fix test names to reflect test_dmg_[cmd] idiom * Randomize the server used for testing engine restarts * Improve log message for stale preflight response Features: control server pool Signed-off-by: Michael MacDonald <mjmac@vectorsolutionsgroup.com>
Rework the default system bringup flow to decouple storage format
from engine startup. This separation enables easier automation by
blocking until each phase of deployment has finished with a clear
success or failure status.
With this commit, the following behavior is default:
dmg storage format -l [hostlist]does not start enginesdmg system initialize -l [hostlist]starts engines and reportssuccess or failure before exiting
The pre-3.0 storage format behavior may be enabled via the
--startflag. This commit also modifies the "Stopped" rank state such that
it may only be entered via
dmg system stop, and a stopped rankremains stopped until the admin starts it again.
Features: control server pool
Signed-off-by: Michael MacDonald mjmac@vectorsolutionsgroup.com