This commit is contained in:
1 parent
4db3f45164
commit
d25c04cdd2
175 files changed
+56243
-15
No files matched your search
@@ -0,0 +1,60 @@
|
||||
"""Exit abruptly from inside a SQLite FTS rebuild transaction."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import os
|
||||
import sqlite3
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
from gewu.adapters.git_repository import GitCanonicalRepository
|
||||
from gewu.adapters.sqlite_search import SQLiteSearchIndex
|
||||
|
||||
|
||||
class CrashConnection(sqlite3.Connection):
|
||||
def __init__(self, *args: object, **kwargs: object) -> None:
|
||||
super().__init__(*args, **kwargs) # type: ignore[arg-type]
|
||||
self._fts_inserts = 0
|
||||
|
||||
def execute(
|
||||
self,
|
||||
sql: str,
|
||||
parameters: tuple[object, ...] = (),
|
||||
/,
|
||||
) -> sqlite3.Cursor:
|
||||
cursor = super().execute(sql, parameters)
|
||||
if sql.lstrip().upper().startswith("INSERT INTO NODE_FTS"):
|
||||
self._fts_inserts += 1
|
||||
if self._fts_inserts == 5:
|
||||
os._exit(74)
|
||||
return cursor
|
||||
|
||||
|
||||
class CrashDuringIndexRebuild(SQLiteSearchIndex):
|
||||
def _connect(self) -> sqlite3.Connection:
|
||||
connection = sqlite3.connect(
|
||||
self.path,
|
||||
timeout=5,
|
||||
isolation_level=None,
|
||||
factory=CrashConnection,
|
||||
)
|
||||
connection.execute("PRAGMA foreign_keys=ON")
|
||||
connection.execute("PRAGMA busy_timeout=5000")
|
||||
connection.execute("PRAGMA synchronous=NORMAL")
|
||||
return connection
|
||||
|
||||
|
||||
def main() -> None:
|
||||
repository = GitCanonicalRepository(Path(sys.argv[1]))
|
||||
index = CrashDuringIndexRebuild(Path(sys.argv[2]), repository)
|
||||
index.search(
|
||||
query="visitors",
|
||||
project_ids=("dome-performance",),
|
||||
include_shared=False,
|
||||
limit=20,
|
||||
)
|
||||
raise RuntimeError("SQLite rebuild did not reach the requested crash point")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in new issue
Block a user