Как вернуть Stream, перебирая огромную корзину s3 с токенами? - PullRequest
0 голосов
/ 10 февраля 2020
  1. Я перебираю корзину S3, с большим количеством файлов и страниц.
  2. Каждый раз я получаю список объектов из своего ведра.
  3. Каждый из этих списков содержит объекты в формате nd json .gz.
  4. После этого я перебираю этот список объектов.
  5. После завершения он возвращается обратно к основному l oop (1), используя следующий токен из результата запроса.
  6. И так далее, пока других файлов не существует.

Мой wi sh - передать каждый из этих файлов njdon.gz в поток. Я не совсем понимаю:

  1. как использовать, пока l oop (для отправки каждый раз новый запрос в корзину s3)
  2. , а затем получить ответ обратно (с содержит следующий токен для следующих страниц и списка объектов)
  3. Перебираем список объектов и вводим каждый из файлов в поток
  4. И затем возвращаемся к l oop и делаем все до тех пор, пока токен не останется.

Извините за длинный текст, я понятия не имею, как это объяснить лучше. Заранее спасибо за любую помощь, я действительно отчаялся.

public Stream<GZIPInputStream> getMeasurements() throws IOException {
 //S3 supports only an objects list only by the prefix.
    ListObjectsV2Request request = new ListObjectsV2Request().withBucketName(bucketName).withPrefix("realtime-gzipped/");
    ListObjectsV2Result result;

    do {
        // initialize result. Using a request
        result = client.listObjectsV2(request);

        // For each summery, out of S3ObjectSummary
        for (S3ObjectSummary summary : result.getObjectSummaries()) {
            // filter all objects by the suffix.
            if (summary.getKey().endsWith(".ndjson.gz")) {
                System.out.println(summary.getKey() + " : " + summary.getSize());

            }
        }

        //Update the ListObjectsV2Request
        String token = result.getNextContinuationToken();
        request.setContinuationToken(token);
    } while (result.isTruncated());



}
...