Code review comment: True, made changes in amended commit.

Code under review:
protected void maintain() {
        AtomicInteger failures = new AtomicInteger(0);
        AtomicInteger zeroQps = new AtomicInteger(0);
        AtomicReference<Exception> lastException = new AtomicReference<>(null);
        List<Application> applicationList = applications.asList();

        
        ForkJoinPool pool = new ForkJoinPool(applicationsToUpdateInParallel);
        pool.submit(() -> {
            applicationList.parallelStream().forEach(application -> {
                try {
                    applications.lockIfPresent(application.id(), locked ->
                            applications.store(locked.with(controller().metricsService().getApplicationMetrics(application.id()))));

                    applications.lockIfPresent(application.id(), locked ->
                            applications.store(locked.withRotationStatus(rotationStatus(application))));

                    for (Deployment deployment : application.deployments().values()) {
                        MetricsService.DeploymentMetrics deploymentMetrics = controller().metricsService()
                                                                                         .getDeploymentMetrics(application.id(), deployment.zone());
                        if (deploymentMetrics.queriesPerSecond() < 0.0001) {
                            zeroQps.incrementAndGet();
                        }

                        DeploymentMetrics newMetrics = new DeploymentMetrics(deploymentMetrics.queriesPerSecond(),
                                                                             deploymentMetrics.writesPerSecond(),
                                                                             deploymentMetrics.documentCount(),
                                                                             deploymentMetrics.queryLatencyMillis(),
                                                                             deploymentMetrics.writeLatencyMillis());

                        applications.lockIfPresent(application.id(), locked ->
                                applications.store(locked.with(deployment.zone(), newMetrics)
                                                         .recordActivityAt(controller().clock().instant(), deployment.zone())));
                    }
                } catch (Exception e) {
                    failures.incrementAndGet();
                    lastException.set(e);
                }
            });
        });
        pool.shutdown();
        try {
            pool.awaitTermination(30, TimeUnit.MINUTES);
            log.log(Level.WARNING, String.format("Number of application with 0 qps: %d/%d", zeroQps.get(), applicationList.size()));
            if (lastException.get() != null) {
                log.log(Level.WARNING, String.format("Failed to query metrics service for %d/%d applications. Last error: %s. Retrying in %s",
                                                     failures.get(),
                                                     applicationList.size(),
                                                     Exceptions.toMessageString(lastException.get()),
                                                     maintenanceInterval()));
            }
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
    }

Line commented on: log.log(Level.WARNING, String.format("Number of application with 0 qps: %d/%d", zeroQps.get(), applicationList.size()));

Revised code:
protected void maintain() {
        AtomicInteger failures = new AtomicInteger(0);
        AtomicInteger zeroQps = new AtomicInteger(0);
        AtomicReference<Exception> lastException = new AtomicReference<>(null);
        List<Application> applicationList = applications.asList();

        
        ForkJoinPool pool = new ForkJoinPool(applicationsToUpdateInParallel);
        pool.submit(() -> {
            applicationList.parallelStream().forEach(application -> {
                try {
                    applications.lockIfPresent(application.id(), locked ->
                            applications.store(locked.with(controller().metricsService().getApplicationMetrics(application.id()))));

                    applications.lockIfPresent(application.id(), locked ->
                            applications.store(locked.withRotationStatus(rotationStatus(application))));

                    for (Deployment deployment : application.deployments().values()) {
                        MetricsService.DeploymentMetrics deploymentMetrics = controller().metricsService()
                                                                                         .getDeploymentMetrics(application.id(), deployment.zone());
                        if (deploymentMetrics.queriesPerSecond() < 0.0001) {
                            zeroQps.incrementAndGet();
                        }

                        DeploymentMetrics newMetrics = new DeploymentMetrics(deploymentMetrics.queriesPerSecond(),
                                                                             deploymentMetrics.writesPerSecond(),
                                                                             deploymentMetrics.documentCount(),
                                                                             deploymentMetrics.queryLatencyMillis(),
                                                                             deploymentMetrics.writeLatencyMillis());

                        applications.lockIfPresent(application.id(), locked ->
                                applications.store(locked.with(deployment.zone(), newMetrics)
                                                         .recordActivityAt(controller().clock().instant(), deployment.zone())));
                    }
                } catch (Exception e) {
                    failures.incrementAndGet();
                    lastException.set(e);
                }
            });
        });
        pool.shutdown();
        try {
            pool.awaitTermination(30, TimeUnit.MINUTES);
            log.log(Level.INFO, String.format("Number of application with 0 qps: %d/%d", zeroQps.get(), applicationList.size()));
            if (lastException.get() != null) {
                log.log(Level.WARNING, String.format("Failed to query metrics service for %d/%d applications. Last error: %s. Retrying in %s",
                                                     failures.get(),
                                                     applicationList.size(),
                                                     Exceptions.toMessageString(lastException.get()),
                                                     maintenanceInterval()));
            }
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
    }