x/tools/cmd/godoc: 如果初始索引无效,HTTP服务器永远不会重新检查索引,

zqdjd7g9  于 6个月前  发布在  Go
关注(0)|答案(2)|浏览(51)

你正在使用的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都被指定了,但索引处于未初始化状态,搜索查询应该尝试重新初始化索引。这将导致每次查询都会检查索引,直到索引成功加载为止。

qvtsj1bj

qvtsj1bj1#

CC @agnivade @ysmolsky

7qhs6swi

7qhs6swi2#

有趣的场景。我很好奇你是否真的在现实情况中遇到过这种情况(如果有,是如何处理的),或者你只是想看到这个功能。

对我来说,目前的方法似乎是最干净的选择。我认为我们应该在提供无效的索引文件时启动失败。以损坏的状态启动服务器似乎不太对劲。

也许我们可以暴露一个处理程序URL,让服务器在用户更新了索引文件后重新初始化索引(但只有在服务器使用正确的索引*初始化后才能这样做)。对于每个查询检查似乎没有必要。查询应该只返回来自索引的结果,或者在出现错误时返回错误。

无论如何,我看不到实际的性能优势,因为服务器需要重新初始化整个索引。只是你不需要重启godoc服务器。

相关问题