错误 #4990
网管版本2.4.1版本,先升级基站软件版本,再升级OS版本,出现OS版本上传版本问题锁
开始日期:
2026-03-09
计划完成日期:
% 完成:
0%
预期时间:
描述
网管版本2.4.1版本,先升级基站软件版本,再升级OS版本,出现OS版本上传版本提示“当前已有任务进行中”
备注:
无法上传OS版本
文件
历史记录
由 马 自伟 更新于 大约 7 小时 之前
- 状态 从 新建 变更为 进行中
问题定位:
1.先升级基站软件版本,那么redis有key:“software-version-manage:ip”会有记录,记录内容为:filed:gnb,value:{"startTime":1773038405,"timeOut":1773039005,"result":"success","status":"end","message":"","code":0}
其中,value属于json
2.升级OS时,redis使用的key依然是“software-version-manage:ip”,进行复用key,但是记录的内容,filed:status,value:end
这样的使用时,时hash方式
3.在升级OS之前,会有前置检查,目前的逻辑只记录了filed:status,value:end的方式,没有考虑到json为value的方式,导致查询status为空,无法判断是“end”,因此返回了“当前已有任务正在进行中”的错误
问题解决:
在升级OS之前的前置检查,对redis的key为“software-version-manage:ip”做出考虑json的情况
修改为:
if ($redis->keyExists($key)) {
$res = $redis->hGetAll($key);
$status = '';
// 第一种结构
if (isset($res['status'])) {
$status = $res['status'];
}
// 第二种结构
if (!$status && isset($res['gnb'])) {
$gnbInfo = json_decode($res['gnb'], true);
$status = $gnbInfo['status'] ?? '';
}
if ($status === 'end') {
$redis->del($key);
} else {
return $this->return_json([], 1, $this>stringDefine['PROMPT_MSG_83']);
}
}