[autotest] Delete support for parameterized jobs.
This deletes the `create_parameterized_job()` RPC endpoint and the
associated (unused!) "parameterized_jobs" config setting. It also
garbage collects code made unreferenced by these deletions.
BUG=chromium:679903
TEST=unit tests, and run push_to_prod suite in a local instance
Change-Id: I8ed683d0c8ffa879d0e10319b0a736133d56327e
Reviewed-on: https://chromium-review.googlesource.com/436407
Commit-Ready: Richard Barnette <jrbarnette@chromium.org>
Tested-by: Richard Barnette <jrbarnette@chromium.org>
Reviewed-by: Richard Barnette <jrbarnette@google.com>
diff --git a/frontend/afe/models.py b/frontend/afe/models.py
index 9919977..e877e8a 100644
--- a/frontend/afe/models.py
+++ b/frontend/afe/models.py
@@ -1061,145 +1061,14 @@
return unicode(self.name)
-class Kernel(dbmodels.Model):
- """
- A kernel configuration for a parameterized job
- """
- version = dbmodels.CharField(max_length=255)
- cmdline = dbmodels.CharField(max_length=255, blank=True)
-
- @classmethod
- def create_kernels(cls, kernel_list):
- """Creates all kernels in the kernel list.
-
- @param cls: Implicit class object.
- @param kernel_list: A list of dictionaries that describe the kernels,
- in the same format as the 'kernel' argument to
- rpc_interface.generate_control_file.
- @return A list of the created kernels.
- """
- if not kernel_list:
- return None
- return [cls._create(kernel) for kernel in kernel_list]
-
-
- @classmethod
- def _create(cls, kernel_dict):
- version = kernel_dict.pop('version')
- cmdline = kernel_dict.pop('cmdline', '')
-
- if kernel_dict:
- raise Exception('Extraneous kernel arguments remain: %r'
- % kernel_dict)
-
- kernel, _ = cls.objects.get_or_create(version=version,
- cmdline=cmdline)
- return kernel
-
-
- class Meta:
- """Metadata for class Kernel."""
- db_table = 'afe_kernels'
- unique_together = ('version', 'cmdline')
-
- def __unicode__(self):
- return u'%s %s' % (self.version, self.cmdline)
-
-
class ParameterizedJob(dbmodels.Model):
"""
Auxiliary configuration for a parameterized job.
+
+ This stub exists merely for unit tests. See Job.parameterized_job
+ for more details.
"""
- test = dbmodels.ForeignKey(Test)
- label = dbmodels.ForeignKey(Label, null=True)
- use_container = dbmodels.BooleanField(default=False)
- profile_only = dbmodels.BooleanField(default=False)
- upload_kernel_config = dbmodels.BooleanField(default=False)
-
- kernels = dbmodels.ManyToManyField(
- Kernel, db_table='afe_parameterized_job_kernels')
- profilers = dbmodels.ManyToManyField(
- Profiler, through='ParameterizedJobProfiler')
-
-
- @classmethod
- def smart_get(cls, id_or_name, *args, **kwargs):
- """For compatibility with Job.add_object.
-
- @param cls: Implicit class object.
- @param id_or_name: The ID or name to get.
- @param args: Non-keyword arguments.
- @param kwargs: Keyword arguments.
- """
- return cls.objects.get(pk=id_or_name)
-
-
- def job(self):
- """Returns the job if it exists, or else None."""
- jobs = self.job_set.all()
- assert jobs.count() <= 1
- return jobs and jobs[0] or None
-
-
- class Meta:
- """Metadata for class ParameterizedJob."""
- db_table = 'afe_parameterized_jobs'
-
- def __unicode__(self):
- return u'%s (parameterized) - %s' % (self.test.name, self.job())
-
-
-class ParameterizedJobProfiler(dbmodels.Model):
- """
- A profiler to run on a parameterized job
- """
- parameterized_job = dbmodels.ForeignKey(ParameterizedJob)
- profiler = dbmodels.ForeignKey(Profiler)
-
- class Meta:
- """Metedata for class ParameterizedJobProfiler."""
- db_table = 'afe_parameterized_jobs_profilers'
- unique_together = ('parameterized_job', 'profiler')
-
-
-class ParameterizedJobProfilerParameter(dbmodels.Model):
- """
- A parameter for a profiler in a parameterized job
- """
- parameterized_job_profiler = dbmodels.ForeignKey(ParameterizedJobProfiler)
- parameter_name = dbmodels.CharField(max_length=255)
- parameter_value = dbmodels.TextField()
- parameter_type = dbmodels.CharField(
- max_length=8, choices=model_attributes.ParameterTypes.choices())
-
- class Meta:
- """Metadata for class ParameterizedJobProfilerParameter."""
- db_table = 'afe_parameterized_job_profiler_parameters'
- unique_together = ('parameterized_job_profiler', 'parameter_name')
-
- def __unicode__(self):
- return u'%s - %s' % (self.parameterized_job_profiler.profiler.name,
- self.parameter_name)
-
-
-class ParameterizedJobParameter(dbmodels.Model):
- """
- Parameters for a parameterized job
- """
- parameterized_job = dbmodels.ForeignKey(ParameterizedJob)
- test_parameter = dbmodels.ForeignKey(TestParameter)
- parameter_value = dbmodels.TextField()
- parameter_type = dbmodels.CharField(
- max_length=8, choices=model_attributes.ParameterTypes.choices())
-
- class Meta:
- """Metadata for class ParameterizedJobParameter."""
- db_table = 'afe_parameterized_job_parameters'
- unique_together = ('parameterized_job', 'test_parameter')
-
- def __unicode__(self):
- return u'%s - %s' % (self.parameterized_job.job().name,
- self.test_parameter.name)
+ pass
class JobManager(model_logic.ExtendedManager):
@@ -1404,6 +1273,13 @@
max_runtime_mins = dbmodels.IntegerField(default=DEFAULT_MAX_RUNTIME_MINS)
drone_set = dbmodels.ForeignKey(DroneSet, null=True, blank=True)
+ # TODO(jrbarnette) We have to keep `parameterized_job` around or it
+ # breaks the scheduler_models unit tests (and fixing the unit tests
+ # will break the scheduler, so don't do that).
+ #
+ # The ultimate fix is to delete the column from the database table
+ # at which point, you _must_ delete this. Until you're ready to do
+ # that, DON'T MUCK WITH IT.
parameterized_job = dbmodels.ForeignKey(ParameterizedJob, null=True,
blank=True)
@@ -1442,41 +1318,6 @@
@classmethod
- def parameterized_jobs_enabled(cls):
- """Returns whether parameterized jobs are enabled.
-
- @param cls: Implicit class object.
- """
- return global_config.global_config.get_config_value(
- 'AUTOTEST_WEB', 'parameterized_jobs', type=bool)
-
-
- @classmethod
- def check_parameterized_job(cls, control_file, parameterized_job):
- """Checks that the job is valid given the global config settings.
-
- First, either control_file must be set, or parameterized_job must be
- set, but not both. Second, parameterized_job must be set if and only if
- the parameterized_jobs option in the global config is set to True.
-
- @param cls: Implict class object.
- @param control_file: A control file.
- @param parameterized_job: A parameterized job.
- """
- if not (bool(control_file) ^ bool(parameterized_job)):
- raise Exception('Job must have either control file or '
- 'parameterization, but not both')
-
- parameterized_jobs_enabled = cls.parameterized_jobs_enabled()
- if control_file and parameterized_jobs_enabled:
- raise Exception('Control file specified, but parameterized jobs '
- 'are enabled')
- if parameterized_job and not parameterized_jobs_enabled:
- raise Exception('Parameterized job specified, but parameterized '
- 'jobs are not enabled')
-
-
- @classmethod
def create(cls, owner, options, hosts):
"""Creates a job.
@@ -1491,16 +1332,7 @@
AclGroup.check_for_acl_violation_hosts(hosts)
control_file = options.get('control_file')
- parameterized_job = options.get('parameterized_job')
- # The current implementation of parameterized jobs requires that only
- # control files or parameterized jobs are used. Using the image
- # parameter on autoupdate_ParameterizedJob doesn't mix pure
- # parameterized jobs and control files jobs, it does muck enough with
- # normal jobs by adding a parameterized id to them that this check will
- # fail. So for now we just skip this check.
- # cls.check_parameterized_job(control_file=control_file,
- # parameterized_job=parameterized_job)
user = User.current_user()
if options.get('reboot_before') is None:
options['reboot_before'] = user.get_reboot_before_display()
@@ -1530,7 +1362,6 @@
parse_failed_repair=options.get('parse_failed_repair'),
created_on=datetime.now(),
drone_set=drone_set,
- parameterized_job=parameterized_job,
parent_job=options.get('parent_job_id'),
test_retry=options.get('test_retry'),
run_reset=options.get('run_reset'),
@@ -1603,18 +1434,6 @@
return []
- def save(self, *args, **kwargs):
- # The current implementation of parameterized jobs requires that only
- # control files or parameterized jobs are used. Using the image
- # parameter on autoupdate_ParameterizedJob doesn't mix pure
- # parameterized jobs and control files jobs, it does muck enough with
- # normal jobs by adding a parameterized id to them that this check will
- # fail. So for now we just skip this check.
- # cls.check_parameterized_job(control_file=self.control_file,
- # parameterized_job=self.parameterized_job)
- super(Job, self).save(*args, **kwargs)
-
-
def queue(self, hosts, atomic_group=None, is_template=False):
"""Enqueue a job on the given hosts.