From patchwork Fri Aug 14 15:35:55 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Wattebled X-Patchwork-Id: 95278 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5A869C5CFCF for ; Fri, 14 Aug 2026 15:36:13 +0000 (UTC) Received: from mail.savoirfairelinux.com (mail.savoirfairelinux.com [208.88.110.44]) by mx.groups.io with SMTP id smtpd.msgproc02-g2.15781.1786721770308435080 for ; Fri, 14 Aug 2026 08:36:11 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@savoirfairelinux.com header.s=DFC430D2-D198-11EC-948E-34200CB392D2 header.b=tZJxyPRT; spf=pass (domain: savoirfairelinux.com, ip: 208.88.110.44, mailfrom: paolo.wattebled@savoirfairelinux.com) Received: from localhost (localhost [127.0.0.1]) by mail.savoirfairelinux.com (Postfix) with ESMTP id 27E733D818BB for ; Fri, 14 Aug 2026 11:36:09 -0400 (EDT) Received: from mail.savoirfairelinux.com ([127.0.0.1]) by localhost (mail.savoirfairelinux.com [127.0.0.1]) (amavis, port 10032) with ESMTP id TqKjW2fOyT8N; Fri, 14 Aug 2026 11:36:08 -0400 (EDT) Received: from localhost (localhost [127.0.0.1]) by mail.savoirfairelinux.com (Postfix) with ESMTP id 0859F3D818F3; Fri, 14 Aug 2026 11:36:08 -0400 (EDT) DKIM-Filter: OpenDKIM Filter v2.10.3 mail.savoirfairelinux.com 0859F3D818F3 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=savoirfairelinux.com; s=DFC430D2-D198-11EC-948E-34200CB392D2; t=1786721768; bh=u/PuuYVfW9CdEuMtJt0hKZJZqy3DzY2bRprAgD99BiA=; h=From:To:Date:Message-ID:MIME-Version; b=tZJxyPRTDvMSdJU0p+HMer8N8vgf0znWMQc3Uj/dkoTtdNfT2617jKI5DdM8+lvdM 6S2lW0MIf+wUVGi/BlNl91A0e7qzkJic+WVucZHIRamilNV4hpf0ddHTk9UDdzRqO2 tzAWeciID+kdmn3WB/7qSfmMHILWBF/jCgjNuLOUoJpPIjmvQptj+gh6nCEZQLhVR+ sq2oc4f876+KulTIbSMtmUTDN4orRP8iVLS5R3+GY+iGV9beIrhJP085FA3XBDbINZ XwWYClGUmqnaGbn36hxK+O5tsYAK1PCGLOJNoHoI/OtTwE+9aw7tjXXnR4hp5pK0RW 2sRdSOEJFSsAQ== X-Virus-Scanned: amavis at mail.savoirfairelinux.com Received: from mail.savoirfairelinux.com ([127.0.0.1]) by localhost (mail.savoirfairelinux.com [127.0.0.1]) (amavis, port 10026) with ESMTP id MJBcZlGKC_OS; Fri, 14 Aug 2026 11:36:07 -0400 (EDT) Received: from pwattebled.mtl.sfl (unknown [192.168.51.254]) by mail.savoirfairelinux.com (Postfix) with ESMTPSA id DE6883D818B5; Fri, 14 Aug 2026 11:36:07 -0400 (EDT) From: Paolo Wattebled To: bitbake-devel@lists.openembedded.org Cc: Paolo Wattebled Subject: [PATCH v2 2/5] toaster: Add recipe variable snapshot model Date: Fri, 14 Aug 2026 11:35:55 -0400 Message-ID: <20260814153602.2107764-3-paolo.wattebled@savoirfairelinux.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260814153602.2107764-1-paolo.wattebled@savoirfairelinux.com> References: <20260814153602.2107764-1-paolo.wattebled@savoirfairelinux.com> MIME-Version: 1.0 List-Id: X-Webhook-Received: from 45-33-107-173.ip.linodeusercontent.com [45.33.107.173] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Fri, 14 Aug 2026 15:36:13 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/bitbake-devel/message/19940 Add one compressed variable snapshot per build and recipe. Store the entry count separately so recipe list queries do not need to decompress each snapshot. AI-Generated: Uses GitHub Copilot and OpenCode with GPT-5.6 Sol Signed-off-by: Paolo Wattebled --- .../orm/migrations/0022_recipevariable.py | 27 +++++++++++++++++++ lib/toaster/orm/models.py | 10 +++++++ 2 files changed, 37 insertions(+) create mode 100644 lib/toaster/orm/migrations/0022_recipevariable.py diff --git a/lib/toaster/orm/migrations/0022_recipevariable.py b/lib/toaster/orm/migrations/0022_recipevariable.py new file mode 100644 index 000000000..455a8ce23 --- /dev/null +++ b/lib/toaster/orm/migrations/0022_recipevariable.py @@ -0,0 +1,27 @@ +# Generated by Django 4.2.5 on 2026-08-11 00:00 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('orm', '0021_eventlogsimports'), + ] + + operations = [ + migrations.CreateModel( + name='RecipeVariable', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('variables', models.BinaryField()), + ('variable_count', models.PositiveIntegerField(default=0)), + ('build', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='orm.build')), + ('recipe', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='orm.recipe')), + ], + options={ + 'unique_together': {('build', 'recipe')}, + }, + ), + ] diff --git a/lib/toaster/orm/models.py b/lib/toaster/orm/models.py index e2f488ed8..c240836cc 100644 --- a/lib/toaster/orm/models.py +++ b/lib/toaster/orm/models.py @@ -1346,6 +1346,16 @@ class Recipe(models.Model): unique_together = (("layer_version", "file_path", "pathflags"), ) +class RecipeVariable(models.Model): + build = models.ForeignKey(Build, on_delete=models.CASCADE) + recipe = models.ForeignKey(Recipe, on_delete=models.CASCADE) + variables = models.BinaryField() + variable_count = models.PositiveIntegerField(default=0) + + class Meta: + unique_together = (("build", "recipe"), ) + + class Recipe_DependencyManager(models.Manager): use_for_related_fields = True