Hey fellow Aurora team:

We would like to propose a simple and backwards compatible feature in
CreateJob API so that we can support instance-specific TaskConfigs. The use
case here is for an Adhoc job which has different resource settings as well
as different command line arguments for each task instance. Aurora today
already support heterogenous tasks for the same job via StartJobUpdate API,
i.e. we can update the job instances to use different task configs. This
works reasonably well for long running tasks like Services. However, it is
not feasible for Adhoc jobs where each task will finish right away before
we even have a chance to invoke StartJobUpdate. Also, even the
StartJobUpdate API is not scalable to a job with 10K ~ 100K task instances
and each instance has different task config since we will have to invoke
StartJobUpdate for each distinct task config.

The proposal we have is to add an optional field in JobConfiguration for
instance specific task config. It will be override the default task config
for given instance ID ranges if specific. Otherwise, everything will be
backwards compatibility as current API. The implementation of this change
also seems to be very simple. We only need to plumb instance specific tasks
configs when we call statemanager.insertPendingTasks in
SchedulerThriftInterface.createJob function.

 /**
  * Description of an Aurora job. One task will be scheduled for each
instance within the job.
  */
@@ -328,13 +343,17 @@ struct JobConfiguration {
   4: string cronSchedule
   /** Collision policy to use when handling overlapping cron runs.
Default is KILL_EXISTING. */
   5: CronCollisionPolicy cronCollisionPolicy
-  /** Task configuration for this job. */
+  /** Default task configuration for all instances of this job. */
   6: TaskConfig taskConfig
   /**
    * The number of instances in the job. Generated instance IDs for tasks
will be in the range
    * [0, instances).
    */
   8: i32 instanceCount
+  /**
+   * The instance specific task configs that override the default task
config for given
+   * instanceId ranges.
+   */
+  10: optional set<InstanceTaskConfig> instanceTaskConfigs
 }

Please let us know your comments and suggestions.

Thanks, - Min

Reply via email to