Azure-sdk-for-java: Azure Blob - listBlobsByHierarchy (). IterableByPage (10) - не предоставляет результаты на основе определенного размера страницы

Созданный на 19 мар. 2021  ·  3Комментарии  ·  Источник: Azure/azure-sdk-for-java

У меня есть папка в контейнере BLOB-объектов, в котором есть 112 BLOB-объектов. Я решил получить 10 больших двоичных объектов на страницу, но я получаю все 112 больших двоичных объектов за один ответ. Пожалуйста, найдите ниже образец кода, чтобы воспроизвести эту проблему.

PagedIterable<BlobItem> pagedIterable = getBlobContainerClient().listBlobsByHierarchy("batch/");

        Iterable<PagedResponse<BlobItem>> iterableByPage = pagedIterable.iterableByPage(10);

        for (PagedResponse<BlobItem> pagedResponse : iterableByPage) {
            Iterator<BlobItem> iterableStream = pagedResponse.getElements().iterator();
            int counter = 1;
            System.err.println("counter - " + counter);

            while (iterableStream.hasNext()) {
                BlobItem blobItem = iterableStream.next();
                LOGGER.info(counter++ +" ** listBlob name -'{}' properties-'{}', tags -'{}', version -'{}', snapshot -'{}' ***", 
                                        blobItem.getName(), blobItem.getProperties(), blobItem.getTags(), blobItem.getVersionId(),
                                        blobItem.getSnapshot());

            }
        }

Скриншот
image

Воспроизводить

  1. Создать папку со 112 элементами
  2. Запустите приведенный выше образец кода, и вы получите все элементы в виде ответа на одной странице.

Ожидаемое поведение
В ответе на одну страницу должно быть доступно только 10 больших двоичных объектов.

Настройка (пожалуйста, заполните следующую информацию, если применимо):
ОС: окно
IDE: затмение
Используемая версия библиотеки: azure-storage-blob-12.10.0

Client Storage bug customer-reported

Все 3 Комментарий

Привет @ abhikt48
Спасибо, что разместили эту проблему. Мы посмотрим, что здесь не так.

Похоже, это дубликат # 12496. Как уже упоминала Гаури, я постараюсь воспроизвести это сегодня или в понедельник.

@ rickle-msft К вашему сведению, я провел такое же тестирование с другим подходом, и он работает нормально. Я предоставил пользовательский ListBlobsOptions и установил setMaxResultsPerPage . Но я не обнаружил никакого влияния pagedIterable.iterableByPage(10) , похоже, это избыточно. Не могли бы вы проверить и подтвердить?

ListBlobsOptions listBlobsOptions = new ListBlobsOptions();
        listBlobsOptions.setPrefix(directoryName);
        listBlobsOptions.setMaxResultsPerPage(10);        
PagedIterable<BlobItem> pagedIterable = getBlobContainerClient().listBlobsByHierarchy(null, listBlobsOptions , null);
Iterable<PagedResponse<BlobItem>> iterableByPage = pagedIterable.iterableByPage(10);

Не могли бы вы помочь мне с приведенными ниже вопросами, связанными с операцией listBlobsByHierarchy(null, listBlobsOptions , null) -

  1. listBlobsOptions.setPrefix(directoryName + "prefix"); - Я не нашел возможности установить каталог специально в ListBlobsOptions или BlobContainerClient.listBlobsByHierarchy(null, listBlobsOptions , null) . Могу ли я предположить, что - имя_каталога может быть предоставлено только через listBlobsOptions.setPrefix() ? Пожалуйста подтвердите.
  2. Старый SDK предоставляет возможность получить длину результата, но я не нашел ни одного варианта в новом SDK с операцией listBlobsByHierarchy . Не могли бы вы проверить и подтвердить, есть ли у нас возможность проверить размер списка

Старый SDK - длина списка

ResultSegment<ListBlobItem> listBlobResult = provider.getBlobListInDirectory(containerName, directoryName, 
                                                                blobPrefix, index, continuationToken);
        totalItems = listBlobResult.getLength();

Выскажите свое мнение по вышеуказанным вопросам, чтобы я мог продолжить.

С уважением,
Абхишек Кумар

Была ли эта страница полезной?
0 / 5 - 0 рейтинги