fix: various content_row fixes (#6823)

* fix: preserve instance file identity during upsert

* fix: preserve present files when hashing fails

* fix: serialize per-instance content mutations

* fix: prevent duplicate content entries

* fix: make file and content entry writes atomic

* fix: invalidate cached hashes for modified files

* feat: content lock

* fix: boris rev
This commit is contained in:
Calum H.
2026-07-23 20:36:21 +00:00
committed by GitHub
parent 95f97a44ec
commit 5c697f675c
21 changed files with 915 additions and 292 deletions
@@ -0,0 +1,74 @@
{
"db_name": "SQLite",
"query": "\n\t\tINSERT INTO instance_files (\n\t\t\tid,\n\t\t\tinstance_id,\n\t\t\trelative_path,\n\t\t\tfile_name,\n\t\t\tenabled,\n\t\t\tsha1,\n\t\t\tsize,\n\t\t\tmissing,\n\t\t\tadded_at,\n\t\t\tmodified_at\n\t\t)\n\t\tVALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n\t\tON CONFLICT (instance_id, relative_path) DO UPDATE SET\n\t\t\tfile_name = excluded.file_name,\n\t\t\tenabled = excluded.enabled,\n\t\t\tsha1 = excluded.sha1,\n\t\t\tsize = excluded.size,\n\t\t\tmissing = excluded.missing,\n\t\t\tmodified_at = excluded.modified_at\n\t\tRETURNING\n\t\t\tid,\n\t\t\tinstance_id,\n\t\t\trelative_path,\n\t\t\tfile_name,\n\t\t\tenabled,\n\t\t\tsha1,\n\t\t\tsize,\n\t\t\tmissing,\n\t\t\tadded_at,\n\t\t\tmodified_at\n\t\t",
"describe": {
"columns": [
{
"name": "id",
"ordinal": 0,
"type_info": "Text"
},
{
"name": "instance_id",
"ordinal": 1,
"type_info": "Text"
},
{
"name": "relative_path",
"ordinal": 2,
"type_info": "Text"
},
{
"name": "file_name",
"ordinal": 3,
"type_info": "Text"
},
{
"name": "enabled",
"ordinal": 4,
"type_info": "Integer"
},
{
"name": "sha1",
"ordinal": 5,
"type_info": "Text"
},
{
"name": "size",
"ordinal": 6,
"type_info": "Integer"
},
{
"name": "missing",
"ordinal": 7,
"type_info": "Integer"
},
{
"name": "added_at",
"ordinal": 8,
"type_info": "Integer"
},
{
"name": "modified_at",
"ordinal": 9,
"type_info": "Integer"
}
],
"parameters": {
"Right": 10
},
"nullable": [
false,
false,
false,
false,
false,
false,
false,
false,
false,
false
]
},
"hash": "59a314ee065e24af6d7138fcf11eed0eafc29732a15f25d051964660941c8d33"
}
@@ -1,20 +0,0 @@
{
"db_name": "SQLite",
"query": "\n\t\t\tSELECT id\n\t\t\tFROM instance_content_entries\n\t\t\tWHERE content_set_id = ?\n\t\t\t\tAND project_id = ?\n\t\t\t\tAND version_id = ?\n\t\t\tORDER BY modified_at DESC\n\t\t\tLIMIT 1\n\t\t\t",
"describe": {
"columns": [
{
"name": "id",
"ordinal": 0,
"type_info": "Text"
}
],
"parameters": {
"Right": 3
},
"nullable": [
false
]
},
"hash": "636bb0c426ac275d64f7c84b3349894d10faf920d56814c0c2336e4cd5002743"
}
@@ -0,0 +1,92 @@
{
"db_name": "SQLite",
"query": "\n\t\t\tINSERT INTO instance_content_entries (\n\t\t\t\tid,\n\t\t\t\tinstance_id,\n\t\t\t\tcontent_set_id,\n\t\t\t\tfile_id,\n\t\t\t\tproject_type,\n\t\t\t\tproject_id,\n\t\t\t\tversion_id,\n\t\t\t\tsource_kind,\n\t\t\t\tserver_requirement,\n\t\t\t\tclient_requirement,\n\t\t\t\tenabled,\n\t\t\t\tadded_at,\n\t\t\t\tmodified_at\n\t\t\t)\n\t\t\tVALUES (?, ?, ?, NULL, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n\t\t\tRETURNING\n\t\t\t\tid,\n\t\t\t\tinstance_id,\n\t\t\t\tcontent_set_id,\n\t\t\t\tfile_id,\n\t\t\t\tproject_type,\n\t\t\t\tproject_id,\n\t\t\t\tversion_id,\n\t\t\t\tsource_kind,\n\t\t\t\tserver_requirement,\n\t\t\t\tclient_requirement,\n\t\t\t\tenabled,\n\t\t\t\tadded_at,\n\t\t\t\tmodified_at\n\t\t\t",
"describe": {
"columns": [
{
"name": "id",
"ordinal": 0,
"type_info": "Text"
},
{
"name": "instance_id",
"ordinal": 1,
"type_info": "Text"
},
{
"name": "content_set_id",
"ordinal": 2,
"type_info": "Text"
},
{
"name": "file_id",
"ordinal": 3,
"type_info": "Text"
},
{
"name": "project_type",
"ordinal": 4,
"type_info": "Text"
},
{
"name": "project_id",
"ordinal": 5,
"type_info": "Text"
},
{
"name": "version_id",
"ordinal": 6,
"type_info": "Text"
},
{
"name": "source_kind",
"ordinal": 7,
"type_info": "Text"
},
{
"name": "server_requirement",
"ordinal": 8,
"type_info": "Text"
},
{
"name": "client_requirement",
"ordinal": 9,
"type_info": "Text"
},
{
"name": "enabled",
"ordinal": 10,
"type_info": "Integer"
},
{
"name": "added_at",
"ordinal": 11,
"type_info": "Integer"
},
{
"name": "modified_at",
"ordinal": 12,
"type_info": "Integer"
}
],
"parameters": {
"Right": 12
},
"nullable": [
false,
false,
false,
true,
false,
true,
true,
false,
false,
false,
false,
false,
false
]
},
"hash": "6a4dd5b455a6aa19bb866faa915b8bfd4b7aca017e919d6240d7e1e2fc412e5c"
}
@@ -1,20 +0,0 @@
{
"db_name": "SQLite",
"query": "\n\t\t\tSELECT id\n\t\t\tFROM instance_content_entries\n\t\t\tWHERE content_set_id = ? AND file_id = ?\n\t\t\tORDER BY modified_at DESC\n\t\t\tLIMIT 1\n\t\t\t",
"describe": {
"columns": [
{
"name": "id",
"ordinal": 0,
"type_info": "Text"
}
],
"parameters": {
"Right": 2
},
"nullable": [
false
]
},
"hash": "6a6e05b5c64a7061046383f69e07bc3f24cbde279858f3f440a78089b696a718"
}
@@ -0,0 +1,74 @@
{
"db_name": "SQLite",
"query": "\n\t\tUPDATE instance_files\n\t\tSET\n\t\t\tmissing = ?,\n\t\t\tmodified_at = ?\n\t\tWHERE id = ?\n\t\tRETURNING\n\t\t\tid,\n\t\t\tinstance_id,\n\t\t\trelative_path,\n\t\t\tfile_name,\n\t\t\tenabled,\n\t\t\tsha1,\n\t\t\tsize,\n\t\t\tmissing,\n\t\t\tadded_at,\n\t\t\tmodified_at\n\t\t",
"describe": {
"columns": [
{
"name": "id",
"ordinal": 0,
"type_info": "Text"
},
{
"name": "instance_id",
"ordinal": 1,
"type_info": "Text"
},
{
"name": "relative_path",
"ordinal": 2,
"type_info": "Text"
},
{
"name": "file_name",
"ordinal": 3,
"type_info": "Text"
},
{
"name": "enabled",
"ordinal": 4,
"type_info": "Integer"
},
{
"name": "sha1",
"ordinal": 5,
"type_info": "Text"
},
{
"name": "size",
"ordinal": 6,
"type_info": "Integer"
},
{
"name": "missing",
"ordinal": 7,
"type_info": "Integer"
},
{
"name": "added_at",
"ordinal": 8,
"type_info": "Integer"
},
{
"name": "modified_at",
"ordinal": 9,
"type_info": "Integer"
}
],
"parameters": {
"Right": 3
},
"nullable": [
false,
false,
false,
false,
false,
false,
false,
false,
false,
false
]
},
"hash": "6d76a6f26705044500983aaae9796a39ac667278b0c805da2320384a37c3baa1"
}
@@ -1,12 +0,0 @@
{
"db_name": "SQLite",
"query": "\n\t\tINSERT INTO instance_content_entries (\n\t\t\tid,\n\t\t\tinstance_id,\n\t\t\tcontent_set_id,\n\t\t\tfile_id,\n\t\t\tproject_type,\n\t\t\tproject_id,\n\t\t\tversion_id,\n\t\t\tsource_kind,\n\t\t\tserver_requirement,\n\t\t\tclient_requirement,\n\t\t\tenabled,\n\t\t\tadded_at,\n\t\t\tmodified_at\n\t\t)\n\t\tVALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n\t\tON CONFLICT(id) DO UPDATE SET\n\t\t\tfile_id = excluded.file_id,\n\t\t\tproject_type = excluded.project_type,\n\t\t\tproject_id = excluded.project_id,\n\t\t\tversion_id = excluded.version_id,\n\t\t\tsource_kind = excluded.source_kind,\n\t\t\tserver_requirement = excluded.server_requirement,\n\t\t\tclient_requirement = excluded.client_requirement,\n\t\t\tenabled = excluded.enabled,\n\t\t\tmodified_at = excluded.modified_at\n\t\t",
"describe": {
"columns": [],
"parameters": {
"Right": 13
},
"nullable": []
},
"hash": "81e6135eeba87a5f2084e0747b4675ff87456469e98c07520023981e3b3d121a"
}
@@ -1,12 +0,0 @@
{
"db_name": "SQLite",
"query": "\n\t\tUPDATE instance_files\n\t\tSET\n\t\t\tmissing = 1,\n\t\t\tmodified_at = ?\n\t\tWHERE instance_id = ?\n\t\t",
"describe": {
"columns": [],
"parameters": {
"Right": 2
},
"nullable": []
},
"hash": "8c54b73c00cfc43b47ca08cca4dbdc381afa80c2f493d04c8a54875619386caf"
}
@@ -0,0 +1,92 @@
{
"db_name": "SQLite",
"query": "\n\t\t\tINSERT INTO instance_content_entries (\n\t\t\t\tid,\n\t\t\t\tinstance_id,\n\t\t\t\tcontent_set_id,\n\t\t\t\tfile_id,\n\t\t\t\tproject_type,\n\t\t\t\tproject_id,\n\t\t\t\tversion_id,\n\t\t\t\tsource_kind,\n\t\t\t\tserver_requirement,\n\t\t\t\tclient_requirement,\n\t\t\t\tenabled,\n\t\t\t\tadded_at,\n\t\t\t\tmodified_at\n\t\t\t)\n\t\t\tVALUES (?, ?, ?, NULL, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n\t\t\tON CONFLICT (content_set_id, project_id, version_id)\n\t\t\t\tWHERE file_id IS NULL\n\t\t\t\t\tAND project_id IS NOT NULL\n\t\t\t\t\tAND version_id IS NOT NULL\n\t\t\tDO UPDATE SET\n\t\t\t\tinstance_id = excluded.instance_id,\n\t\t\t\tproject_type = excluded.project_type,\n\t\t\t\tsource_kind = excluded.source_kind,\n\t\t\t\tserver_requirement = excluded.server_requirement,\n\t\t\t\tclient_requirement = excluded.client_requirement,\n\t\t\t\tenabled = excluded.enabled,\n\t\t\t\tmodified_at = excluded.modified_at\n\t\t\tRETURNING\n\t\t\t\tid,\n\t\t\t\tinstance_id,\n\t\t\t\tcontent_set_id,\n\t\t\t\tfile_id,\n\t\t\t\tproject_type,\n\t\t\t\tproject_id,\n\t\t\t\tversion_id,\n\t\t\t\tsource_kind,\n\t\t\t\tserver_requirement,\n\t\t\t\tclient_requirement,\n\t\t\t\tenabled,\n\t\t\t\tadded_at,\n\t\t\t\tmodified_at\n\t\t\t",
"describe": {
"columns": [
{
"name": "id",
"ordinal": 0,
"type_info": "Text"
},
{
"name": "instance_id",
"ordinal": 1,
"type_info": "Text"
},
{
"name": "content_set_id",
"ordinal": 2,
"type_info": "Text"
},
{
"name": "file_id",
"ordinal": 3,
"type_info": "Text"
},
{
"name": "project_type",
"ordinal": 4,
"type_info": "Text"
},
{
"name": "project_id",
"ordinal": 5,
"type_info": "Text"
},
{
"name": "version_id",
"ordinal": 6,
"type_info": "Text"
},
{
"name": "source_kind",
"ordinal": 7,
"type_info": "Text"
},
{
"name": "server_requirement",
"ordinal": 8,
"type_info": "Text"
},
{
"name": "client_requirement",
"ordinal": 9,
"type_info": "Text"
},
{
"name": "enabled",
"ordinal": 10,
"type_info": "Integer"
},
{
"name": "added_at",
"ordinal": 11,
"type_info": "Integer"
},
{
"name": "modified_at",
"ordinal": 12,
"type_info": "Integer"
}
],
"parameters": {
"Right": 12
},
"nullable": [
false,
false,
false,
true,
false,
true,
true,
false,
false,
false,
false,
false,
false
]
},
"hash": "8daa2109fa7affe35b94d1fe3823ffe7601c0bca00db4ea0c8dc709bcf5642eb"
}
@@ -1,12 +0,0 @@
{
"db_name": "SQLite",
"query": "\n\t\tINSERT INTO instance_files (\n\t\t\tid,\n\t\t\tinstance_id,\n\t\t\trelative_path,\n\t\t\tfile_name,\n\t\t\tenabled,\n\t\t\tsha1,\n\t\t\tsize,\n\t\t\tmissing,\n\t\t\tadded_at,\n\t\t\tmodified_at\n\t\t)\n\t\tVALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n\t\tON CONFLICT (instance_id, relative_path) DO UPDATE SET\n\t\t\tfile_name = excluded.file_name,\n\t\t\tenabled = excluded.enabled,\n\t\t\tsha1 = excluded.sha1,\n\t\t\tsize = excluded.size,\n\t\t\tmissing = excluded.missing,\n\t\t\tmodified_at = excluded.modified_at\n\t\t",
"describe": {
"columns": [],
"parameters": {
"Right": 10
},
"nullable": []
},
"hash": "aabe81dce68b38d0e5a9748da0df4f0f982f22861d13a848b09538b3ef594847"
}
@@ -0,0 +1,92 @@
{
"db_name": "SQLite",
"query": "\n\t\t\tINSERT INTO instance_content_entries (\n\t\t\t\tid,\n\t\t\t\tinstance_id,\n\t\t\t\tcontent_set_id,\n\t\t\t\tfile_id,\n\t\t\t\tproject_type,\n\t\t\t\tproject_id,\n\t\t\t\tversion_id,\n\t\t\t\tsource_kind,\n\t\t\t\tserver_requirement,\n\t\t\t\tclient_requirement,\n\t\t\t\tenabled,\n\t\t\t\tadded_at,\n\t\t\t\tmodified_at\n\t\t\t)\n\t\t\tVALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n\t\t\tON CONFLICT (content_set_id, file_id)\n\t\t\t\tWHERE file_id IS NOT NULL\n\t\t\tDO UPDATE SET\n\t\t\t\tinstance_id = excluded.instance_id,\n\t\t\t\tproject_type = excluded.project_type,\n\t\t\t\tproject_id = excluded.project_id,\n\t\t\t\tversion_id = excluded.version_id,\n\t\t\t\tsource_kind = excluded.source_kind,\n\t\t\t\tserver_requirement = excluded.server_requirement,\n\t\t\t\tclient_requirement = excluded.client_requirement,\n\t\t\t\tenabled = excluded.enabled,\n\t\t\t\tmodified_at = excluded.modified_at\n\t\t\tRETURNING\n\t\t\t\tid,\n\t\t\t\tinstance_id,\n\t\t\t\tcontent_set_id,\n\t\t\t\tfile_id,\n\t\t\t\tproject_type,\n\t\t\t\tproject_id,\n\t\t\t\tversion_id,\n\t\t\t\tsource_kind,\n\t\t\t\tserver_requirement,\n\t\t\t\tclient_requirement,\n\t\t\t\tenabled,\n\t\t\t\tadded_at,\n\t\t\t\tmodified_at\n\t\t\t",
"describe": {
"columns": [
{
"name": "id",
"ordinal": 0,
"type_info": "Text"
},
{
"name": "instance_id",
"ordinal": 1,
"type_info": "Text"
},
{
"name": "content_set_id",
"ordinal": 2,
"type_info": "Text"
},
{
"name": "file_id",
"ordinal": 3,
"type_info": "Text"
},
{
"name": "project_type",
"ordinal": 4,
"type_info": "Text"
},
{
"name": "project_id",
"ordinal": 5,
"type_info": "Text"
},
{
"name": "version_id",
"ordinal": 6,
"type_info": "Text"
},
{
"name": "source_kind",
"ordinal": 7,
"type_info": "Text"
},
{
"name": "server_requirement",
"ordinal": 8,
"type_info": "Text"
},
{
"name": "client_requirement",
"ordinal": 9,
"type_info": "Text"
},
{
"name": "enabled",
"ordinal": 10,
"type_info": "Integer"
},
{
"name": "added_at",
"ordinal": 11,
"type_info": "Integer"
},
{
"name": "modified_at",
"ordinal": 12,
"type_info": "Integer"
}
],
"parameters": {
"Right": 13
},
"nullable": [
false,
false,
false,
true,
false,
true,
true,
false,
false,
false,
false,
false,
false
]
},
"hash": "fbdf27acfedbf52fe79ef2db7cf29b5cd8b86308ef1202b3f06570bbb6e1419e"
}