You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dlab.apache.org by of...@apache.org on 2020/07/01 13:54:14 UTC
[incubator-dlab] branch develop updated: [DLAB-1907] Support
retrieving schedulers for stop for specific duration(now() - minuteOffset)
This is an automated email from the ASF dual-hosted git repository.
ofuks pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/incubator-dlab.git
The following commit(s) were added to refs/heads/develop by this push:
new 815548c [DLAB-1907] Support retrieving schedulers for stop for specific duration(now() - minuteOffset)
815548c is described below
commit 815548c5db13854c395b749b10a9444dcdbb69a1
Author: Oleh Fuks <ol...@gmail.com>
AuthorDate: Wed Jul 1 16:53:52 2020 +0300
[DLAB-1907] Support retrieving schedulers for stop for specific duration(now() - minuteOffset)
---
.../service/impl/SchedulerJobServiceImpl.java | 40 ++++++++++++++++------
.../service/impl/SchedulerJobServiceImplTest.java | 4 +--
2 files changed, 31 insertions(+), 13 deletions(-)
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/SchedulerJobServiceImpl.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/SchedulerJobServiceImpl.java
index e822090..5b80c42 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/SchedulerJobServiceImpl.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/SchedulerJobServiceImpl.java
@@ -209,11 +209,11 @@ public class SchedulerJobServiceImpl implements SchedulerJobService {
final OffsetDateTime desiredDateTime = OffsetDateTime.now().plusMinutes(minutesOffset);
final Predicate<SchedulerJobData> userPredicate = s -> user.equals(s.getUser());
final Stream<SchedulerJobData> computationalSchedulersStream =
- getComputationalSchedulersForStopping(desiredDateTime, false)
+ getComputationalSchedulersForStopping(desiredDateTime)
.stream()
.filter(userPredicate);
final Stream<SchedulerJobData> exploratorySchedulersStream =
- getExploratorySchedulersForStopping(desiredDateTime, false)
+ getExploratorySchedulersForStopping(desiredDateTime)
.stream()
.filter(userPredicate);
return Stream.concat(computationalSchedulersStream, exploratorySchedulersStream)
@@ -320,15 +320,21 @@ public class SchedulerJobServiceImpl implements SchedulerJobService {
}
}
+ private List<SchedulerJobData> getExploratorySchedulersForStopping(OffsetDateTime currentDateTime) {
+ return schedulerJobDAO.getExploratorySchedulerDataWithStatus(RUNNING)
+ .stream()
+ .filter(canSchedulerForStoppingBeApplied(currentDateTime, true))
+ .collect(Collectors.toList());
+ }
+
private List<SchedulerJobData> getExploratorySchedulersForStopping(OffsetDateTime currentDateTime,
boolean checkInactivity) {
-
final Date clusterMaxInactivityAllowedDate =
from(LocalDateTime.now().minusMinutes(ALLOWED_INACTIVITY_MINUTES).atZone(systemDefault()).toInstant());
return schedulerJobDAO.getExploratorySchedulerWithStatusAndClusterLastActivityLessThan(RUNNING,
clusterMaxInactivityAllowedDate)
.stream()
- .filter(canSchedulerForStoppingBeApplied(currentDateTime)
+ .filter(canSchedulerForStoppingBeApplied(currentDateTime, false)
.or(schedulerJobData -> checkInactivity && exploratoryInactivityCondition(schedulerJobData)))
.collect(Collectors.toList());
}
@@ -348,16 +354,16 @@ public class SchedulerJobServiceImpl implements SchedulerJobService {
.collect(Collectors.toList());
}
- private Predicate<SchedulerJobData> canSchedulerForStoppingBeApplied(OffsetDateTime currentDateTime) {
+ private Predicate<SchedulerJobData> canSchedulerForStoppingBeApplied(OffsetDateTime currentDateTime, boolean usingOffset) {
return schedulerJobData -> shouldSchedulerBeExecuted(schedulerJobData.getJobDTO(),
currentDateTime, schedulerJobData.getJobDTO().getStopDaysRepeat(),
- schedulerJobData.getJobDTO().getEndTime());
+ schedulerJobData.getJobDTO().getEndTime(), usingOffset);
}
private Predicate<SchedulerJobData> canSchedulerForStartingBeApplied(OffsetDateTime currentDateTime) {
return schedulerJobData -> shouldSchedulerBeExecuted(schedulerJobData.getJobDTO(),
currentDateTime, schedulerJobData.getJobDTO().getStartDaysRepeat(),
- schedulerJobData.getJobDTO().getStartTime());
+ schedulerJobData.getJobDTO().getStartTime(), false);
}
private Predicate<SchedulerJobData> canSchedulerForTerminatingBeApplied(OffsetDateTime currentDateTime) {
@@ -373,12 +379,20 @@ public class SchedulerJobServiceImpl implements SchedulerJobService {
convertedCurrentTime.equals(terminateDateTime.atOffset(timeZoneOffset).toLocalDateTime());
}
+ private List<SchedulerJobData> getComputationalSchedulersForStopping(OffsetDateTime currentDateTime) {
+ return schedulerJobDAO
+ .getComputationalSchedulerDataWithOneOfStatus(RUNNING, DataEngineType.SPARK_STANDALONE, RUNNING)
+ .stream()
+ .filter(canSchedulerForStoppingBeApplied(currentDateTime, true))
+ .collect(Collectors.toList());
+ }
+
private List<SchedulerJobData> getComputationalSchedulersForStopping(OffsetDateTime currentDateTime,
boolean checkInactivity) {
return schedulerJobDAO
.getComputationalSchedulerDataWithOneOfStatus(RUNNING, DataEngineType.SPARK_STANDALONE, RUNNING)
.stream()
- .filter(canSchedulerForStoppingBeApplied(currentDateTime)
+ .filter(canSchedulerForStoppingBeApplied(currentDateTime, false)
.or(schedulerJobData -> checkInactivity && computationalInactivityCondition(schedulerJobData)))
.collect(Collectors.toList());
}
@@ -455,12 +469,16 @@ public class SchedulerJobServiceImpl implements SchedulerJobService {
}
private boolean shouldSchedulerBeExecuted(SchedulerJobDTO dto, OffsetDateTime dateTime, List<DayOfWeek> daysRepeat,
- LocalTime time) {
+ LocalTime time, boolean usingOffset) {
LocalDateTime convertedDateTime = localDateTimeAtZone(dateTime, dto.getTimeZoneOffset());
-
return isSchedulerActive(dto, convertedDateTime)
&& daysRepeat.contains(convertedDateTime.toLocalDate().getDayOfWeek())
- && convertedDateTime.toLocalTime().equals(time);
+ && timeFilter(time, convertedDateTime.toLocalTime(), usingOffset);
+ }
+
+ private boolean timeFilter(LocalTime time, LocalTime convertedDateTime, boolean usingOffset) {
+ return usingOffset ? (time.isBefore(convertedDateTime) && time.isAfter(LocalDateTime.now().toLocalTime())) :
+ convertedDateTime.equals(time);
}
private boolean isSchedulerActive(SchedulerJobDTO dto, LocalDateTime convertedDateTime) {
diff --git a/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/SchedulerJobServiceImplTest.java b/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/SchedulerJobServiceImplTest.java
index 33b03b3..c66ba83 100644
--- a/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/SchedulerJobServiceImplTest.java
+++ b/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/SchedulerJobServiceImplTest.java
@@ -1053,7 +1053,7 @@ public class SchedulerJobServiceImplTest {
final LocalDate now = LocalDate.now();
final DayOfWeek[] weekDays = DayOfWeek.values();
final LocalTime currentTime = LocalTime.now();
- final LocalTime offsetTime = LocalTime.now().plusMinutes(minutesOffset);
+ final LocalTime offsetTime = LocalTime.now().plusMinutes(1);
final SchedulerJobData schedulerJobData = getSchedulerJobData(now,
now.plusDays(1), Arrays.asList(weekDays), Arrays.asList(weekDays),
LocalDateTime.of(now, currentTime.plusMinutes(minutesOffset).truncatedTo(ChronoUnit.MINUTES)), false,
@@ -1064,7 +1064,7 @@ public class SchedulerJobServiceImplTest {
LocalDateTime.of(now, currentTime.plusMinutes(minutesOffset).truncatedTo(ChronoUnit.MINUTES)),
false, "user123", offsetTime.truncatedTo(ChronoUnit.MINUTES));
- when(schedulerJobDAO.getExploratorySchedulerWithStatusAndClusterLastActivityLessThan(any(UserInstanceStatus.class), any(Date.class))).thenReturn(Arrays.asList(schedulerJobData, secondScheduler));
+ when(schedulerJobDAO.getExploratorySchedulerDataWithStatus(any(UserInstanceStatus.class))).thenReturn(Arrays.asList(schedulerJobData, secondScheduler));
when(securityService.getUserInfoOffline(anyString())).thenReturn(getUserInfo());
when(schedulerJobDAO.getComputationalSchedulerDataWithOneOfStatus(any(UserInstanceStatus.class),
any(DataEngineType.class), anyVararg())).thenReturn(singletonList(schedulerJobData));
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@dlab.apache.org
For additional commands, e-mail: commits-help@dlab.apache.org