Persist permanent indexing failures in the RAG index

This commit is contained in:
Thorsten Sommer committed 2026-09-09 11:12:30 +02:00
1 parent 6dd2389a99
commit 0e22d58796
12 files changed
+253 -1

No files matched your search

@@ -0,0 +1,53 @@
#nullable disable
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Migrations;
namespace AIStudio.Tools.Databases.IndexStore.Migrations;
[DbContext(typeof(IndexStoreDbContext))]
[Migration("20260909000000_PermanentIndexingFailures")]
public partial class PermanentIndexingFailures : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.CreateTable(
name: "permanent_indexing_failures",
columns: table => new
{
parent_file_id = table.Column<string>(type: "TEXT", nullable: false),
data_source_id = table.Column<string>(type: "TEXT", nullable: false),
absolute_path = table.Column<string>(type: "TEXT", nullable: false, collation: "NOCASE"),
fingerprint = table.Column<string>(type: "TEXT", nullable: false),
failure_code = table.Column<string>(type: "TEXT", nullable: false),
failure_message = table.Column<string>(type: "TEXT", nullable: false),
occurred_at_utc = table.Column<string>(type: "TEXT", nullable: false),
},
constraints: table =>
{
table.PrimaryKey("PK_permanent_indexing_failures", failure => failure.parent_file_id);
table.ForeignKey(
name: "FK_permanent_indexing_failures_data_sources_data_source_id",
column: failure => failure.data_source_id,
principalTable: "data_sources",
principalColumn: "data_source_id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateIndex(
name: "idx_permanent_indexing_failures_data_source",
table: "permanent_indexing_failures",
column: "data_source_id");
migrationBuilder.CreateIndex(
name: "idx_permanent_indexing_failures_data_source_absolute_path",
table: "permanent_indexing_failures",
columns: ["data_source_id", "absolute_path"],
unique: true);
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropTable(name: "permanent_indexing_failures");
}
}
@@ -209,6 +209,55 @@ partial class IndexStoreDbContextModelSnapshot : ModelSnapshot
entity.ToTable("embedding_chunks");
});
modelBuilder.Entity("AIStudio.Tools.Databases.IndexStore.IndexingFailureEntity", entity =>
{
entity.Property<string>("ParentFileId")
.HasColumnType("TEXT")
.HasColumnName("parent_file_id");
entity.Property<string>("AbsolutePath")
.IsRequired()
.HasColumnType("TEXT")
.HasColumnName("absolute_path")
.UseCollation("NOCASE");
entity.Property<string>("DataSourceId")
.IsRequired()
.HasColumnType("TEXT")
.HasColumnName("data_source_id");
entity.Property<string>("FailureCode")
.IsRequired()
.HasColumnType("TEXT")
.HasColumnName("failure_code");
entity.Property<string>("FailureMessage")
.IsRequired()
.HasColumnType("TEXT")
.HasColumnName("failure_message");
entity.Property<string>("Fingerprint")
.IsRequired()
.HasColumnType("TEXT")
.HasColumnName("fingerprint");
entity.Property<DateTimeOffset>("OccurredAtUtc")
.HasConversion(utcDateTimeOffsetConverter)
.HasColumnType("TEXT")
.HasColumnName("occurred_at_utc");
entity.HasKey("ParentFileId");
entity.HasIndex("DataSourceId")
.HasDatabaseName("idx_permanent_indexing_failures_data_source");
entity.HasIndex("DataSourceId", "AbsolutePath")
.IsUnique()
.HasDatabaseName("idx_permanent_indexing_failures_data_source_absolute_path");
entity.ToTable("permanent_indexing_failures");
});
modelBuilder.Entity("AIStudio.Tools.Databases.IndexStore.IndexStoreSearchResultEntity", entity =>
{
entity.Property<string>("AbsolutePath")
@@ -316,9 +365,22 @@ partial class IndexStoreDbContextModelSnapshot : ModelSnapshot
entity.Navigation("File");
});
modelBuilder.Entity("AIStudio.Tools.Databases.IndexStore.IndexingFailureEntity", entity =>
{
entity.HasOne("AIStudio.Tools.Databases.IndexStore.EmbeddingStateDataSourceEntity", "DataSource")
.WithMany("PermanentIndexingFailures")
.HasForeignKey("DataSourceId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
entity.Navigation("DataSource");
});
modelBuilder.Entity("AIStudio.Tools.Databases.IndexStore.EmbeddingStateDataSourceEntity", entity =>
{
entity.Navigation("Files");
entity.Navigation("PermanentIndexingFailures");
});
modelBuilder.Entity("AIStudio.Tools.Databases.IndexStore.EmbeddingStateFileEntity", entity =>