From f5be8cd82f89ece7f53945882b376948620e370e Mon Sep 17 00:00:00 2001 From: Zeid <2043828+zzzeid@users.noreply.github.com> Date: Mon, 27 Jan 2025 12:02:03 -0500 Subject: [PATCH] models, commands: remove unused code (#202) - remove Repo.is_initialized (bug 1915203) - remove Worker.ssh_private_key (bug 1936864) - remove unused landing_worker management command (bug 1927139) --- .../management/commands/landing_worker.py | 90 ------------------- ...015_remove_repo_is_initialized_and_more.py | 21 +++++ src/lando/main/models/repo.py | 2 - src/lando/main/models/worker.py | 1 - 4 files changed, 21 insertions(+), 93 deletions(-) delete mode 100644 src/lando/main/management/commands/landing_worker.py create mode 100644 src/lando/main/migrations/0015_remove_repo_is_initialized_and_more.py diff --git a/src/lando/main/management/commands/landing_worker.py b/src/lando/main/management/commands/landing_worker.py deleted file mode 100644 index 805d6fb5..00000000 --- a/src/lando/main/management/commands/landing_worker.py +++ /dev/null @@ -1,90 +0,0 @@ -from __future__ import annotations - -import logging -from contextlib import contextmanager -from datetime import datetime -from io import StringIO - -from django.core.management.base import BaseCommand -from django.db import transaction - -from lando.main.management.commands import WorkerMixin -from lando.main.models.landing_job import LandingJob, LandingJobStatus -from lando.main.models.repo import Repo - -logger = logging.getLogger(__name__) - - -@contextmanager -def job_processing(job: LandingJob): - """Mutex-like context manager that manages job processing miscellany. - - This context manager facilitates graceful worker shutdown, tracks the duration of - the current job, and commits changes to the DB at the very end. - - Args: - job: the job currently being processed - db: active database session - """ - start_time = datetime.now() - try: - yield - finally: - job.duration_seconds = (datetime.now() - start_time).seconds - - -class Command(BaseCommand, WorkerMixin): - help = "Start the landing worker." - name = "landing-worker" - - def add_arguments(self, parser): - pass - - def handle(self, *args, **options): - self.last_job_finished = None - self.start() - - def loop(self): - if self.last_job_finished is False: - logger.info("Last job did not complete, sleeping.") - self.throttle(self._instance.sleep_seconds) - - for repo in self._instance.enabled_repos: - if not repo.is_initialized: - repo.initialize() - - with transaction.atomic(): - job = LandingJob.next_job(repositories=self._instance.enabled_repos).first() - - if job is None: - self.throttle(self._instance.sleep_seconds) - return - - with job_processing(job): - job.status = LandingJobStatus.IN_PROGRESS - job.attempts += 1 - job.save() - - self.stdout.write(f"Starting landing job {job}") - self.last_job_finished = self.run_job(job) - self.stdout.write("Finished processing landing job") - - def run_job(self, job: LandingJob) -> bool: - repo = job.target_repo - if not repo: - repo = Repo.objects.get(name=job.repository_name) - repo.reset() - repo.pull() - - for revision in job.revisions.all(): - patch_buffer = StringIO(revision.patch) - repo.apply_patch(patch_buffer) - - # TODO: need to account for reverts/backouts somehow in the futue. - revision.commit_id = repo._run("rev-parse", "HEAD").stdout.strip() - revision.save() - - repo.push() - - job.status = LandingJobStatus.LANDED - job.save() diff --git a/src/lando/main/migrations/0015_remove_repo_is_initialized_and_more.py b/src/lando/main/migrations/0015_remove_repo_is_initialized_and_more.py new file mode 100644 index 00000000..42369dbe --- /dev/null +++ b/src/lando/main/migrations/0015_remove_repo_is_initialized_and_more.py @@ -0,0 +1,21 @@ +# Generated by Django 5.1.4 on 2025-01-27 14:58 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ("main", "0014_rename_error_breakdown_diffwarning_data"), + ] + + operations = [ + migrations.RemoveField( + model_name="repo", + name="is_initialized", + ), + migrations.RemoveField( + model_name="worker", + name="ssh_private_key", + ), + ] diff --git a/src/lando/main/models/repo.py b/src/lando/main/models/repo.py index 913536d7..ee09db47 100644 --- a/src/lando/main/models/repo.py +++ b/src/lando/main/models/repo.py @@ -64,8 +64,6 @@ def path(self) -> str: blank=True, default=None, ) - is_initialized = models.BooleanField(default=False) - system_path = models.CharField( max_length=255, blank=True, diff --git a/src/lando/main/models/worker.py b/src/lando/main/models/worker.py index 3f9a7900..e8e18af5 100644 --- a/src/lando/main/models/worker.py +++ b/src/lando/main/models/worker.py @@ -15,7 +15,6 @@ class Worker(BaseModel): name = models.CharField(max_length=255, unique=True) is_paused = models.BooleanField(default=False) is_stopped = models.BooleanField(default=False) - ssh_private_key = models.TextField(null=True, blank=True) applicable_repos = models.ManyToManyField(Repo) throttle_seconds = models.IntegerField(default=10)