Gerrit出现Invalid Server Id无效服务器ID报错该如何解决?
Gerrit 无效服务器ID(InvalidServerIdException)修复方案
报错说明
触发的报错完整内容如下:
skipping change 1152942 in project platform/external/ltp because of an invalid server id [CONTEXT project="platform/external/ltp" ] com.google.gerrit.server.notedb.InvalidServerIdException: invalid server id, expected 639b8ee7-1666-4b5d-8636-2fedfaf8ef27: actual: 7f82688b-25e6-4dc5-a12f-69ad0cdd1fa5
问题原因
该报错由Gerrit的NoteDB元数据校验规则触发,当前Gerrit实例配置的服务器ID,与变更记录中存储的历史服务器ID不匹配,通常出现在Gerrit实例迁移、备份恢复、或误修改serverId配置的场景下。
修复步骤
- 第一步:校验并修正Gerrit配置
进入Gerrit站点根目录,打开etc/gerrit.config配置文件,找到[gerrit]配置块下的serverId参数,将其值修改为报错中给出的期望值639b8ee7-1666-4b5d-8636-2fedfaf8ef27,保存后重启Gerrit服务,80%以上的场景可以通过该操作直接修复。 - 第二步:修正变更元数据(仅第一步操作后仍报错时执行)
如果gerrit.config中的serverId已经是正确值,说明对应变更的NoteDB元数据中被写入了错误的服务器ID,需要做如下操作:- 停止Gerrit服务,全量备份所有项目git仓库数据
- 如果仅有单个变更报错,可以直接进入对应项目的git仓库目录,找到对应变更的元数据提交记录,将记录中的错误ID
7f82688b-25e6-4dc5-a12f-69ad0cdd1fa5替换为正确值 - 如果存在大批量同类型报错,可以执行如下命令批量替换所有仓库中的错误ID:
注意:上述命令中的find $your_gerrit_site_path/git/ -name "*.git" -type d -exec git -C {} filter-branch --tree-filter "grep -rl '7f82688b-25e6-4dc5-a12f-69ad0cdd1fa5' . | xargs sed -i 's/7f82688b-25e6-4dc5-a12f-69ad0cdd1fa5/639b8ee7-1666-4b5d-8636-2fedfaf8ef27/g'" HEAD \;$your_gerrit_site_path请替换为实际的Gerrit站点根目录路径,操作前必须完成全量数据备份,避免操作失误导致数据丢失 - 第三步:重建索引验证修复结果
修复完成后启动Gerrit服务,执行如下命令重建变更索引:
索引重建完成后访问对应变更页面,确认没有再抛出相同报错即可。java -jar gerrit.war reindex --site-path $your_gerrit_site_path
内容的提问来源于stack exchange,提问作者B.Kingsun
相关产品推荐
相关产品推荐

