From c0239b798a26714eb63378f35679d2d161cbfe24 Mon Sep 17 00:00:00 2001 From: Kefu Chai Date: Thu, 24 Jun 2021 15:57:53 +0800 Subject: [PATCH] crimson/osd: document fsm of crimson osd Signed-off-by: Kefu Chai --- doc/dev/crimson/osd.rst | 54 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 doc/dev/crimson/osd.rst diff --git a/doc/dev/crimson/osd.rst b/doc/dev/crimson/osd.rst new file mode 100644 index 0000000000000..16f599e0af06a --- /dev/null +++ b/doc/dev/crimson/osd.rst @@ -0,0 +1,54 @@ +osd +=== + +.. graphviz:: + + digraph osd { + node [shape = doublecircle]; "start" "end"; + node [shape = circle]; + start -> preboot; + waiting_for_healthy [label = "waiting\nfor\nhealthy"]; + waiting_for_healthy -> waiting_for_healthy [label = "tick"]; + waiting_for_healthy -> preboot [label = "i am healthy!"]; + preboot -> booting [label = "send(MOSDBoot)"]; + booting -> active [label = "recv(osdmap)"]; + active -> prestop [label = "stop()"]; + active -> preboot [label = "recv(osdmap)"]; + active -> end [label = "kill(SIGINT)"]; + active -> waiting_for_healthy [label = "i am unleathy!"] + prestop -> end [label = "recv(osdmap)"]; + } + +.. describe:: waiting_for_healthy + + If an OSD daemon is able to connected to its heartbeat peers, and its own + internal hearbeat does not fail, it is considered healthy. Otherwise, it + puts itself in the state of `waiting_for_healthy`, and check its own + reachability and internal heartbeat periodically. + +.. describe:: preboot + + OSD sends an `MOSDBoot` message to the connected monitor to inform the + cluster that it's ready to serve, so that the quorum can mark it `up` + in the osdmap. + +.. describe:: booting + + Before being marked as `up`, an OSD has to stay in its `booting` state. + +.. describe:: active + + Upon receiving an osdmap marking the OSD as `up`, it transits to `active` + state. After that, it is entitled to do its business. But the OSD service + can be fully stopped or suspended due to various reasons. For instance, + the osd services can be stopped by administrator manually, or marked `stop` + in the osdmap. Or any of its IP addresses does not match with the + corresponding one configured in osdmap, it transits to `preboot` if + it considers itself healthy. + +.. describe:: prestop + + The OSD transits to `prestop` unconditionally upon request of `stop`. + But before bidding us farewell, it tries to get the acknowledge from + the monitor by sending an `MOSDMarkMeDown`, and waiting for an response + of updated osdmap or another `MOSDMarkMeDown` message. -- 2.39.5