Index: docs/manual/Makefile ================================================================== --- docs/manual/Makefile +++ docs/manual/Makefile @@ -37,10 +37,13 @@ # dos2unix megatest_manual.html megatest_manual.pdf : megatest_manual.txt *.txt *png a2x -a toc -f pdf megatest_manual.txt +server.pdf : server.dot + dot -Tpdf server.dot > server.pdf + server.ps : server.dot dot -Tps server.dot > server.ps client.ps : client.dot dot -Tps client.dot > client.ps Index: docs/manual/server.dot ================================================================== --- docs/manual/server.dot +++ docs/manual/server.dot @@ -14,65 +14,124 @@ // // You should have received a copy of the GNU General Public License // along with Megatest. If not, see . digraph G { - subgraph cluster_1 { - node [style=filled,shape=box]; - - check_available_queue -> remove_entries_over_10s_old; - remove_entries_over_10s_old -> set_available [label="num_avail < 3"]; - remove_entries_over_10s_old -> exit [label="num_avail > 2"]; - - set_available -> delay_2s; - delay_2s -> check_place_in_queue; - - check_place_in_queue -> "http:transport-launch" [label="at head"]; - check_place_in_queue -> exit [label="not at head"]; - - "client:login" -> "server:shutdown" [label="login failed"]; - "server:shutdown" -> exit; - - subgraph cluster_2 { - "http:transport-launch" -> "http:transport-run"; - "http:transport-launch" -> "http:transport-keep-running"; - - "http:transport-keep-running" -> "tests running?"; - "tests running?" -> "client:login" [label=yes]; - "tests running?" -> "server:shutdown" [label=no]; - "client:login" -> delay_5s [label="login ok"]; - delay_5s -> "http:transport-keep-running"; - } - - // start_server -> "server_running?"; - // "server_running?" -> set_available [label="no"]; - // "server_running?" -> delay_2s [label="yes"]; - // delay_2s -> "still_running?"; - // "still_running?" -> ping_server [label=yes]; - // "still_running?" -> set_available [label=no]; - // ping_server -> exit [label=alive]; - // ping_server -> remove_server_record [label=dead]; - // remove_server_record -> set_available; - // set_available -> avail_delay [label="delay 3s"]; - // avail_delay -> "first_in_queue?"; - // - // "first_in_queue?" -> set_running [label=yes]; - // set_running -> get_next_port -> handle_requests; - // "first_in_queue?" -> "dead_entry_in_queue?" [label=no]; - // "dead_entry_in_queue?" -> "server_running?" [label=no]; - // "dead_entry_in_queue?" -> "remove_dead_entries" [label=yes]; - // remove_dead_entries -> "server_running?"; - // - // handle_requests -> start_shutdown [label="no traffic\nno running tests"]; - // handle_requests -> shutdown_request; - // start_shutdown -> shutdown_delay; - // shutdown_request -> shutdown_delay; - // shutdown_delay -> exit; - - label = "server:launch"; - color=brown; - } +// connecting to server +subgraph cluster_1 { + label="Connect"; + + node [style=filled,shape=box]; + dotserver [label="Have .server file?"]; + connect [label="Connect to server"]; + // startserver [label="Start Server"]; + connected [label="Connection Successful"]; + anylive [label="Any live servers?"]; + askstart [label="Ask existing server to start a new server"]; + anydboard [label="Any live dashboards"]; + askdboard [label="Ask dashboard to start server"]; + serverlaunch [label="User server launch to start server process"]; + wait5sec [label="Wait 5 seconds"]; + + dotserver -> connect [label="yes"]; + connect -> connected [label="yes"]; + connect -> anylive [label="no"]; + + // startserver -> anylive; + anylive -> askstart [label="yes"]; + anylive -> anydboard [label="no"]; + anydboard -> askdboard [label="yes"]; + anydboard -> serverlaunch [label="no"]; + serverlaunch -> wait5sec; + askdboard -> wait5sec; + askstart -> wait5sec; + wait5sec -> dotserver; + +} + +// server bootstrap +subgraph cluster_2 { + label="Startup"; + node [style=filled,shape=box]; + getlock [label="Get file lock"]; + starthttp [label="Start http server"]; + copydb [label="Copy db to /tmp"]; + createsrvfile [label="Create .nnn.server file containing host:port"]; + releaselock [label="Release file lock"]; + + getlock -> starthttp -> createsrvfile; + getlock -> copydb -> createsrvfile; + createsrvfile -> releaselock; +} + +// shutting down server +subgraph cluster_3 { + label="Shutdown"; + node [style=filled,shape=box]; + shutdown [label="Start Shutdown"]; + rejectmode [label="Put http server into reject requests mode"]; + syncback [label="Sync db back"]; + exit [label="Exit process"]; + + shutdown -> rejectmode -> syncback -> exit; +} + +// subgraph cluster_1 { +// node [style=filled,shape=box]; +// +// check_available_queue -> remove_entries_over_10s_old; +// remove_entries_over_10s_old -> set_available [label="num_avail < 3"]; +// remove_entries_over_10s_old -> exit [label="num_avail > 2"]; +// +// set_available -> delay_2s; +// delay_2s -> check_place_in_queue; +// +// check_place_in_queue -> "http:transport-launch" [label="at head"]; +// check_place_in_queue -> exit [label="not at head"]; +// +// "client:login" -> "server:shutdown" [label="login failed"]; +// "server:shutdown" -> exit; +// +// subgraph cluster_2 { +// "http:transport-launch" -> "http:transport-run"; +// "http:transport-launch" -> "http:transport-keep-running"; +// +// "http:transport-keep-running" -> "tests running?"; +// "tests running?" -> "client:login" [label=yes]; +// "tests running?" -> "server:shutdown" [label=no]; +// "client:login" -> delay_5s [label="login ok"]; +// delay_5s -> "http:transport-keep-running"; +// } +// +// // start_server -> "server_running?"; +// // "server_running?" -> set_available [label="no"]; +// // "server_running?" -> delay_2s [label="yes"]; +// // delay_2s -> "still_running?"; +// // "still_running?" -> ping_server [label=yes]; +// // "still_running?" -> set_available [label=no]; +// // ping_server -> exit [label=alive]; +// // ping_server -> remove_server_record [label=dead]; +// // remove_server_record -> set_available; +// // set_available -> avail_delay [label="delay 3s"]; +// // avail_delay -> "first_in_queue?"; +// // +// // "first_in_queue?" -> set_running [label=yes]; +// // set_running -> get_next_port -> handle_requests; +// // "first_in_queue?" -> "dead_entry_in_queue?" [label=no]; +// // "dead_entry_in_queue?" -> "server_running?" [label=no]; +// // "dead_entry_in_queue?" -> "remove_dead_entries" [label=yes]; +// // remove_dead_entries -> "server_running?"; +// // +// // handle_requests -> start_shutdown [label="no traffic\nno running tests"]; +// // handle_requests -> shutdown_request; +// // start_shutdown -> shutdown_delay; +// // shutdown_request -> shutdown_delay; +// // shutdown_delay -> exit; +// +// label = "server:launch"; +// color=brown; +// } // client_start_server -> start_server; // handle_requests -> read_write; // read_write -> handle_requests; }