需求
针对某通信产品,我们需要开发一个版本升级管理系统。该系统需要通过由Java开发的管理后台,由Telnet发起向前端基站设备的命令,以获取基站设备的版本信息,并在后台比较与当前最新版本的差异,以确定执行什么样的命令对基站设备的软件文件进行操作。基站设备分为两种:
- 主控板(Master Board)
- 受控板(Slave Board)
基站设备允许执行的命令包括transfer、active、inactive等。这些命令不仅受到设备类型的限制,还要受制于该设备究竟运行在什么样的终端。类型分为:
对命令的约束条件大体如下表所示(不代表真实需求):
通过登录可以连接到主控板的Shell终端,此时,若执行enterUshell命令则进入UShell终端,执行enterSlaveBoard则进入受控板的Shell终端。在受控板同样可以执行enterUshell进入它的UShell终端。系统还提供了对应的退出操作。整个操作引起的变迁如下图所示:
执行升级的流程是在让基站设备处于失效状态下,获取基站设备的软件版本信息,然后在后端基于最新版本进行比较。得到版本之间的差异后,通过transfer命令传输新文件,put命令更新文件,deleteFiles命令删除多余的文件。成功更新后,再激活基站设备。因此,一个典型的升级流程如下所示:
0. login (Master Board Shell)
- inactive (Master Board UShell)
- get (Slave Board Shell)
- transfer(Master Board Shell)
- put(Slave Board Shell)
- deleteFiles(Slave Board Ushell)
- active(Master Board UShell)
- logout
整个版本升级系统要求:无论当前基站设备属于哪种分类,处于哪种终端,只要Telnet连接没有中断,在要求升级执行的命令必须执行成功。如果当前所处的设备与终端不满足要求,系统就需要迁移到正确的状态,以确保命令的执行成功。