+### how to find test script ###
+在lkp的**daemon**, **tests**目录下查找这些脚本.
lkp ==> lkp-tests this document should be shown to user later, try not to use abbreviations.
Got it.
Thanks, RenWen
+假设在**daemon**下找到了*test_script01*, 则将该脚本作为`start_daemon`的参 +数运行. 如果在**tests**下找到了*test_script01*, 则作为`run_test`的参数去 +运行. 如果没有找到相应的文件, 则按变量导出.
+### about `start_daemon` and `run_test` ###
+用于启动脚本的这2个函数位于**$LKP_SRC/lib/job.sh**. +要搞清楚多机的流程, 就得明白这两个函数是怎么去做的.
+#### the processes of `start_damon` ####
- 运行在**daemon**文件夹下找到的脚本. 如果运行成功, 向调度器报告一个状态:
`started`, 调度器记录该机器的状态为: `start`; 执行失败, 则报告:
`failed`, 调度器记录为: `abort`, 然后退出执行. 状态可以查看redis的
key: `HGETALL sched/cluster_state`.
- 向调度器报告一个状态: `write_state`, 并携带一些机器相关的参数:
* `node_roles`: 机器的角色
* `ip`: 通过命令`hostname -I`取得的第一个值
* `direct_macs`: 多机配置文件中该机器的**macs**字段
* `direct_ips`: 调度器根据多机配置文件中的**ip0**字段配置的直连ip, 与
配置文件中**macs**的值一一对应
此时调度器将这些参数记录为每台机器相关的信息, 可以查看redis的key:
**sched/cluster_state**.
- 将**direct_ips**的值一一绑定到机器中的**direct_macs**的相应设备上.
- 向调度器报告一个状态: `wait_ready`, 调度器将其记录为: `ready`; 与此
同时, 调度器查看是否多机测试中的所有机器都准备好了. 如果每一台机器
都准备好了, 则返回`ready`; 如果其中一台的状态为`abort`, 则返回
`abort`, 然后退出执行; 其余情况, 则循环查询, 直到前2种情形发生.
- 向调度器报告一个状态: `roles_ip`, 并将调度器的返回值导出为环境变量.
比如当返回值为: `ip=ip01`时, 执行: `export ip=ip01`.
- 向调度器报告一个状态: `wait_finish`, 调度器将其记录为: `finish`; 与
此同时, 调度器查看是否多机测试中的所有机器的状态都为`finish`. 如果
都是`finish`, 则返回`finish`; 如果其中一台的状态为`abort`, 则返回
`abort`, 然后退出执行; 其余情况, 则循环查询, 直到前2种情形发生.
- 执行完成.
+#### the processes of `run_test` ####
+步骤1,2,3,4同上述2,3,4,5.
- 向调度器报告一个状态: `write_state`, 并携带一些机器相关的参数:
* `node_roles`: 机器的角色
* `ip`: 通过命令`hostname -I`取得的第一个值
* `direct_macs`: 多机配置文件中该机器的**macs**字段
* `direct_ips`: 调度器根据多机配置文件中的**ip0**字段配置的直连ip, 与
配置文件中**macs**的值一一对应
此时调度器将这些参数记录为每台机器相关的信息, 可以查看redis的key:
**sched/cluster_state**.
- 将**direct_ips**的值一一绑定到机器中的**direct_macs**的相应设备上.
- 向调度器报告一个状态: `wait_ready`, 调度器将其记录为: `ready`; 与此
同时, 调度器查看是否多机测试中的所有机器都准备好了. 如果每一台机器
都准备好了, 则返回`ready`; 如果其中一台的状态为`abort`, 则返回
`abort`, 然后退出执行; 其余情况, 则循环查询, 直到前2种情形发生.
- 向调度器报告一个状态: `roles_ip`, 并将调度器的返回值导出为环境变量.
比如当返回值为: `ip=ip01`时, 执行: `export ip=ip01`
- 运行在**tests**文件夹下找到的脚本. 运行完成, 向调度器报告一个状态:
`finished`, 调度器记录为: `finish`; 执行失败, 则报告: `failed`, 调
度器记录为: `abort`, 然后退出执行.
- 执行完成.
+#### other ####
+`start_daemon`和`run_test`还会报告一个`abort`状态: 循环100次向调度器发 +起请求, 查看所有机器是否全部`ready`或`finish`, 如果循环结束仍然返回的是 +`retry`, 则报告该状态, 并结束执行.
+当调度器接受到与之相关的请求时, 会阻塞(或循环)查询这些机器的状态, 因此只 +需返回`ready`(`finish`)或`abort`. 所以不会触发循环100次请求这个过程, 因
+此不会报告`abort`这个状态.
2.23.0