From e77c7688827625e6a459659252b312b74a5a48df Mon Sep 17 00:00:00 2001 From: Laura Hausmann Date: Mon, 27 May 2024 21:35:09 +0200 Subject: [PATCH] [backend/database] Switch job identifier generation scheme to from UUIDv4 to ULID --- .../Core/Database/DatabaseContext.cs | 1 + .../20240527200201_MigrateJobIdToUlid.cs | 25 +++++++++++++++++++ .../DatabaseContextModelSnapshot.cs | 3 +-- .../Core/Extensions/GuidExtensions.cs | 1 + .../Core/Services/QueueService.cs | 8 +++++- Iceshrimp.Backend/Iceshrimp.Backend.csproj | 1 + 6 files changed, 36 insertions(+), 3 deletions(-) create mode 100644 Iceshrimp.Backend/Core/Database/Migrations/20240527200201_MigrateJobIdToUlid.cs diff --git a/Iceshrimp.Backend/Core/Database/DatabaseContext.cs b/Iceshrimp.Backend/Core/Database/DatabaseContext.cs index 5c2a938b..8b6ce0e5 100644 --- a/Iceshrimp.Backend/Core/Database/DatabaseContext.cs +++ b/Iceshrimp.Backend/Core/Database/DatabaseContext.cs @@ -1181,6 +1181,7 @@ public class DatabaseContext(DbContextOptions options) modelBuilder.Entity(entity => { + entity.Property(e => e.Id).ValueGeneratedNever(); entity.Property(e => e.Status).HasDefaultValue(Job.JobStatus.Queued); entity.Property(e => e.QueuedAt).HasDefaultValueSql("now()"); entity.HasOne().WithMany().HasForeignKey(d => d.WorkerId).OnDelete(DeleteBehavior.SetNull); diff --git a/Iceshrimp.Backend/Core/Database/Migrations/20240527200201_MigrateJobIdToUlid.cs b/Iceshrimp.Backend/Core/Database/Migrations/20240527200201_MigrateJobIdToUlid.cs new file mode 100644 index 00000000..fcecfe40 --- /dev/null +++ b/Iceshrimp.Backend/Core/Database/Migrations/20240527200201_MigrateJobIdToUlid.cs @@ -0,0 +1,25 @@ +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Infrastructure; + +#nullable disable + +namespace Iceshrimp.Backend.Core.Database.Migrations +{ + /// + [DbContext(typeof(DatabaseContext))] + [Migration("20240527200201_MigrateJobIdToUlid")] + public partial class MigrateJobIdToUlid : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.Sql("""UPDATE "jobs" SET "id" = concat('00000000-0', substring("id"::text, 11, 36))::uuid;"""); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + + } + } +} diff --git a/Iceshrimp.Backend/Core/Database/Migrations/DatabaseContextModelSnapshot.cs b/Iceshrimp.Backend/Core/Database/Migrations/DatabaseContextModelSnapshot.cs index bc46529c..c11ee665 100644 --- a/Iceshrimp.Backend/Core/Database/Migrations/DatabaseContextModelSnapshot.cs +++ b/Iceshrimp.Backend/Core/Database/Migrations/DatabaseContextModelSnapshot.cs @@ -19,7 +19,7 @@ namespace Iceshrimp.Backend.Core.Database.Migrations { #pragma warning disable 612, 618 modelBuilder - .HasAnnotation("ProductVersion", "8.0.4") + .HasAnnotation("ProductVersion", "8.0.5") .HasAnnotation("Relational:MaxIdentifierLength", 63); NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "antenna_src_enum", new[] { "home", "all", "users", "list", "group", "instances" }); @@ -1539,7 +1539,6 @@ namespace Iceshrimp.Backend.Core.Database.Migrations modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.Job", b => { b.Property("Id") - .ValueGeneratedOnAdd() .HasColumnType("uuid") .HasColumnName("id"); diff --git a/Iceshrimp.Backend/Core/Extensions/GuidExtensions.cs b/Iceshrimp.Backend/Core/Extensions/GuidExtensions.cs index c2d1f79a..70532bfd 100644 --- a/Iceshrimp.Backend/Core/Extensions/GuidExtensions.cs +++ b/Iceshrimp.Backend/Core/Extensions/GuidExtensions.cs @@ -3,4 +3,5 @@ namespace Iceshrimp.Backend.Core.Extensions; public static class GuidExtensions { public static string ToStringLower(this Guid guid) => guid.ToString().ToLowerInvariant(); + public static string ToStringLower(this Ulid ulid) => ulid.ToString().ToLowerInvariant(); } \ No newline at end of file diff --git a/Iceshrimp.Backend/Core/Services/QueueService.cs b/Iceshrimp.Backend/Core/Services/QueueService.cs index 0b99900d..83e257ca 100644 --- a/Iceshrimp.Backend/Core/Services/QueueService.cs +++ b/Iceshrimp.Backend/Core/Services/QueueService.cs @@ -502,7 +502,12 @@ public class PostgresJobQueue( await using var scope = GetScope(); await using var db = GetDbContext(scope); - var job = new Job { Queue = name, Data = JsonSerializer.Serialize(jobData) }; + var job = new Job + { + Id = Ulid.NewUlid().ToGuid(), + Queue = name, + Data = JsonSerializer.Serialize(jobData) + }; db.Add(job); await db.SaveChangesAsync(); await RaiseJobQueuedEvent(db); @@ -515,6 +520,7 @@ public class PostgresJobQueue( var job = new Job { + Id = Ulid.NewUlid().ToGuid(), Queue = name, Data = JsonSerializer.Serialize(jobData), Status = Job.JobStatus.Delayed, diff --git a/Iceshrimp.Backend/Iceshrimp.Backend.csproj b/Iceshrimp.Backend/Iceshrimp.Backend.csproj index d537ccb6..1a243328 100644 --- a/Iceshrimp.Backend/Iceshrimp.Backend.csproj +++ b/Iceshrimp.Backend/Iceshrimp.Backend.csproj @@ -58,6 +58,7 @@ +