You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aurora.apache.org by ke...@apache.org on 2014/05/30 20:12:56 UTC
git commit: AURORA-478: Fix /cron endpoint.
Repository: incubator-aurora
Updated Branches:
refs/heads/master fd14fed46 -> 135459758
AURORA-478: Fix /cron endpoint.
Testing Done:
./gradlew -Pq build
./gradlew run
curl -s http://localhost:8081/cron | python -m json.tool
Bugs closed: AURORA-478
Reviewed at https://reviews.apache.org/r/22065/
Project: http://git-wip-us.apache.org/repos/asf/incubator-aurora/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-aurora/commit/13545975
Tree: http://git-wip-us.apache.org/repos/asf/incubator-aurora/tree/13545975
Diff: http://git-wip-us.apache.org/repos/asf/incubator-aurora/diff/13545975
Branch: refs/heads/master
Commit: 135459758d55d5d89e127e9eab06d03d236d2c0c
Parents: fd14fed
Author: Kevin Sweeney <ke...@apache.org>
Authored: Fri May 30 10:34:56 2014 -0700
Committer: Kevin Sweeney <ke...@apache.org>
Committed: Fri May 30 10:35:02 2014 -0700
----------------------------------------------------------------------
.../cron/quartz/CronJobManagerImpl.java | 14 +++--
.../org/apache/aurora/scheduler/http/Cron.java | 12 ++--
.../cron/quartz/CronJobManagerImplTest.java | 11 ++--
.../apache/aurora/scheduler/http/CronTest.java | 59 ++++++++++++++++++++
4 files changed, 84 insertions(+), 12 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-aurora/blob/13545975/src/main/java/org/apache/aurora/scheduler/cron/quartz/CronJobManagerImpl.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/aurora/scheduler/cron/quartz/CronJobManagerImpl.java b/src/main/java/org/apache/aurora/scheduler/cron/quartz/CronJobManagerImpl.java
index 3359425..9eda3b7 100644
--- a/src/main/java/org/apache/aurora/scheduler/cron/quartz/CronJobManagerImpl.java
+++ b/src/main/java/org/apache/aurora/scheduler/cron/quartz/CronJobManagerImpl.java
@@ -22,6 +22,7 @@ import javax.inject.Inject;
import com.google.common.base.Optional;
import com.google.common.base.Throwables;
+import com.google.common.collect.FluentIterable;
import com.google.common.collect.ImmutableMap;
import org.apache.aurora.gen.CronCollisionPolicy;
@@ -36,7 +37,7 @@ import org.apache.aurora.scheduler.storage.Storage.MutateWork;
import org.apache.aurora.scheduler.storage.Storage.Work;
import org.apache.aurora.scheduler.storage.entities.IJobConfiguration;
import org.apache.aurora.scheduler.storage.entities.IJobKey;
-import org.quartz.JobDetail;
+import org.quartz.CronTrigger;
import org.quartz.JobKey;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
@@ -240,10 +241,15 @@ class CronJobManagerImpl implements CronJobManager {
ImmutableMap.Builder<IJobKey, CrontabEntry> scheduledJobs = ImmutableMap.builder();
try {
for (JobKey jobKey : scheduler.getJobKeys(GroupMatcher.<JobKey>anyGroup())) {
- Optional<JobDetail> jobDetail = Optional.fromNullable(scheduler.getJobDetail(jobKey));
- if (jobDetail.isPresent()) {
+ // The quartz API allows jobs to have multiple triggers. We don't use that feature but
+ // we're defensive here since this function is used for debugging.
+ Optional<CronTrigger> trigger = FluentIterable.from(scheduler.getTriggersOfJob(jobKey))
+ .filter(CronTrigger.class)
+ .first();
+ if (trigger.isPresent()) {
scheduledJobs.put(
- Quartz.auroraJobKey(jobKey), CrontabEntry.parse(jobDetail.get().getDescription()));
+ Quartz.auroraJobKey(jobKey),
+ Quartz.crontabEntry(trigger.get()));
}
}
} catch (SchedulerException e) {
http://git-wip-us.apache.org/repos/asf/incubator-aurora/blob/13545975/src/main/java/org/apache/aurora/scheduler/http/Cron.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/aurora/scheduler/http/Cron.java b/src/main/java/org/apache/aurora/scheduler/http/Cron.java
index 6ccf583..fd658e1 100644
--- a/src/main/java/org/apache/aurora/scheduler/http/Cron.java
+++ b/src/main/java/org/apache/aurora/scheduler/http/Cron.java
@@ -24,7 +24,10 @@ import javax.ws.rs.core.Response;
import com.google.common.collect.ImmutableMap;
+import org.apache.aurora.scheduler.base.JobKeys;
import org.apache.aurora.scheduler.cron.CronJobManager;
+import org.apache.aurora.scheduler.cron.CrontabEntry;
+import org.apache.aurora.scheduler.storage.entities.IJobKey;
/**
* HTTP interface to dump state of the internal cron scheduler.
@@ -46,10 +49,11 @@ public class Cron {
@GET
@Produces(MediaType.APPLICATION_JSON)
public Response dumpContents() {
- Map<String, Object> response = ImmutableMap.<String, Object>builder()
- .put("scheduled", cronManager.getScheduledJobs())
- .build();
+ ImmutableMap.Builder<String, String> scheduled = ImmutableMap.builder();
+ for (Map.Entry<IJobKey, CrontabEntry> entry : cronManager.getScheduledJobs().entrySet()) {
+ scheduled.put(JobKeys.canonicalString(entry.getKey()), entry.getValue().toString());
+ }
- return Response.ok(response).build();
+ return Response.ok(ImmutableMap.<String, Object>of("scheduled", scheduled.build())).build();
}
}
http://git-wip-us.apache.org/repos/asf/incubator-aurora/blob/13545975/src/test/java/org/apache/aurora/scheduler/cron/quartz/CronJobManagerImplTest.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/aurora/scheduler/cron/quartz/CronJobManagerImplTest.java b/src/test/java/org/apache/aurora/scheduler/cron/quartz/CronJobManagerImplTest.java
index efa0a58..d56c36c 100644
--- a/src/test/java/org/apache/aurora/scheduler/cron/quartz/CronJobManagerImplTest.java
+++ b/src/test/java/org/apache/aurora/scheduler/cron/quartz/CronJobManagerImplTest.java
@@ -14,6 +14,7 @@
package org.apache.aurora.scheduler.cron.quartz;
import java.util.Collections;
+import java.util.List;
import java.util.Map;
import java.util.TimeZone;
@@ -35,6 +36,7 @@ import org.apache.aurora.scheduler.storage.mem.MemStorage;
import org.easymock.EasyMock;
import org.junit.Before;
import org.junit.Test;
+import org.quartz.CronTrigger;
import org.quartz.JobDetail;
import org.quartz.JobKey;
import org.quartz.Scheduler;
@@ -183,12 +185,13 @@ public class CronJobManagerImplTest extends EasyMockTest {
@Test
public void testGetScheduledJobs() throws Exception {
- JobDetail jobDetail = createMock(JobDetail.class);
+ CronTrigger cronTrigger = createMock(CronTrigger.class);
expect(scheduler.getJobKeys(EasyMock.<GroupMatcher<JobKey>>anyObject()))
.andReturn(ImmutableSet.of(QuartzTestUtil.QUARTZ_JOB_KEY));
- expect(scheduler.getJobDetail(QuartzTestUtil.QUARTZ_JOB_KEY))
- .andReturn(jobDetail);
- expect(jobDetail.getDescription()).andReturn("* * * * *");
+ EasyMock.
+ <List<? extends Trigger>>expect(scheduler.getTriggersOfJob(QuartzTestUtil.QUARTZ_JOB_KEY))
+ .andReturn(ImmutableList.of(cronTrigger));
+ expect(cronTrigger.getDescription()).andReturn("* * * * *");
control.replay();
http://git-wip-us.apache.org/repos/asf/incubator-aurora/blob/13545975/src/test/java/org/apache/aurora/scheduler/http/CronTest.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/aurora/scheduler/http/CronTest.java b/src/test/java/org/apache/aurora/scheduler/http/CronTest.java
new file mode 100644
index 0000000..6171daf
--- /dev/null
+++ b/src/test/java/org/apache/aurora/scheduler/http/CronTest.java
@@ -0,0 +1,59 @@
+/**
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.aurora.scheduler.http;
+
+import javax.servlet.http.HttpServletResponse;
+import javax.ws.rs.core.Response;
+
+import com.google.common.collect.ImmutableMap;
+import com.twitter.common.testing.easymock.EasyMockTest;
+
+import org.apache.aurora.scheduler.base.JobKeys;
+import org.apache.aurora.scheduler.cron.CronJobManager;
+import org.apache.aurora.scheduler.cron.CrontabEntry;
+import org.codehaus.jackson.map.ObjectMapper;
+import org.junit.Before;
+import org.junit.Test;
+
+import static org.easymock.EasyMock.expect;
+import static org.junit.Assert.assertEquals;
+
+public class CronTest extends EasyMockTest {
+ private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
+
+ private CronJobManager cronJobManager;
+
+ private Cron cron;
+
+ @Before
+ public void setUp() {
+ cronJobManager = createMock(CronJobManager.class);
+
+ cron = new Cron(cronJobManager);
+ }
+
+ @Test
+ public void testDumpContents() throws Exception {
+ expect(cronJobManager.getScheduledJobs()).andReturn(ImmutableMap.of(
+ JobKeys.from("test", "test", "test"), CrontabEntry.parse("* * * * *")));
+
+ control.replay();
+
+ Response response = cron.dumpContents();
+ assertEquals(HttpServletResponse.SC_OK, response.getStatus());
+ assertEquals(
+ "{\"scheduled\":{\"test/test/test\":\"* * * * *\"}}",
+ OBJECT_MAPPER.writeValueAsString(response.getEntity()));
+ }
+}