podresources: e2e: force eager connection
Add and use more facilities to the *internal* podresources client. Checking e2e test runs, we have quite some ``` rpc error: code = Unavailable desc = connection error: desc = "transport: Error while dialing: dial unix /var/lib/kubelet/pod-resources/kubelet.sock: connect: connection refused": rpc error: code = Unavailable desc = connection error: desc = "transport: Error while dialing: dial unix /var/lib/kubelet/pod-resources/kubelet.sock: connect: connection refused" ``` This is likely caused by kubelet restarts, which we do plenty in e2e tests, combined with the fact gRPC does lazy connection AND we don't really check the errors in client code - we just bubble them up. While it's arguably bad we don't check properly error codes, it's also true that in the main case, e2e tests, the functions should just never fail besides few well known cases, we're connecting over a super-reliable unix domain socket after all. So, we centralize the fix adding a function (alongside with minor cleanups) which wants to trigger and ensure the connection happens, localizing the changes just here. The main advantage is this approach is opt-in, composable, and doesn't leak gRPC details into the client code. Signed-off-by: Francesco Romani <fromani@redhat.com>
This commit is contained in:
@@ -176,7 +176,7 @@ var _ = SIGDescribe("Device Manager [Serial] [Feature:DeviceManager][NodeFeatur
|
||||
sd := setupSRIOVConfigOrFail(ctx, f, configMap)
|
||||
waitForSRIOVResources(ctx, f, sd)
|
||||
|
||||
cli, conn, err := podresources.GetV1Client(endpoint, defaultPodResourcesTimeout, defaultPodResourcesMaxSize)
|
||||
cli, conn, err := podresources.WaitForReady(podresources.GetClient(endpoint))
|
||||
framework.ExpectNoError(err)
|
||||
|
||||
resp, err := cli.GetAllocatableResources(ctx, &kubeletpodresourcesv1.AllocatableResourcesRequest{})
|
||||
@@ -260,7 +260,7 @@ var _ = SIGDescribe("Device Manager [Serial] [Feature:DeviceManager][NodeFeatur
|
||||
|
||||
compareSRIOVResources(sd, sd2)
|
||||
|
||||
cli, conn, err = podresources.GetV1Client(endpoint, defaultPodResourcesTimeout, defaultPodResourcesMaxSize)
|
||||
cli, conn, err = podresources.WaitForReady(podresources.GetClient(endpoint))
|
||||
framework.ExpectNoError(err)
|
||||
defer conn.Close()
|
||||
|
||||
|
@@ -382,7 +382,7 @@ var _ = SIGDescribe("Memory Manager [Disruptive] [Serial] [Feature:MemoryManager
|
||||
endpoint, err := util.LocalEndpoint(defaultPodResourcesPath, podresources.Socket)
|
||||
framework.ExpectNoError(err)
|
||||
|
||||
cli, conn, err := podresources.GetV1Client(endpoint, defaultPodResourcesTimeout, defaultPodResourcesMaxSize)
|
||||
cli, conn, err := podresources.WaitForReady(podresources.GetClient(endpoint))
|
||||
framework.ExpectNoError(err)
|
||||
defer conn.Close()
|
||||
|
||||
@@ -522,7 +522,7 @@ var _ = SIGDescribe("Memory Manager [Disruptive] [Serial] [Feature:MemoryManager
|
||||
endpoint, err := util.LocalEndpoint(defaultPodResourcesPath, podresources.Socket)
|
||||
framework.ExpectNoError(err)
|
||||
|
||||
cli, conn, err := podresources.GetV1Client(endpoint, defaultPodResourcesTimeout, defaultPodResourcesMaxSize)
|
||||
cli, conn, err := podresources.WaitForReady(podresources.GetClient(endpoint))
|
||||
framework.ExpectNoError(err)
|
||||
defer conn.Close()
|
||||
|
||||
@@ -667,7 +667,7 @@ var _ = SIGDescribe("Memory Manager [Disruptive] [Serial] [Feature:MemoryManager
|
||||
endpoint, err := util.LocalEndpoint(defaultPodResourcesPath, podresources.Socket)
|
||||
framework.ExpectNoError(err)
|
||||
|
||||
cli, conn, err := podresources.GetV1Client(endpoint, defaultPodResourcesTimeout, defaultPodResourcesMaxSize)
|
||||
cli, conn, err := podresources.WaitForReady(podresources.GetClient(endpoint))
|
||||
framework.ExpectNoError(err)
|
||||
defer conn.Close()
|
||||
|
||||
@@ -684,7 +684,7 @@ var _ = SIGDescribe("Memory Manager [Disruptive] [Serial] [Feature:MemoryManager
|
||||
endpoint, err := util.LocalEndpoint(defaultPodResourcesPath, podresources.Socket)
|
||||
framework.ExpectNoError(err)
|
||||
|
||||
cli, conn, err := podresources.GetV1Client(endpoint, defaultPodResourcesTimeout, defaultPodResourcesMaxSize)
|
||||
cli, conn, err := podresources.WaitForReady(podresources.GetClient(endpoint))
|
||||
framework.ExpectNoError(err)
|
||||
defer conn.Close()
|
||||
|
||||
|
@@ -667,8 +667,8 @@ var _ = SIGDescribe("POD Resources [Serial] [Feature:PodResources][NodeFeature:P
|
||||
endpoint, err := util.LocalEndpoint(defaultPodResourcesPath, podresources.Socket)
|
||||
framework.ExpectNoError(err, "LocalEndpoint() failed err: %v", err)
|
||||
|
||||
cli, conn, err := podresources.GetV1Client(endpoint, defaultPodResourcesTimeout, defaultPodResourcesMaxSize)
|
||||
framework.ExpectNoError(err, "GetV1Client() failed err: %v", err)
|
||||
cli, conn, err := podresources.WaitForReady(podresources.GetClient(endpoint))
|
||||
framework.ExpectNoError(err, "GetClient() failed err: %v", err)
|
||||
defer conn.Close()
|
||||
|
||||
waitForSRIOVResources(ctx, f, sd)
|
||||
@@ -696,8 +696,8 @@ var _ = SIGDescribe("POD Resources [Serial] [Feature:PodResources][NodeFeature:P
|
||||
endpoint, err := util.LocalEndpoint(defaultPodResourcesPath, podresources.Socket)
|
||||
framework.ExpectNoError(err, "LocalEndpoint() failed err: %v", err)
|
||||
|
||||
cli, conn, err := podresources.GetV1Client(endpoint, defaultPodResourcesTimeout, defaultPodResourcesMaxSize)
|
||||
framework.ExpectNoError(err, "GetV1Client() failed err: %v", err)
|
||||
cli, conn, err := podresources.WaitForReady(podresources.GetClient(endpoint))
|
||||
framework.ExpectNoError(err, "GetClient() failed err: %v", err)
|
||||
defer conn.Close()
|
||||
|
||||
waitForSRIOVResources(ctx, f, sd)
|
||||
@@ -749,8 +749,8 @@ var _ = SIGDescribe("POD Resources [Serial] [Feature:PodResources][NodeFeature:P
|
||||
endpoint, err := util.LocalEndpoint(defaultPodResourcesPath, podresources.Socket)
|
||||
framework.ExpectNoError(err, "LocalEndpoint() failed err: %v", err)
|
||||
|
||||
cli, conn, err := podresources.GetV1Client(endpoint, defaultPodResourcesTimeout, defaultPodResourcesMaxSize)
|
||||
framework.ExpectNoError(err, "GetV1Client() failed err: %v", err)
|
||||
cli, conn, err := podresources.WaitForReady(podresources.GetClient(endpoint))
|
||||
framework.ExpectNoError(err, "GetClient() failed err: %v", err)
|
||||
defer conn.Close()
|
||||
|
||||
podresourcesListTests(ctx, f, cli, nil)
|
||||
@@ -765,8 +765,8 @@ var _ = SIGDescribe("POD Resources [Serial] [Feature:PodResources][NodeFeature:P
|
||||
endpoint, err := util.LocalEndpoint(defaultPodResourcesPath, podresources.Socket)
|
||||
framework.ExpectNoError(err, "LocalEndpoint() failed err: %v", err)
|
||||
|
||||
cli, conn, err := podresources.GetV1Client(endpoint, defaultPodResourcesTimeout, defaultPodResourcesMaxSize)
|
||||
framework.ExpectNoError(err, "GetV1Client() failed err: %v", err)
|
||||
cli, conn, err := podresources.WaitForReady(podresources.GetClient(endpoint))
|
||||
framework.ExpectNoError(err, "GetClient() failed err: %v", err)
|
||||
defer conn.Close()
|
||||
|
||||
// intentionally passing empty cpuset instead of onlineCPUs because with none policy
|
||||
@@ -781,8 +781,8 @@ var _ = SIGDescribe("POD Resources [Serial] [Feature:PodResources][NodeFeature:P
|
||||
endpoint, err := util.LocalEndpoint(defaultPodResourcesPath, podresources.Socket)
|
||||
framework.ExpectNoError(err, "LocalEndpoint() faild err %v", err)
|
||||
|
||||
cli, conn, err := podresources.GetV1Client(endpoint, defaultPodResourcesTimeout, defaultPodResourcesMaxSize)
|
||||
framework.ExpectNoError(err, "GetV1Client() failed err %v", err)
|
||||
cli, conn, err := podresources.WaitForReady(podresources.GetClient(endpoint))
|
||||
framework.ExpectNoError(err, "GetClient() failed err %v", err)
|
||||
defer conn.Close()
|
||||
|
||||
ginkgo.By("checking Get fail if the feature gate is not enabled")
|
||||
@@ -827,8 +827,8 @@ var _ = SIGDescribe("POD Resources [Serial] [Feature:PodResources][NodeFeature:P
|
||||
endpoint, err := util.LocalEndpoint(defaultPodResourcesPath, podresources.Socket)
|
||||
framework.ExpectNoError(err, "LocalEndpoint() failed err: %v", err)
|
||||
|
||||
cli, conn, err := podresources.GetV1Client(endpoint, defaultPodResourcesTimeout, defaultPodResourcesMaxSize)
|
||||
framework.ExpectNoError(err, "GetV1Client() failed err: %v", err)
|
||||
cli, conn, err := podresources.WaitForReady(podresources.GetClient(endpoint))
|
||||
framework.ExpectNoError(err, "GetClient() failed err: %v", err)
|
||||
defer conn.Close()
|
||||
|
||||
ginkgo.By("checking List and resources topology unaware resource should be without topology")
|
||||
@@ -884,8 +884,8 @@ var _ = SIGDescribe("POD Resources [Serial] [Feature:PodResources][NodeFeature:P
|
||||
endpoint, err := util.LocalEndpoint(defaultPodResourcesPath, podresources.Socket)
|
||||
framework.ExpectNoError(err, "LocalEndpoint() failed err %v", err)
|
||||
|
||||
cli, conn, err := podresources.GetV1Client(endpoint, defaultPodResourcesTimeout, defaultPodResourcesMaxSize)
|
||||
framework.ExpectNoError(err, "GetV1Client() failed err %v", err)
|
||||
cli, conn, err := podresources.WaitForReady(podresources.GetClient(endpoint))
|
||||
framework.ExpectNoError(err, "GetClient() failed err %v", err)
|
||||
defer conn.Close()
|
||||
|
||||
_, err = cli.List(ctx, &kubeletpodresourcesv1.ListPodResourcesRequest{})
|
||||
@@ -949,8 +949,8 @@ var _ = SIGDescribe("POD Resources [Serial] [Feature:PodResources][NodeFeature:P
|
||||
framework.ExpectNoError(err, "LocalEndpoint() failed err %v", err)
|
||||
|
||||
ginkgo.By("Connecting to the kubelet endpoint")
|
||||
cli, conn, err := podresources.GetV1Client(endpoint, defaultPodResourcesTimeout, defaultPodResourcesMaxSize)
|
||||
framework.ExpectNoError(err, "GetV1Client() failed err %v", err)
|
||||
cli, conn, err := podresources.WaitForReady(podresources.GetClient(endpoint))
|
||||
framework.ExpectNoError(err, "GetClient() failed err %v", err)
|
||||
defer conn.Close()
|
||||
|
||||
tries := podresourcesgrpc.DefaultQPS * 2 // This should also be greater than DefaultBurstTokens
|
||||
|
@@ -150,7 +150,7 @@ func getV1NodeDevices(ctx context.Context) (*kubeletpodresourcesv1.ListPodResour
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("Error getting local endpoint: %w", err)
|
||||
}
|
||||
client, conn, err := podresources.GetV1Client(endpoint, defaultPodResourcesTimeout, defaultPodResourcesMaxSize)
|
||||
client, conn, err := podresources.WaitForReady(podresources.GetClient(endpoint))
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("Error getting gRPC client: %w", err)
|
||||
}
|
||||
|
Reference in New Issue
Block a user