问题描述
gerrit使用elasticsearch做后端的索引存储?,不小心把对应的索引删除后服务报错。
错误很明显,说是没有索引,怎么办呢。
google发现可以通过命令来对索引进行重建。参考:http://review.gluster.org/Documentation/pgm-reindex.html
服务还在启动尝试执行命令进行索引重建。
java -jar gerrit.war reindex
执行命令后,建立索引并同步数据很慢,好像是gerrit使用了h2数据库导致读数据写入es的时候和慢(并发小,锁表导致的)。
后重启服务发现起不来。又开始对几个索引开始重建。
java -jar /root/gerrit.war reindex -d /data/gerrit/ --index projects
java -jar /root/gerrit.war reindex -d /data/gerrit/ --index groups
java -jar /root/gerrit.war reindex -d /data/gerrit/ --index accounts
java -jar /root/gerrit.war reindex -d /data/gerrit/ --index changes
花费时间较久,然后启动服务后正常显示了。
但是pull和push代码是又出现问题了,错误日志如下。
报错很明显,分别对报错的几个索引设置进行修改(git pull可以 push不行)。
PUT /gerrit_accounts_0011/_settings
{
"index.max_result_window":2147483647
}
服务到此恢复正常。
事后思考:
java -jar gerrit.war reindex
过程异常漫长,大约花了2个小时,后发现命令支持配置线程数。是否会加快恢复呢?- 有空看看gerrit的原理和架构。