Jira无法删除“问题”,报错:LexoRankIntegrityException
在Jira 8.5的测试过程中,发现用户创建的“问题”
无法删除并报错。经排查定位到是LexoRank
域ID的问题。在管理|系统|高级|LexoRank 管理
里面可以看到LexoRank
相关信息(管理界面左侧导航栏最后一行)。
环境介绍
# cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)
# java -version
java version "1.8.0_181"
Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)
# mysql --version
mysql Ver 14.14 Distrib 5.7.31, for Linux (x86_64) using EditLine wrapper
# Jira 8.5.1
报错摘要
查看日志./jira/data/log/atlassian-jira.log
,根据web界面删除操作报错的“日志查询编号”(errorId)可获取完整报错信息。
http-nio-8080-exec-9 ERROR [c.a.j.web.servlet.InternalServerErrorServlet] {errorId=9b93cb4b-ccb7-4e96-9834-c60cae5b6b84, interpretedMsg=, cause=com.atlassian.greenhopper.manager.lexorank.LexoRankIntegrityException: Expected exactly 2 rows; the maximum marker row and the lowest ranked row for rank field[id=10105], stacktrace=com.atlassian.greenhopper.manager.lexorank.LexoRankIntegrityException: Expected exactly 2 rows; the maximum marker row and the lowest ranked row for rank field[id=10105]
原因分析
根本原因还是在安装数据库的时候,数据库参数设置错误(后期已修复),导致在创建LexoRank时信息不完整而引发的。从报错信息这可以看到“id=10105”,数据库中仅仅有这个id存在,而没有其他对应的等级信息。
select id from customfield where customfieldtypekey = 'com.pyxis.greenhopper.jira:gh-lexo-rank';
select * from "AO_60DB71_LEXORANK" where ("ISSUE_ID" = -9223372036854775808 and "RANK" LIKE '%|000000:' and "TYPE" = 0) or ("ISSUE_ID" = 9223372036854775807 and "RANK" like '%|zzzzzz:' and "TYPE" = 2);
比较第一个和第二个SQL的查询结果,就会发现信息不对称。需要修复缺失的信息。
(提醒:
根据情况去掉SQL内的双引号!)
问题处理
-
操作之前备份Jira和数据库;
-
停止Jira;
-
查询出LexoRank的“field ID”;
select id from customfield where customfieldtypekey = 'com.pyxis.greenhopper.jira:gh-lexo-rank';
-
对查出来的ID执行以下操作;
INSERT INTO "AO_60DB71_LEXORANK" ("ID", "FIELD_ID", "ISSUE_ID", "RANK", "TYPE") VALUES (DEFAULT, <FIELD_ID>, -9223372036854775808, '0|000000:', 0); INSERT INTO "AO_60DB71_LEXORANK" ("ID", "FIELD_ID", "ISSUE_ID", "RANK", "TYPE") VALUES (DEFAULT, <FIELD_ID>, 9223372036854775807, '0|zzzzzz:', 2);
(
提醒:
根据情况去掉SQL内的双引号!) -
启动Jira。