You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aurora.apache.org by ma...@apache.org on 2013/12/13 01:40:53 UTC
[1/5] git commit: Added getRoleSummary call to thrift api.
Updated Branches:
refs/heads/skarumuri/MESOS-4679_api_jobs_by_role [created] 8badb0f2d
Added getRoleSummary call to thrift api.
Project: http://git-wip-us.apache.org/repos/asf/incubator-aurora/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-aurora/commit/dd21cb61
Tree: http://git-wip-us.apache.org/repos/asf/incubator-aurora/tree/dd21cb61
Diff: http://git-wip-us.apache.org/repos/asf/incubator-aurora/diff/dd21cb61
Branch: refs/heads/skarumuri/MESOS-4679_api_jobs_by_role
Commit: dd21cb61412b8c0f6818f0eaf48f4150dda8abf1
Parents: b283dc3
Author: Suman Karumuri <sk...@twitter.com>
Authored: Mon Nov 25 16:04:15 2013 -0800
Committer: Suman Karumuri <sk...@twitter.com>
Committed: Mon Nov 25 16:04:15 2013 -0800
----------------------------------------------------------------------
.../thrift/SchedulerThriftInterface.java | 23 ++++++++++++++++++++
.../thrift/com/twitter/aurora/gen/api.thrift | 23 +++++++++++++++++++-
.../scheduler/thrift/aop/ForwardingThrift.java | 5 +++++
3 files changed, 50 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-aurora/blob/dd21cb61/src/main/java/com/twitter/aurora/scheduler/thrift/SchedulerThriftInterface.java
----------------------------------------------------------------------
diff --git a/src/main/java/com/twitter/aurora/scheduler/thrift/SchedulerThriftInterface.java b/src/main/java/com/twitter/aurora/scheduler/thrift/SchedulerThriftInterface.java
index 5237a6e..ca90e74 100644
--- a/src/main/java/com/twitter/aurora/scheduler/thrift/SchedulerThriftInterface.java
+++ b/src/main/java/com/twitter/aurora/scheduler/thrift/SchedulerThriftInterface.java
@@ -369,6 +369,29 @@ class SchedulerThriftInterface implements AuroraAdmin.Iface {
return response;
}
+
+ public Response getRoleSummary() {
+// LoadingCache<String, Role> owners =
+// CacheBuilder.newBuilder().build(CacheLoader.from(CREATE_ROLE));
+//
+// // TODO(William Farner): Render this page without an expensive query.
+// Set<IScheduledTask> tasks =
+// Storage.Util.weaklyConsistentFetchTasks(storage, Query.unscoped());
+// for (ITaskConfig task : Iterables.transform(tasks, Tasks.SCHEDULED_TO_INFO)) {
+// owners.getUnchecked(task.getOwner().getRole()).accumulate(task);
+// }
+//
+// // Add cron job counts for each role.
+// for (IJobConfiguration job : cronScheduler.getJobs()) {
+// owners.getUnchecked(job.getOwner().getRole()).accumulate(job);
+// }
+//
+// template.setAttribute(
+// "owners",
+// DisplayUtils.ROLE_ORDERING.sortedCopy(owners.asMap().values()));
+ return null;
+ }
+
@Override
public Response getJobs(@Nullable String maybeNullRole) {
Optional<String> ownerRole = Optional.fromNullable(maybeNullRole);
http://git-wip-us.apache.org/repos/asf/incubator-aurora/blob/dd21cb61/src/main/thrift/com/twitter/aurora/gen/api.thrift
----------------------------------------------------------------------
diff --git a/src/main/thrift/com/twitter/aurora/gen/api.thrift b/src/main/thrift/com/twitter/aurora/gen/api.thrift
index 3f8d61d..c7012f8 100644
--- a/src/main/thrift/com/twitter/aurora/gen/api.thrift
+++ b/src/main/thrift/com/twitter/aurora/gen/api.thrift
@@ -356,6 +356,12 @@ struct HostStatus {
2: MaintenanceMode mode
}
+struct RoleSummary {
+ 1: string role
+ 2: i32 jobCount
+ 3: i32 cronJobCount
+}
+
struct Hosts {
1: set<string> hostNames
}
@@ -384,6 +390,10 @@ struct EndMaintenanceResult {
1: set<HostStatus> statuses
}
+struct RoleSummaryResult {
+ 1: set<RoleSummary> summaries
+}
+
// Specifies validation level for the populateJobConfig.
enum JobConfigValidation {
NONE = 0 // No additional job config validation would be performed (only parsing).
@@ -403,6 +413,7 @@ union Result {
11: EndMaintenanceResult endMaintenanceResult
15: APIVersion getVersionResult
16: AcquireLockResult acquireLockResult
+ 17: RoleSummaryResult roleSummaryResult
}
struct Response {
@@ -412,10 +423,16 @@ struct Response {
3: optional Result result
}
+// A service that provides all the read only calls to the Aurora scheduler.
+service ReadOnlyScheduler {
+ // Returns a summary of the jobs grouped by role.
+ Response getRoleSummary()
+}
+
// Due to assumptions in the client all authenticated RPCs must have a SessionKey as their
// last argument. Note that the order in this file is what matters, and message numbers should still
// never be reused.
-service AuroraSchedulerManager {
+service AuroraSchedulerManager extends ReadOnlyScheduler {
// Creates a new job. The request will be denied if a job with the provided
// name already exists in the cluster.
Response createJob(1: JobConfiguration description, 3: Lock lock, 2: SessionKey session)
@@ -431,9 +448,11 @@ service AuroraSchedulerManager {
// Restarts a batch of shards.
Response restartShards(5: JobKey job, 3: set<i32> shardIds, 6: Lock lock 4: SessionKey session)
+ // TODO(Suman Karumuri): Move this call into read only api
// Fetches the status of tasks.
Response getTasksStatus(1: TaskQuery query)
+ // TODO(Suman Karumuri): Move this call into the read only api
// Fetches the status of jobs.
// ownerRole is optional, in which case all jobs are returned.
Response getJobs(1: string ownerRole)
@@ -441,9 +460,11 @@ service AuroraSchedulerManager {
// Initiates a kill on tasks.
Response killTasks(1: TaskQuery query, 3: Lock lock, 2: SessionKey session)
+ // TODO(Suman Karumuri): Move this call into the read only api
// Fetches the quota allocated for a user.
Response getQuota(1: string ownerRole)
+ // TODO(Suman Karumuri): Move this call into the read only api
// Returns the current version of the API implementation
Response getVersion()
http://git-wip-us.apache.org/repos/asf/incubator-aurora/blob/dd21cb61/src/test/java/com/twitter/aurora/scheduler/thrift/aop/ForwardingThrift.java
----------------------------------------------------------------------
diff --git a/src/test/java/com/twitter/aurora/scheduler/thrift/aop/ForwardingThrift.java b/src/test/java/com/twitter/aurora/scheduler/thrift/aop/ForwardingThrift.java
index 7c5100b..b76c92b 100644
--- a/src/test/java/com/twitter/aurora/scheduler/thrift/aop/ForwardingThrift.java
+++ b/src/test/java/com/twitter/aurora/scheduler/thrift/aop/ForwardingThrift.java
@@ -107,6 +107,11 @@ abstract class ForwardingThrift implements AuroraAdmin.Iface {
}
@Override
+ public Response getRoleSummary() throws TException {
+ return delegate.getRoleSummary();
+ }
+
+ @Override
public Response createJob(JobConfiguration description, Lock lock, SessionKey session)
throws TException {
[5/5] git commit: Renamed getRoleSummary to getJobSummary.
Posted by ma...@apache.org.
Renamed getRoleSummary to getJobSummary.
Project: http://git-wip-us.apache.org/repos/asf/incubator-aurora/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-aurora/commit/8badb0f2
Tree: http://git-wip-us.apache.org/repos/asf/incubator-aurora/tree/8badb0f2
Diff: http://git-wip-us.apache.org/repos/asf/incubator-aurora/diff/8badb0f2
Branch: refs/heads/skarumuri/MESOS-4679_api_jobs_by_role
Commit: 8badb0f2d950f638faa4c737e2ed24e9f25e0b24
Parents: 80dd60d
Author: Suman Karumuri <sk...@twitter.com>
Authored: Wed Dec 4 17:31:29 2013 -0800
Committer: Suman Karumuri <sk...@twitter.com>
Committed: Wed Dec 4 17:50:27 2013 -0800
----------------------------------------------------------------------
.../thrift/SchedulerThriftInterface.java | 45 ++++++++++----------
.../thrift/com/twitter/aurora/gen/api.thrift | 10 ++---
.../thrift/SchedulerThriftInterfaceTest.java | 14 +++---
.../scheduler/thrift/aop/ForwardingThrift.java | 4 +-
4 files changed, 36 insertions(+), 37 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-aurora/blob/8badb0f2/src/main/java/com/twitter/aurora/scheduler/thrift/SchedulerThriftInterface.java
----------------------------------------------------------------------
diff --git a/src/main/java/com/twitter/aurora/scheduler/thrift/SchedulerThriftInterface.java b/src/main/java/com/twitter/aurora/scheduler/thrift/SchedulerThriftInterface.java
index d6af11f..705a926 100644
--- a/src/main/java/com/twitter/aurora/scheduler/thrift/SchedulerThriftInterface.java
+++ b/src/main/java/com/twitter/aurora/scheduler/thrift/SchedulerThriftInterface.java
@@ -66,6 +66,8 @@ import com.twitter.aurora.gen.JobConfigRewrite;
import com.twitter.aurora.gen.JobConfigValidation;
import com.twitter.aurora.gen.JobConfiguration;
import com.twitter.aurora.gen.JobKey;
+import com.twitter.aurora.gen.JobSummary;
+import com.twitter.aurora.gen.JobSummaryResult;
import com.twitter.aurora.gen.ListBackupsResult;
import com.twitter.aurora.gen.Lock;
import com.twitter.aurora.gen.LockKey;
@@ -78,8 +80,6 @@ import com.twitter.aurora.gen.Response;
import com.twitter.aurora.gen.ResponseCode;
import com.twitter.aurora.gen.Result;
import com.twitter.aurora.gen.RewriteConfigsRequest;
-import com.twitter.aurora.gen.RoleSummary;
-import com.twitter.aurora.gen.RoleSummaryResult;
import com.twitter.aurora.gen.ScheduleStatus;
import com.twitter.aurora.gen.ScheduleStatusResult;
import com.twitter.aurora.gen.SessionKey;
@@ -376,45 +376,44 @@ class SchedulerThriftInterface implements AuroraAdmin.Iface {
}
@Override
- public Response getRoleSummary() {
- final Function<String, RoleSummary> CREATE_ROLE_SUMMARY = new Function<String, RoleSummary>() {
- @Override public RoleSummary apply(String ownerRole) {
- RoleSummary role = new RoleSummary();
- role.setRole(ownerRole);
- role.setCronJobCount(0);
- role.setJobCount(0);
- return role;
+ public Response getJobSummary() {
+ final Function<String, JobSummary> CREATE_JOB_SUMMARY = new Function<String, JobSummary>() {
+ @Override public JobSummary apply(String ownerRole) {
+ JobSummary summary = new JobSummary();
+ summary.setRole(ownerRole);
+ summary.setCronJobCount(0);
+ summary.setJobCount(0);
+ return summary;
}
};
- final Ordering<RoleSummary> ROLE_ORDERING = Ordering.natural().onResultOf(
- new Function<RoleSummary, String>() {
- @Override public String apply(RoleSummary role) {
- return role.getRole();
+ final Ordering<JobSummary> JOB_ORDERING = Ordering.natural().onResultOf(
+ new Function<JobSummary, String>() {
+ @Override public String apply(JobSummary jobSummary) {
+ return jobSummary.getRole();
}
});
// TODO(Suman Karumuri): Respond to this request without an expensive query.
- LoadingCache<String, RoleSummary> roleSummaries =
- CacheBuilder.newBuilder().build(CacheLoader.from(CREATE_ROLE_SUMMARY));
+ LoadingCache<String, JobSummary> jobSummaries =
+ CacheBuilder.newBuilder().build(CacheLoader.from(CREATE_JOB_SUMMARY));
Set<IScheduledTask> tasks =
Storage.Util.weaklyConsistentFetchTasks(storage, Query.unscoped());
for (ITaskConfig task : Iterables.transform(tasks, Tasks.SCHEDULED_TO_INFO)) {
- RoleSummary roleSummary = roleSummaries.getUnchecked(task.getOwner().getRole());
- roleSummary.setJobCount(roleSummary.getJobCount() + 1);
+ JobSummary jobSummary = jobSummaries.getUnchecked(task.getOwner().getRole());
+ jobSummary.setJobCount(jobSummary.getJobCount() + 1);
}
- // Add cron job counts for each role.
for (IJobConfiguration job : cronJobManager.getJobs()) {
- RoleSummary roleSummary = roleSummaries.getUnchecked(job.getOwner().getRole());
- roleSummary.setCronJobCount(roleSummary.getCronJobCount() + 1);
+ JobSummary jobSummary = jobSummaries.getUnchecked(job.getOwner().getRole());
+ jobSummary.setCronJobCount(jobSummary.getCronJobCount() + 1);
}
return new Response()
.setResponseCode(OK)
- .setResult(Result.roleSummaryResult(
- new RoleSummaryResult(ROLE_ORDERING.sortedCopy(roleSummaries.asMap().values()))));
+ .setResult(Result.jobSummaryResult(
+ new JobSummaryResult(JOB_ORDERING.sortedCopy(jobSummaries.asMap().values()))));
}
@Override
http://git-wip-us.apache.org/repos/asf/incubator-aurora/blob/8badb0f2/src/main/thrift/com/twitter/aurora/gen/api.thrift
----------------------------------------------------------------------
diff --git a/src/main/thrift/com/twitter/aurora/gen/api.thrift b/src/main/thrift/com/twitter/aurora/gen/api.thrift
index 5d6532c..836e38b 100644
--- a/src/main/thrift/com/twitter/aurora/gen/api.thrift
+++ b/src/main/thrift/com/twitter/aurora/gen/api.thrift
@@ -356,7 +356,7 @@ struct HostStatus {
2: MaintenanceMode mode
}
-struct RoleSummary {
+struct JobSummary {
1: string role
2: i32 jobCount
3: i32 cronJobCount
@@ -390,8 +390,8 @@ struct EndMaintenanceResult {
1: set<HostStatus> statuses
}
-struct RoleSummaryResult {
- 1: list<RoleSummary> summaries
+struct JobSummaryResult {
+ 1: list<JobSummary> summaries
}
// Specifies validation level for the populateJobConfig.
@@ -413,7 +413,7 @@ union Result {
11: EndMaintenanceResult endMaintenanceResult
15: APIVersion getVersionResult
16: AcquireLockResult acquireLockResult
- 17: RoleSummaryResult roleSummaryResult
+ 17: JobSummaryResult jobSummaryResult
}
struct Response {
@@ -426,7 +426,7 @@ struct Response {
// A service that provides all the read only calls to the Aurora scheduler.
service ReadOnlyScheduler {
// Returns a summary of the jobs grouped by role.
- Response getRoleSummary()
+ Response getJobSummary()
}
// Due to assumptions in the client all authenticated RPCs must have a SessionKey as their
http://git-wip-us.apache.org/repos/asf/incubator-aurora/blob/8badb0f2/src/test/java/com/twitter/aurora/scheduler/thrift/SchedulerThriftInterfaceTest.java
----------------------------------------------------------------------
diff --git a/src/test/java/com/twitter/aurora/scheduler/thrift/SchedulerThriftInterfaceTest.java b/src/test/java/com/twitter/aurora/scheduler/thrift/SchedulerThriftInterfaceTest.java
index 30a3969..826f1a9 100644
--- a/src/test/java/com/twitter/aurora/scheduler/thrift/SchedulerThriftInterfaceTest.java
+++ b/src/test/java/com/twitter/aurora/scheduler/thrift/SchedulerThriftInterfaceTest.java
@@ -50,6 +50,8 @@ import com.twitter.aurora.gen.JobConfigRewrite;
import com.twitter.aurora.gen.JobConfigValidation;
import com.twitter.aurora.gen.JobConfiguration;
import com.twitter.aurora.gen.JobKey;
+import com.twitter.aurora.gen.JobSummary;
+import com.twitter.aurora.gen.JobSummaryResult;
import com.twitter.aurora.gen.LimitConstraint;
import com.twitter.aurora.gen.Lock;
import com.twitter.aurora.gen.LockKey;
@@ -57,8 +59,6 @@ import com.twitter.aurora.gen.Quota;
import com.twitter.aurora.gen.Response;
import com.twitter.aurora.gen.ResponseCode;
import com.twitter.aurora.gen.RewriteConfigsRequest;
-import com.twitter.aurora.gen.RoleSummary;
-import com.twitter.aurora.gen.RoleSummaryResult;
import com.twitter.aurora.gen.ScheduleStatus;
import com.twitter.aurora.gen.ScheduledTask;
import com.twitter.aurora.gen.SessionKey;
@@ -1082,17 +1082,17 @@ public class SchedulerThriftInterfaceTest extends EasyMockTest {
storageUtil.expectTaskFetch(Query.unscoped(), immediateTask, immediateTaskTwo);
expect(cronJobManager.getJobs()).andReturn(IJobConfiguration.setFromBuilders(crons));
- RoleSummaryResult expectedResult = new RoleSummaryResult();
+ JobSummaryResult expectedResult = new JobSummaryResult();
expectedResult.addToSummaries(
- new RoleSummary().setRole(ROLE).setCronJobCount(2).setJobCount(1));
+ new JobSummary().setRole(ROLE).setCronJobCount(2).setJobCount(1));
expectedResult.addToSummaries(
- new RoleSummary().setRole(BAZ_ROLE).setCronJobCount(1).setJobCount(1));
+ new JobSummary().setRole(BAZ_ROLE).setCronJobCount(1).setJobCount(1));
control.replay();
- Response response = thrift.getRoleSummary();
+ Response response = thrift.getJobSummary();
assertEquals(ResponseCode.OK, response.getResponseCode());
- assertEquals(expectedResult, response.getResult().getRoleSummaryResult());
+ assertEquals(expectedResult, response.getResult().getJobSummaryResult());
}
@Test
http://git-wip-us.apache.org/repos/asf/incubator-aurora/blob/8badb0f2/src/test/java/com/twitter/aurora/scheduler/thrift/aop/ForwardingThrift.java
----------------------------------------------------------------------
diff --git a/src/test/java/com/twitter/aurora/scheduler/thrift/aop/ForwardingThrift.java b/src/test/java/com/twitter/aurora/scheduler/thrift/aop/ForwardingThrift.java
index b76c92b..37c0da2 100644
--- a/src/test/java/com/twitter/aurora/scheduler/thrift/aop/ForwardingThrift.java
+++ b/src/test/java/com/twitter/aurora/scheduler/thrift/aop/ForwardingThrift.java
@@ -107,8 +107,8 @@ abstract class ForwardingThrift implements AuroraAdmin.Iface {
}
@Override
- public Response getRoleSummary() throws TException {
- return delegate.getRoleSummary();
+ public Response getJobSummary() throws TException {
+ return delegate.getJobSummary();
}
@Override
[3/5] git commit: Added a unit test.
Posted by ma...@apache.org.
Added a unit test. <Breaks>
Project: http://git-wip-us.apache.org/repos/asf/incubator-aurora/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-aurora/commit/78e45bfc
Tree: http://git-wip-us.apache.org/repos/asf/incubator-aurora/tree/78e45bfc
Diff: http://git-wip-us.apache.org/repos/asf/incubator-aurora/diff/78e45bfc
Branch: refs/heads/skarumuri/MESOS-4679_api_jobs_by_role
Commit: 78e45bfcd5dadeda112f10049c4db415010f924c
Parents: 9a94695
Author: Suman Karumuri <sk...@twitter.com>
Authored: Tue Nov 26 16:14:49 2013 -0800
Committer: Suman Karumuri <sk...@twitter.com>
Committed: Tue Nov 26 16:14:49 2013 -0800
----------------------------------------------------------------------
.../thrift/SchedulerThriftInterface.java | 4 +--
.../thrift/SchedulerThriftInterfaceTest.java | 33 ++++++++++++++++++++
2 files changed, 35 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-aurora/blob/78e45bfc/src/main/java/com/twitter/aurora/scheduler/thrift/SchedulerThriftInterface.java
----------------------------------------------------------------------
diff --git a/src/main/java/com/twitter/aurora/scheduler/thrift/SchedulerThriftInterface.java b/src/main/java/com/twitter/aurora/scheduler/thrift/SchedulerThriftInterface.java
index 317d685..d6af11f 100644
--- a/src/main/java/com/twitter/aurora/scheduler/thrift/SchedulerThriftInterface.java
+++ b/src/main/java/com/twitter/aurora/scheduler/thrift/SchedulerThriftInterface.java
@@ -377,7 +377,7 @@ class SchedulerThriftInterface implements AuroraAdmin.Iface {
@Override
public Response getRoleSummary() {
- final Function<String, RoleSummary> CREATE_ROLE = new Function<String, RoleSummary>() {
+ final Function<String, RoleSummary> CREATE_ROLE_SUMMARY = new Function<String, RoleSummary>() {
@Override public RoleSummary apply(String ownerRole) {
RoleSummary role = new RoleSummary();
role.setRole(ownerRole);
@@ -396,7 +396,7 @@ class SchedulerThriftInterface implements AuroraAdmin.Iface {
// TODO(Suman Karumuri): Respond to this request without an expensive query.
LoadingCache<String, RoleSummary> roleSummaries =
- CacheBuilder.newBuilder().build(CacheLoader.from(CREATE_ROLE));
+ CacheBuilder.newBuilder().build(CacheLoader.from(CREATE_ROLE_SUMMARY));
Set<IScheduledTask> tasks =
Storage.Util.weaklyConsistentFetchTasks(storage, Query.unscoped());
http://git-wip-us.apache.org/repos/asf/incubator-aurora/blob/78e45bfc/src/test/java/com/twitter/aurora/scheduler/thrift/SchedulerThriftInterfaceTest.java
----------------------------------------------------------------------
diff --git a/src/test/java/com/twitter/aurora/scheduler/thrift/SchedulerThriftInterfaceTest.java b/src/test/java/com/twitter/aurora/scheduler/thrift/SchedulerThriftInterfaceTest.java
index 1f3cd6e..4debbcc 100644
--- a/src/test/java/com/twitter/aurora/scheduler/thrift/SchedulerThriftInterfaceTest.java
+++ b/src/test/java/com/twitter/aurora/scheduler/thrift/SchedulerThriftInterfaceTest.java
@@ -1034,6 +1034,39 @@ public class SchedulerThriftInterfaceTest extends EasyMockTest {
}
@Test
+ public void testGetRoleSummary() throws Exception {
+ JobConfiguration cronJobOne = makeJob()
+ .setCronSchedule("1 * * * *")
+ .setKey(JOB_KEY.newBuilder())
+ .setTaskConfig(nonProductionTask());
+ JobKey jobKey2 = JOB_KEY.newBuilder().setRole("other_role");
+ JobConfiguration cronJobTwo = makeJob()
+ .setCronSchedule("2 * * * *")
+ .setKey(jobKey2)
+ .setTaskConfig(nonProductionTask());
+ TaskConfig immediateTaskConfig = defaultTask(false)
+ .setJobName("immediate")
+ .setOwner(ROLE_IDENTITY);
+ IScheduledTask immediateTask = IScheduledTask.build(new ScheduledTask()
+ .setAssignedTask(
+ new AssignedTask().setTask(immediateTaskConfig)));
+ JobConfiguration immediateJob = new JobConfiguration()
+ .setKey(JOB_KEY.newBuilder().setName("immediate"))
+ .setOwner(ROLE_IDENTITY)
+ .setInstanceCount(1)
+ .setTaskConfig(immediateTaskConfig);
+
+ Set<JobConfiguration> crons = ImmutableSet.of(cronJobOne, cronJobTwo);
+ expect(cronJobManager.getJobs()).andReturn(IJobConfiguration.setFromBuilders(crons));
+ storageUtil.expectTaskFetch(Query.unscoped().active(), immediateTask);
+
+ control.replay();
+
+ Response response = thrift.getRoleSummary();
+ assertEquals(ResponseCode.OK, response.getResponseCode());
+ }
+
+ @Test
public void testSnapshot() throws Exception {
expectAuth(ROOT, false);
[4/5] git commit: Finally a realistic test.
Posted by ma...@apache.org.
Finally a realistic test.
Project: http://git-wip-us.apache.org/repos/asf/incubator-aurora/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-aurora/commit/80dd60d3
Tree: http://git-wip-us.apache.org/repos/asf/incubator-aurora/tree/80dd60d3
Diff: http://git-wip-us.apache.org/repos/asf/incubator-aurora/diff/80dd60d3
Branch: refs/heads/skarumuri/MESOS-4679_api_jobs_by_role
Commit: 80dd60d3c54a58d9bd1c923a05e692c2b8e50e41
Parents: 78e45bf
Author: Suman Karumuri <sk...@twitter.com>
Authored: Wed Dec 4 16:51:10 2013 -0800
Committer: Suman Karumuri <sk...@twitter.com>
Committed: Wed Dec 4 17:02:42 2013 -0800
----------------------------------------------------------------------
.../thrift/SchedulerThriftInterfaceTest.java | 41 +++++++++++++++++---
1 file changed, 35 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-aurora/blob/80dd60d3/src/test/java/com/twitter/aurora/scheduler/thrift/SchedulerThriftInterfaceTest.java
----------------------------------------------------------------------
diff --git a/src/test/java/com/twitter/aurora/scheduler/thrift/SchedulerThriftInterfaceTest.java b/src/test/java/com/twitter/aurora/scheduler/thrift/SchedulerThriftInterfaceTest.java
index 4debbcc..30a3969 100644
--- a/src/test/java/com/twitter/aurora/scheduler/thrift/SchedulerThriftInterfaceTest.java
+++ b/src/test/java/com/twitter/aurora/scheduler/thrift/SchedulerThriftInterfaceTest.java
@@ -57,6 +57,8 @@ import com.twitter.aurora.gen.Quota;
import com.twitter.aurora.gen.Response;
import com.twitter.aurora.gen.ResponseCode;
import com.twitter.aurora.gen.RewriteConfigsRequest;
+import com.twitter.aurora.gen.RoleSummary;
+import com.twitter.aurora.gen.RoleSummaryResult;
import com.twitter.aurora.gen.ScheduleStatus;
import com.twitter.aurora.gen.ScheduledTask;
import com.twitter.aurora.gen.SessionKey;
@@ -1035,35 +1037,62 @@ public class SchedulerThriftInterfaceTest extends EasyMockTest {
@Test
public void testGetRoleSummary() throws Exception {
+ final String BAZ_ROLE = "baz_role";
+ final Identity BAZ_ROLE_IDENTITY = new Identity(BAZ_ROLE, USER);
+
JobConfiguration cronJobOne = makeJob()
.setCronSchedule("1 * * * *")
.setKey(JOB_KEY.newBuilder())
.setTaskConfig(nonProductionTask());
- JobKey jobKey2 = JOB_KEY.newBuilder().setRole("other_role");
JobConfiguration cronJobTwo = makeJob()
.setCronSchedule("2 * * * *")
- .setKey(jobKey2)
+ .setKey(JOB_KEY.newBuilder().setRole("other_role"))
.setTaskConfig(nonProductionTask());
+
+ JobConfiguration cronJobThree = makeJob()
+ .setCronSchedule("3 * * * *")
+ .setKey(JOB_KEY.newBuilder().setRole(BAZ_ROLE))
+ .setTaskConfig(nonProductionTask())
+ .setOwner(BAZ_ROLE_IDENTITY);
+
+ Set<JobConfiguration> crons = ImmutableSet.of(cronJobOne, cronJobTwo, cronJobThree);
+
TaskConfig immediateTaskConfig = defaultTask(false)
.setJobName("immediate")
.setOwner(ROLE_IDENTITY);
IScheduledTask immediateTask = IScheduledTask.build(new ScheduledTask()
- .setAssignedTask(
- new AssignedTask().setTask(immediateTaskConfig)));
+ .setAssignedTask(new AssignedTask().setTask(immediateTaskConfig)));
JobConfiguration immediateJob = new JobConfiguration()
.setKey(JOB_KEY.newBuilder().setName("immediate"))
.setOwner(ROLE_IDENTITY)
.setInstanceCount(1)
.setTaskConfig(immediateTaskConfig);
- Set<JobConfiguration> crons = ImmutableSet.of(cronJobOne, cronJobTwo);
+ TaskConfig immediateTaskConfigTwo = defaultTask(false)
+ .setJobName("immediateTwo")
+ .setOwner(BAZ_ROLE_IDENTITY);
+ IScheduledTask immediateTaskTwo = IScheduledTask.build(new ScheduledTask()
+ .setAssignedTask(new AssignedTask().setTask(immediateTaskConfigTwo)));
+ JobConfiguration immediateJob2 = new JobConfiguration()
+ .setKey(JOB_KEY.newBuilder().setName("immediateTwo"))
+ .setOwner(BAZ_ROLE_IDENTITY)
+ .setInstanceCount(1)
+ .setTaskConfig(immediateTaskConfigTwo);
+
+ storageUtil.expectTaskFetch(Query.unscoped(), immediateTask, immediateTaskTwo);
expect(cronJobManager.getJobs()).andReturn(IJobConfiguration.setFromBuilders(crons));
- storageUtil.expectTaskFetch(Query.unscoped().active(), immediateTask);
+
+ RoleSummaryResult expectedResult = new RoleSummaryResult();
+ expectedResult.addToSummaries(
+ new RoleSummary().setRole(ROLE).setCronJobCount(2).setJobCount(1));
+ expectedResult.addToSummaries(
+ new RoleSummary().setRole(BAZ_ROLE).setCronJobCount(1).setJobCount(1));
control.replay();
Response response = thrift.getRoleSummary();
assertEquals(ResponseCode.OK, response.getResponseCode());
+ assertEquals(expectedResult, response.getResult().getRoleSummaryResult());
}
@Test
[2/5] git commit: Fleshed out the getRoleSummary call.
Posted by ma...@apache.org.
Fleshed out the getRoleSummary call.
Project: http://git-wip-us.apache.org/repos/asf/incubator-aurora/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-aurora/commit/9a946952
Tree: http://git-wip-us.apache.org/repos/asf/incubator-aurora/tree/9a946952
Diff: http://git-wip-us.apache.org/repos/asf/incubator-aurora/diff/9a946952
Branch: refs/heads/skarumuri/MESOS-4679_api_jobs_by_role
Commit: 9a94695261e62e21761e21d0cb70d07c887fa698
Parents: dd21cb6
Author: Suman Karumuri <sk...@twitter.com>
Authored: Mon Nov 25 21:03:16 2013 -0800
Committer: Suman Karumuri <sk...@twitter.com>
Committed: Mon Nov 25 21:03:16 2013 -0800
----------------------------------------------------------------------
.../thrift/SchedulerThriftInterface.java | 65 ++++++++++++++------
.../thrift/com/twitter/aurora/gen/api.thrift | 2 +-
2 files changed, 46 insertions(+), 21 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-aurora/blob/9a946952/src/main/java/com/twitter/aurora/scheduler/thrift/SchedulerThriftInterface.java
----------------------------------------------------------------------
diff --git a/src/main/java/com/twitter/aurora/scheduler/thrift/SchedulerThriftInterface.java b/src/main/java/com/twitter/aurora/scheduler/thrift/SchedulerThriftInterface.java
index ca90e74..317d685 100644
--- a/src/main/java/com/twitter/aurora/scheduler/thrift/SchedulerThriftInterface.java
+++ b/src/main/java/com/twitter/aurora/scheduler/thrift/SchedulerThriftInterface.java
@@ -33,6 +33,9 @@ import com.google.common.base.Optional;
import com.google.common.base.Predicate;
import com.google.common.base.Predicates;
import com.google.common.base.Throwables;
+import com.google.common.cache.CacheBuilder;
+import com.google.common.cache.CacheLoader;
+import com.google.common.cache.LoadingCache;
import com.google.common.collect.FluentIterable;
import com.google.common.collect.ImmutableMultimap;
import com.google.common.collect.ImmutableSet;
@@ -40,6 +43,7 @@ import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Multimap;
+import com.google.common.collect.Ordering;
import org.apache.commons.lang.StringUtils;
@@ -74,6 +78,8 @@ import com.twitter.aurora.gen.Response;
import com.twitter.aurora.gen.ResponseCode;
import com.twitter.aurora.gen.Result;
import com.twitter.aurora.gen.RewriteConfigsRequest;
+import com.twitter.aurora.gen.RoleSummary;
+import com.twitter.aurora.gen.RoleSummaryResult;
import com.twitter.aurora.gen.ScheduleStatus;
import com.twitter.aurora.gen.ScheduleStatusResult;
import com.twitter.aurora.gen.SessionKey;
@@ -369,27 +375,46 @@ class SchedulerThriftInterface implements AuroraAdmin.Iface {
return response;
}
-
+ @Override
public Response getRoleSummary() {
-// LoadingCache<String, Role> owners =
-// CacheBuilder.newBuilder().build(CacheLoader.from(CREATE_ROLE));
-//
-// // TODO(William Farner): Render this page without an expensive query.
-// Set<IScheduledTask> tasks =
-// Storage.Util.weaklyConsistentFetchTasks(storage, Query.unscoped());
-// for (ITaskConfig task : Iterables.transform(tasks, Tasks.SCHEDULED_TO_INFO)) {
-// owners.getUnchecked(task.getOwner().getRole()).accumulate(task);
-// }
-//
-// // Add cron job counts for each role.
-// for (IJobConfiguration job : cronScheduler.getJobs()) {
-// owners.getUnchecked(job.getOwner().getRole()).accumulate(job);
-// }
-//
-// template.setAttribute(
-// "owners",
-// DisplayUtils.ROLE_ORDERING.sortedCopy(owners.asMap().values()));
- return null;
+ final Function<String, RoleSummary> CREATE_ROLE = new Function<String, RoleSummary>() {
+ @Override public RoleSummary apply(String ownerRole) {
+ RoleSummary role = new RoleSummary();
+ role.setRole(ownerRole);
+ role.setCronJobCount(0);
+ role.setJobCount(0);
+ return role;
+ }
+ };
+
+ final Ordering<RoleSummary> ROLE_ORDERING = Ordering.natural().onResultOf(
+ new Function<RoleSummary, String>() {
+ @Override public String apply(RoleSummary role) {
+ return role.getRole();
+ }
+ });
+
+ // TODO(Suman Karumuri): Respond to this request without an expensive query.
+ LoadingCache<String, RoleSummary> roleSummaries =
+ CacheBuilder.newBuilder().build(CacheLoader.from(CREATE_ROLE));
+
+ Set<IScheduledTask> tasks =
+ Storage.Util.weaklyConsistentFetchTasks(storage, Query.unscoped());
+ for (ITaskConfig task : Iterables.transform(tasks, Tasks.SCHEDULED_TO_INFO)) {
+ RoleSummary roleSummary = roleSummaries.getUnchecked(task.getOwner().getRole());
+ roleSummary.setJobCount(roleSummary.getJobCount() + 1);
+ }
+
+ // Add cron job counts for each role.
+ for (IJobConfiguration job : cronJobManager.getJobs()) {
+ RoleSummary roleSummary = roleSummaries.getUnchecked(job.getOwner().getRole());
+ roleSummary.setCronJobCount(roleSummary.getCronJobCount() + 1);
+ }
+
+ return new Response()
+ .setResponseCode(OK)
+ .setResult(Result.roleSummaryResult(
+ new RoleSummaryResult(ROLE_ORDERING.sortedCopy(roleSummaries.asMap().values()))));
}
@Override
http://git-wip-us.apache.org/repos/asf/incubator-aurora/blob/9a946952/src/main/thrift/com/twitter/aurora/gen/api.thrift
----------------------------------------------------------------------
diff --git a/src/main/thrift/com/twitter/aurora/gen/api.thrift b/src/main/thrift/com/twitter/aurora/gen/api.thrift
index c7012f8..5d6532c 100644
--- a/src/main/thrift/com/twitter/aurora/gen/api.thrift
+++ b/src/main/thrift/com/twitter/aurora/gen/api.thrift
@@ -391,7 +391,7 @@ struct EndMaintenanceResult {
}
struct RoleSummaryResult {
- 1: set<RoleSummary> summaries
+ 1: list<RoleSummary> summaries
}
// Specifies validation level for the populateJobConfig.