summaryrefslogtreecommitdiffstats
path: root/doc/dev/crimson/osd.rst
diff options
context:
space:
mode:
Diffstat (limited to 'doc/dev/crimson/osd.rst')
-rw-r--r--doc/dev/crimson/osd.rst54
1 files changed, 54 insertions, 0 deletions
diff --git a/doc/dev/crimson/osd.rst b/doc/dev/crimson/osd.rst
new file mode 100644
index 000000000..f7f132b3f
--- /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<up>)"];
+ active -> prestop [label = "stop()"];
+ active -> preboot [label = "recv(osdmap<down>)"];
+ active -> end [label = "kill(SIGINT)"];
+ active -> waiting_for_healthy [label = "i am unhealthy!"]
+ prestop -> end [label = "recv(osdmap<down>)"];
+ }
+
+.. describe:: waiting_for_healthy
+
+ If an OSD daemon is able to connected to its heartbeat peers, and its own
+ internal heartbeat 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.