你正在使用的Go版本是什么(go version
)?
go版本 go1.10.3 linux/amd64
这个问题在最新版本中是否会重现?
是的,在主分支上也是如此。
你做了什么?
在一个终端中:
$ cp /dev/null ./index
$ godoc -http=:6060 -index -index_files=./index
2018/06/23 13:21:03 error reading index from file ./index: EOF
向godoc HTTP服务器发起的请求将失败。错误信息由Corpus.RunIndexer()
打印,结合上述标志,索引将永远不会被重新检查。
在另一个终端中:
$ godoc -write_index -index_files=./index
在此过程完成后,HTTP服务器有一个有效的索引文件。然而,索引搜索请求仍然会失败,因为HTTP服务器不会尝试重新初始化索引。除了重启godoc进程外,没有其他机制可以要求HTTP服务器重新加载索引。
你期望看到什么?
我希望索引在索引文件变为有效状态后能够为查询提供服务。
我的建议语义:如果-index
和-index_files
都被指定了,但索引处于未初始化状态,搜索查询应该尝试重新初始化索引。这将导致每次查询都会检查索引,直到索引成功加载为止。
2条答案
按热度按时间qvtsj1bj1#
CC @agnivade @ysmolsky
7qhs6swi2#
有趣的场景。我很好奇你是否真的在现实情况中遇到过这种情况(如果有,是如何处理的),或者你只是想看到这个功能。
对我来说,目前的方法似乎是最干净的选择。我认为我们应该在提供无效的索引文件时启动失败。以损坏的状态启动服务器似乎不太对劲。
也许我们可以暴露一个处理程序URL,让服务器在用户更新了索引文件后重新初始化索引(但只有在服务器使用正确的索引*初始化后才能这样做)。对于每个查询检查似乎没有必要。查询应该只返回来自索引的结果,或者在出现错误时返回错误。
无论如何,我看不到实际的性能优势,因为服务器需要重新初始化整个索引。只是你不需要重启godoc服务器。