Example usage for org.springframework.data.domain Slice hasContent

List of usage examples for org.springframework.data.domain Slice hasContent

Introduction

In this page you can find the example usage for org.springframework.data.domain Slice hasContent.

Prototype

boolean hasContent();

Source Link

Document

Returns whether the Slice has content at all.

Usage

From source file:com.netflix.genie.core.jpa.services.JpaJobPersistenceServiceImpl.java

/**
 * {@inheritDoc}/*from   w  w w .ja v  a 2  s.  co  m*/
 */
@Override
public long deleteBatchOfJobsCreatedBeforeDate(@NotNull final Date date, @Min(1) final int maxDeleted,
        @Min(1) final int pageSize) {
    log.info("Attempting to delete batch of jobs (at most {}) created before {} ms from epoch", maxDeleted,
            date.getTime());
    long jobExecutionsDeleted = 0;
    long jobMetadatasDeleted = 0;
    long jobsDeleted = 0;
    long jobRequestsDeleted = 0;
    long totalAttemptedDeletions = 0;
    final Pageable page = new PageRequest(0, pageSize);
    Slice<IdProjection> idProjections;
    do {
        idProjections = this.jobRequestRepo.findByCreatedBefore(date, page);
        if (idProjections.hasContent()) {
            final List<String> ids = idProjections.getContent().stream().map(IdProjection::getId)
                    .collect(Collectors.toList());

            final long toBeDeleted = ids.size();
            totalAttemptedDeletions += toBeDeleted;
            // Due to optimizations for queries these entity mappings aren't reversed so cascade delete
            // isn't available and runtime exception thrown if you try to delete from the top.

            log.debug("Attempting to delete {} rows from job_executions...", toBeDeleted);
            final long deletedExecutions = this.jobExecutionRepo.deleteByIdIn(ids);
            log.debug("Successfully deleted {} rows from job_executions...", deletedExecutions);
            if (deletedExecutions != toBeDeleted) {
                log.error("Deleted {} job execution records but expected to delete {}", deletedExecutions,
                        toBeDeleted);
            }
            jobExecutionsDeleted += deletedExecutions;

            log.debug("Attempting to delete {} rows from job_metadata...", toBeDeleted);
            final long deletedMetadata = this.jobMetadataRepository.deleteByIdIn(ids);
            log.debug("Successfully deleted {} rows from job_metadata...", deletedMetadata);
            if (deletedMetadata != toBeDeleted) {
                log.error("Deleted {} job metadata records but expected to delete {}", deletedMetadata,
                        toBeDeleted);
            }
            jobMetadatasDeleted += deletedMetadata;

            log.debug("Attempting to delete {} rows from jobs...", toBeDeleted);
            final long deletedJobs = this.jobRepo.deleteByIdIn(ids);
            log.debug("Successfully deleted {} rows from jobs...", deletedJobs);
            if (deletedMetadata != toBeDeleted) {
                log.error("Deleted {} job records but expected to delete {}", deletedJobs, toBeDeleted);
            }
            jobsDeleted += deletedJobs;

            log.debug("Attempting to delete {} rows from job_requests...", toBeDeleted);
            final long deletedJobRequests = this.jobRequestRepo.deleteByIdIn(ids);
            log.debug("Successfully deleted {} rows from job_requests...", deletedJobRequests);
            if (deletedJobRequests != toBeDeleted) {
                log.error("Deleted {} job request records but expected to delete {}", deletedJobRequests,
                        toBeDeleted);
            }
            jobRequestsDeleted += deletedJobRequests;
        }
    } while (idProjections.hasNext() && totalAttemptedDeletions < maxDeleted);

    log.info("Deleted a chunk of {} job records: {} execution, {} metadata, {} job and {} job request records",
            totalAttemptedDeletions, jobExecutionsDeleted, jobMetadatasDeleted, jobsDeleted,
            jobRequestsDeleted);
    return totalAttemptedDeletions;
}

From source file:com.netflix.genie.web.jpa.services.JpaJobPersistenceServiceImpl.java

/**
 * {@inheritDoc}//  w  w w.j  a v  a2s  .  c  o m
 */
@Override
public long deleteBatchOfJobsCreatedBeforeDate(@NotNull final Instant date, @Min(1) final int maxDeleted,
        @Min(1) final int pageSize) {
    log.info("Attempting to delete batch of jobs (at most {}) created before {} ms from epoch", maxDeleted,
            date.toEpochMilli());
    long jobsDeleted = 0;
    long totalAttemptedDeletions = 0;
    final Pageable page = PageRequest.of(0, pageSize);
    Slice<IdProjection> idProjections;
    do {
        idProjections = this.jobRepository.findByCreatedBefore(date, page);
        if (idProjections.hasContent()) {
            final List<Long> ids = idProjections.getContent().stream().map(IdProjection::getId)
                    .collect(Collectors.toList());

            final long toBeDeleted = ids.size();
            totalAttemptedDeletions += toBeDeleted;

            log.debug("Attempting to delete {} rows from jobs...", toBeDeleted);
            final long deletedJobs = this.jobRepository.deleteByIdIn(ids);
            log.debug("Successfully deleted {} rows from jobs...", deletedJobs);
            if (deletedJobs != toBeDeleted) {
                log.error("Deleted {} job records but expected to delete {}", deletedJobs, toBeDeleted);
            }
            jobsDeleted += deletedJobs;
        }
    } while (idProjections.hasNext() && totalAttemptedDeletions < maxDeleted);

    log.info("Deleted a chunk of {} job records: {} job", totalAttemptedDeletions, jobsDeleted);
    return totalAttemptedDeletions;
}