Skip to content

Commit 4073617

Browse files
committed
fix(nebius): pagination in get images call
1 parent 758e933 commit 4073617

1 file changed

Lines changed: 25 additions & 21 deletions

File tree

v1/providers/nebius/instance.go

Lines changed: 25 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1335,37 +1335,33 @@ func (c *NebiusClient) getWorkingPublicImageID(ctx context.Context, requestedIma
13351335
v1.LogField("requestedImage", requestedImage),
13361336
v1.LogField("publicImagesParent", publicImagesParent))
13371337

1338-
imagesResp, err := c.sdk.Services().Compute().V1().Image().List(ctx, &compute.ListImagesRequest{
1339-
ParentId: publicImagesParent,
1340-
})
1341-
if err != nil {
1342-
c.logger.Error(ctx, fmt.Errorf("failed to list public images: %w", err),
1343-
v1.LogField("publicImagesParent", publicImagesParent))
1344-
return "", fmt.Errorf("failed to list public images: %w", err)
1345-
}
1346-
1347-
totalCount := len(imagesResp.GetItems())
1348-
c.logger.Info(ctx, "getWorkingPublicImageID: list returned",
1349-
v1.LogField("totalImages", totalCount))
1350-
1351-
if totalCount == 0 {
1352-
return "", fmt.Errorf("no public images available")
1353-
}
1354-
13551338
requestedLower := strings.ToLower(requestedImage)
13561339

13571340
var bestImage *compute.Image
13581341
bestScore := -1
1359-
consideredCount, arm64Skipped, nilMetadataSkipped := 0, 0, 0
1342+
totalCount, consideredCount, arm64Skipped, nilMetadataSkipped := 0, 0, 0, 0
1343+
var iterErr error
1344+
1345+
// Filter auto-paginates via the SDK. Using List directly only returns the first
1346+
// page (small default size), which can omit ubuntu24.04-cuda13.0 entirely.
1347+
imageIter := c.sdk.Services().Compute().V1().Image().Filter(ctx, &compute.ListImagesRequest{
1348+
ParentId: publicImagesParent,
1349+
PageSize: 1000,
1350+
})
1351+
imageIter(func(image *compute.Image, err error) bool {
1352+
if err != nil {
1353+
iterErr = err
1354+
return false
1355+
}
1356+
totalCount++
13601357

1361-
for _, image := range imagesResp.GetItems() {
13621358
if image.Metadata == nil {
13631359
nilMetadataSkipped++
1364-
continue
1360+
return true
13651361
}
13661362
if image.Spec != nil && image.Spec.GetCpuArchitecture() == compute.ImageSpec_ARM64 {
13671363
arm64Skipped++
1368-
continue
1364+
return true
13691365
}
13701366
consideredCount++
13711367

@@ -1384,9 +1380,17 @@ func (c *NebiusClient) getWorkingPublicImageID(ctx context.Context, requestedIma
13841380
bestScore = score
13851381
bestImage = image
13861382
}
1383+
return true
1384+
})
1385+
1386+
if iterErr != nil {
1387+
c.logger.Error(ctx, fmt.Errorf("failed to iterate public images: %w", iterErr),
1388+
v1.LogField("publicImagesParent", publicImagesParent))
1389+
return "", fmt.Errorf("failed to iterate public images: %w", iterErr)
13871390
}
13881391

13891392
c.logger.Info(ctx, "getWorkingPublicImageID: scoring summary",
1393+
v1.LogField("totalImages", totalCount),
13901394
v1.LogField("consideredCount", consideredCount),
13911395
v1.LogField("arm64Skipped", arm64Skipped),
13921396
v1.LogField("nilMetadataSkipped", nilMetadataSkipped),

0 commit comments

Comments
 (0)