在新创建的对象上成功获取之前需要等待多长时间?



如果我创建一个对象,我需要等待多长时间才能成功?我不想添加具有任意值的睡眠。

在下面的代码中,我尝试创建一个服务帐户和机密。然后我尝试立即获取它。

err := r.CreateSAandSecret()
if err != nil {
log.Info("Not able to create SA and secret ")
return "", err
}
// How long should the sleep be here ???
token, err := r.GetAuthorizationTokenfromSecret()
if err != nil {
log.Info("Not able to get token from secret")
}

如果有更好的模式,请告知。

没有单一的答案。理论上,它应该总是在写入后读取,但你在这里问的是一个派生对象。这意味着需要等待服务帐户控制器看到新对象并创建令牌机密。控制器都使用由 etcd 手表驱动的 API 手表。虽然它通常很快,但无法保证任何特定的时间。 大多数情况下,它会在 etcd 的 iops 负载下变慢,或者如果您一次创建 500 万个服务帐户,大多数控制器一次处理一个。此外,在拜占庭故障期间,手表可能会丢弃事件,这意味着它永远不会发生(直到您手动重新启动控制器或以其他方式触发协调(。

最新更新