javaaws-sdk

Cannot retrieve more results using ListJobRunsRequest due to invalid token


Using EMR serverless client, I'm retrieving job runs for a specific application. The maximum fetch size set by AWS is 50, hence I need to perform further calls, providing a token which is taken from the response. However, regardless of the limit, usage of the token for the next request always fails due to "software.amazon.awssdk.services.emrserverless.model.ValidationException: Invalid token encountered".

    try (var client = EmrServerlessClient.builder().region(AwsUtils.getRegion()).build()) {
      String token = null;
      do {
        var builder = ListJobRunsRequest.builder()
            .maxResults(MAX_RESULTS)
            .applicationId(applicationId)
            .createdAtAfter(Instant.now().minus(days, ChronoUnit.DAYS));
        if (token != null) {
          builder.nextToken(token);
        }
        if (status != null) {
          builder.states(status);
        }

        var response = client.listJobRuns(builder.build());
        jobRuns.addAll(response.jobRuns());
        token = response.nextToken();
      } while (token != null);
    }

The first batch/page of results is always retrieved successfully but further request with token always fail. Here is a sample token I got from the response which is deemed invalid in following request:

AAMA-EFRSURBSGdDanhVdTVFaVc4aDRkcE5QKzBkOVFEaFRzUFNtUHloQU9Pa2FRL1dFalVRR25aT2xoTVdtQU5UakY5elhKZ0NSQkFBQUFmakI4QmdrcWhraUc5dzBCQndhZ2J6QnRBZ0VBTUdnR0NTcUdTSWIzRFFFSEFUQWVCZ2xnaGtnQlpRTUVBUzR3RVFRTVJMUHFDUTVtc0hwaW5yejNBZ0VRZ0RzbUpFNzBnamtleWVBMDRDOWFYU1FzV2NhZUF3RkNvYWRUbWdoR21NMEtjZHA1dHZaZDJvcFFyZndZRW5wK3U5WEdiTW1JaXdJWDYxOGlzZz09S9CrYd6s9RZvUvvvsyUsAkySOxDk0wdDlJxBXBYhktRauhpGcNpvT4Z2KWf1QdPTC8QIGKTS-Ew2r8Phnwfr7U6xYiereRpJvN7sVLZaAN_UOefwsuzHnyChB-QNPTYYxWsP-_lgR76BYhLMwVgRPZrN112TZ9kksR-5iezObRKk3IVWOjWxisHiuEsrm7ybZJSNJUtO8V5xwXf2zMMRwLwlp82YAfgu9sCtVZ0Ma0xVKxORyNsSw5GeeZq6CbqskMTRTggICI7e5ke78--5fpzoR4HTs2tWtDDpzJ2Yr5lIzbcgL4qOPk73RiFKATL9eDFnzapGBqMkkiRP-kUO3hqxfeqEFmZBXAzG5BlgDJOp18xrm-TNk7KZ6g6rAUUdPHJB00rFVP72ihZoWv2HlJ38M7y1xCepwbj9IH9VboDGjasf_q8HBpsnZxrRjUWlgc3mfd7FBPozbt0mFnQ0cDVJDkfkl23SATJEIA==

Solution

  • Perhaps you can try the paginator.

    https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/emrserverless/EmrServerlessClient.html#listJobRunsPaginator(software.amazon.awssdk.services.emrserverless.model.ListJobRunsRequest)