Skip to content

Commit

Permalink
Merge pull request #6 from schlusslicht/dev
Browse files Browse the repository at this point in the history
Fix Java heap memory exhaustion on startup
  • Loading branch information
hermesj committed Jul 16, 2024
2 parents 3b71c70 + a134e28 commit e6b56d7
Show file tree
Hide file tree
Showing 6 changed files with 43 additions and 15 deletions.
9 changes: 9 additions & 0 deletions src/main/java/de/uoc/dh/idh/autodone/base/BaseEntity.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package de.uoc.dh.idh.autodone.base;

import java.util.UUID;

public interface BaseEntity {

public UUID getUuid();

}
3 changes: 3 additions & 0 deletions src/main/java/de/uoc/dh/idh/autodone/base/BaseRepository.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,7 @@

@NoRepositoryBean()
public interface BaseRepository<T> extends CrudRepository<T, UUID>, PagingAndSortingRepository<T, UUID> {

public Iterable<BaseEntity> findAllBy();

}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Repository;

import de.uoc.dh.idh.autodone.base.BaseEntity;
import de.uoc.dh.idh.autodone.base.BaseRepository;
import de.uoc.dh.idh.autodone.entities.GroupEntity;
import de.uoc.dh.idh.autodone.entities.StatusEntity;
Expand All @@ -28,7 +29,7 @@ public void deleteByUuidAndGroupTokenUsernameAndGroupTokenServerDomain(

//

public Iterable<StatusEntity> findAllByDateAfterAndGroupEnabledTrueAndIdIsNull(
public Iterable<BaseEntity> findAllByDateAfterAndGroupEnabledTrueAndIdIsNull(

Instant date

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,14 +35,18 @@ public class MediaService extends BaseService<MediaEntity> {

//

public MediaEntity getAny(UUID uuid) {
return mediaRepository.findById(uuid).get();
}

public Page<MediaEntity> getPage(String page, String sort, StatusEntity status) {
return getPage(pageRequest(page, sort), status.media);
}

//

public MediaEntity publish(UUID uuid) {
return publish(mediaRepository.findById(uuid).get());
return publish(getAny(uuid));
}

public MediaEntity publish(MediaEntity media) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service;

import de.uoc.dh.idh.autodone.base.BaseEntity;
import de.uoc.dh.idh.autodone.base.BaseService;
import de.uoc.dh.idh.autodone.entities.GroupEntity;
import de.uoc.dh.idh.autodone.entities.StatusEntity;
Expand All @@ -35,18 +36,22 @@ public class StatusService extends BaseService<StatusEntity> {

//

public Iterable<StatusEntity> getAll(Instant date) {
public Iterable<BaseEntity> getAll(Instant date) {
return statusRepository.findAllByDateAfterAndGroupEnabledTrueAndIdIsNull(date);
}

public StatusEntity getAny(UUID uuid) {
return statusRepository.findById(uuid).get();
}

public Page<StatusEntity> getPage(String page, String sort, GroupEntity group) {
return getPage(pageRequest(page, sort), group.status);
}

//

public StatusEntity publish(UUID uuid) {
return publish(statusRepository.findById(uuid).get());
return publish(getAny(uuid));
}

public StatusEntity publish(StatusEntity status) {
Expand Down
28 changes: 17 additions & 11 deletions src/main/java/de/uoc/dh/idh/autodone/services/TimerService.java
Original file line number Diff line number Diff line change
Expand Up @@ -71,9 +71,11 @@ public ScheduledFuture<StatusEntity> scheduleStatus(StatusEntity status) {

if (status.id == null) {
if (delay > AUTODONE_SCHEDULING && future == null) {
future = scheduledStatus.put(status.uuid, scheduler.schedule(() -> {
scheduledStatus.remove(status.uuid);
return statusService.publish(status.uuid);
var uuid = status.uuid;

future = scheduledStatus.put(uuid, scheduler.schedule(() -> {
scheduledStatus.remove(uuid);
return statusService.publish(uuid);
}, delay, SECONDS));
}

Expand Down Expand Up @@ -106,9 +108,11 @@ public ScheduledFuture<MediaEntity> scheduleMedia(MediaEntity media) {

if (media.id == null) {
if (delay > AUTODONE_SCHEDULING && future == null) {
future = scheduledMedia.put(media.uuid, scheduler.schedule(() -> {
scheduledMedia.remove(media.uuid);
return mediaService.publish(media.uuid);
var uuid = media.uuid;

future = scheduledMedia.put(uuid, scheduler.schedule(() -> {
scheduledMedia.remove(uuid);
return mediaService.publish(uuid);
}, delay, SECONDS));
}
}
Expand All @@ -126,11 +130,13 @@ public boolean unscheduleMedia(MediaEntity media) {

@PostConstruct()
private void postConstruct() {
new TransactionTemplate(transactionManager).executeWithoutResult((ignored) -> {
for (var status : statusService.getAll(now().plusSeconds(AUTODONE_SCHEDULING))) {
scheduleStatus(status);
}
});
for (var entity : new TransactionTemplate(transactionManager).execute((ignored) -> {
return statusService.getAll(now().plusSeconds(AUTODONE_SCHEDULING));
})) {
new TransactionTemplate(transactionManager).executeWithoutResult((ignored) -> {
scheduleStatus(statusService.getAny(entity.getUuid()));
});
}
}

}

0 comments on commit e6b56d7

Please sign in to comment.