我们尝试避免在前一个快照尚未初始化时克隆一个快照,通过等待一个分离的上下文:
https://cs.opensource.google/go/x/tools/+/master:internal/lsp/cache/view.go;l=602;drc=929a8494cf60267d89035bc211b797a67b65a6b9
然而,我们也用sync.Once保护初始化。正如在#43554中观察到的那样,有可能在这场比赛中失去awaitInitialized,这样我们就可以在快照后台上下文上运行初始化,这可以被取消。
结果,我们可以克隆一个元数据不完整的快照。这对于任何试图保留元数据的失效逻辑都会产生问题,例如只在go.mod saves上使元数据无效。此外,这很难调试:如果能保证我们在快照中有线性的历史记录就好了。
经过讨论,我们认为这是一个相对较低优先级的问题,因为当前的逻辑应该只会导致罕见的暂时性故障。
CC @stamblerre @heschik
1条答案
按热度按时间mqkwyuun1#
https://golang.org/cl/283512提到了这个问题:
gopls/internal/regtest: fix synchronization for TestUseGoplsMod