Skip to content

Commit

Permalink
#361 move process pending reservations job in spring managed scheduler
Browse files Browse the repository at this point in the history
  • Loading branch information
syjer committed Nov 22, 2018
1 parent f76b8c8 commit 39a7177
Show file tree
Hide file tree
Showing 4 changed files with 14 additions and 30 deletions.
1 change: 0 additions & 1 deletion src/main/java/alfio/config/DataSourceConfiguration.java
Original file line number Diff line number Diff line change
Expand Up @@ -244,7 +244,6 @@ public Trigger[] getTriggers() throws ParseException {
buildTrigger(CleanupExpiredPendingReservation.class, "CleanupExpiredPendingReservation", CleanupExpiredPendingReservation.INTERVAL),
buildTrigger(SendOfflinePaymentReminder.class, "SendOfflinePaymentReminder", SendOfflinePaymentReminder.INTERVAL),
buildTrigger(SendTicketAssignmentReminder.class, "SendTicketAssignmentReminder", SendTicketAssignmentReminder.INTERVAL),
buildTrigger(ProcessReservationRequests.class, "ProcessReservationRequests", ProcessReservationRequests.INTERVAL),
buildTrigger(ProcessReleasedTickets.class, "ProcessReleasedTickets", ProcessReleasedTickets.INTERVAL),
};
}
Expand Down
27 changes: 0 additions & 27 deletions src/main/java/alfio/manager/Jobs.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@
import lombok.AllArgsConstructor;
import lombok.extern.log4j.Log4j2;
import org.apache.commons.lang3.time.DateUtils;
import org.apache.commons.lang3.tuple.Pair;
import org.quartz.DisallowConcurrentExecution;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
Expand All @@ -36,11 +35,9 @@ public class Jobs {
private static final int ONE_MINUTE = 1000 * 60;
private static final int THIRTY_MINUTES = 30 * ONE_MINUTE;
private static final int THIRTY_SECONDS = 1000 * 30;
private static final int FIVE_SECONDS = 1000 * 5;

private final TicketReservationManager ticketReservationManager;
private final WaitingQueueSubscriptionProcessor waitingQueueSubscriptionProcessor;
private final AdminReservationRequestManager adminReservationRequestManager;

void cleanupExpiredPendingReservation() {
//cleanup reservation that have a expiration older than "now minus 10 minutes": this give some additional slack.
Expand All @@ -63,10 +60,6 @@ void processReleasedTickets() {
waitingQueueSubscriptionProcessor.handleWaitingTickets();
}

Pair<Integer, Integer> processReservationRequests() {
return adminReservationRequestManager.processPendingReservations();
}

@DisallowConcurrentExecution
@Log4j2
public static class CleanupExpiredPendingReservation implements Job {
Expand Down Expand Up @@ -115,26 +108,6 @@ public void execute(JobExecutionContext context) throws JobExecutionException {
}
}

@DisallowConcurrentExecution
@Log4j2
public static class ProcessReservationRequests implements Job {

public static long INTERVAL = FIVE_SECONDS;

@Autowired
private Jobs jobs;

@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
log.trace("running job " + getClass().getSimpleName());
long start = System.currentTimeMillis();
Pair<Integer, Integer> result = jobs.processReservationRequests();
if(result.getLeft() > 0 || result.getRight() > 0) {
log.info("ProcessReservationRequests: got {} success and {} failures. Elapsed {} ms", result.getLeft(), result.getRight(), System.currentTimeMillis() - start);
}
}
}

@DisallowConcurrentExecution
@Log4j2
public static class ProcessReleasedTickets implements Job {
Expand Down
14 changes: 13 additions & 1 deletion src/main/java/alfio/manager/SpringScheduledJobs.java
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
import lombok.AllArgsConstructor;
import lombok.extern.log4j.Log4j2;
import org.apache.commons.lang3.time.DateUtils;
import org.apache.commons.lang3.tuple.Pair;
import org.springframework.context.annotation.DependsOn;
import org.springframework.context.annotation.Profile;
import org.springframework.core.env.Environment;
Expand Down Expand Up @@ -59,8 +60,9 @@ public class SpringScheduledJobs {
private final SpecialPriceTokenGenerator specialPriceTokenGenerator;
private final UserManager userManager;
private final TicketReservationManager ticketReservationManager;
private final AdminReservationRequestManager adminReservationRequestManager;

//cron each minute: "0 0/1 * 1/1 * ? *"
//cron each minute: "0 0/1 * * * ?"

@Scheduled(fixedRate = ONE_MINUTE * 60)
public void cleanupUnreferencedBlobFiles() {
Expand Down Expand Up @@ -102,4 +104,14 @@ public void sendEmails() {
log.trace("running job sendEmails");
notificationManager.sendWaitingMessages();
}

@Scheduled(fixedRate = FIVE_SECONDS)
public void processReservationRequests() {
log.trace("running job processReservationRequests");
long start = System.currentTimeMillis();
Pair<Integer, Integer> result = adminReservationRequestManager.processPendingReservations();
if (result.getLeft() > 0 || result.getRight() > 0) {
log.info("ProcessReservationRequests: got {} success and {} failures. Elapsed {} ms", result.getLeft(), result.getRight(), System.currentTimeMillis() - start);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ public interface AdminReservationRequestRepository {
type = QueryType.TEMPLATE)
String insertRequest();

@Query("select id from admin_reservation_request where status = 'PENDING' order by request_id limit :limit for update")
@Query("select id from admin_reservation_request where status = 'PENDING' order by request_id limit :limit for update skip locked")
List<Long> findPendingForUpdate(@Bind("limit") int limit);

@Query("select * from admin_reservation_request where id = :id")
Expand Down

0 comments on commit 39a7177

Please sign in to comment.