Gerrit 3.2.3 Replication一直处于Rescheduling状态如何解决?
问题根因
你遇到的是Gerrit 3.2.3版本自带replication插件的已知缺陷,进行中的推送任务的锁状态没有被正确释放,导致后续的同步任务持续判断存在运行中的推送冲突,反复触发重调度,永远无法执行实际同步。
临时修复方案(可立即恢复同步能力)
- 先暂停replication插件,执行ssh管理命令:
ssh -p <Gerrit SSH端口> <管理员账号>@<Gerrit服务地址> gerrit plugin pause replication - 删除replication插件的缓存队列,默认缓存路径为
$GERRIT_SITE/data/replication,直接删除整个文件夹即可 - 恢复replication插件运行:
ssh -p <Gerrit SSH端口> <管理员账号>@<Gerrit服务地址> gerrit plugin resume replication - 若操作后仍有异常,直接重启Gerrit服务即可彻底清除残留的锁状态
永久修复方案(避免后续复发)
该缺陷已在3.2.4及更高版本的replication插件中修复,可二选一执行:
- 整体升级Gerrit实例到3.2.4或更高的稳定版本
- 单独升级replication插件:下载对应3.2.x分支的最新replication插件包,替换
$GERRIT_SITE/plugins/replication.jar后重启插件即可
额外优化配置
你可以在replication.config配置文件中添加如下参数,降低锁冲突概率:
[replication] lockTimeout = 300
该参数会将推送锁的超时时间设置为300秒,超过时间未完成的推送会自动释放锁,避免锁长期残留。
内容的提问来源于stack exchange,提问作者B.Kingsun
相关产品推荐
相关产品推荐

