Skip to content

עדכון ספרייה: אימות חלקי לפי טבלאות ובדיקת שאר הספרייה אחרי ה-commit - #1207

Merged
Y-PLONI merged 3 commits into
Otzaria:devfrom
palmoni5:feat/per-table-verify
Sep 8, 2026
Merged

Y-PLONI merged 3 commits into
Otzaria:devfrom
palmoni5:feat/per-table-verify

Conversation

@palmoni5

@palmoni5 palmoni5 commented Sep 7, 2026

Copy link
Copy Markdown
Member

מה השינוי

שלב "מאמת את הספרייה המעודכנת" בעדכון דלתא מתקצר מדקות לשניות: כשהמניפסט נושא hash לכל טבלה, ה-updater מאמת בתוך ה-transaction רק את הטבלאות שה-patch יכול היה לשנות. הטבלאות שאף צעד בשרשרת לא נגע בהן נבדקות אחרי שהשרשרת נשמרה וחיבור ה-RO נפתח מחדש — מעבר קריאה-בלבד ב-isolate, בלי תור פעולות ובלי closeForExternalWrite, בשלב חדש verifyDeferred שמוצג כ"בודק את שאר הספרייה (ניתן להמשיך לקרוא)".

  • LibraryUpdateRepository.applyDeltaPlan — מעביר verifyTableBytesHint לכל צעד, שומר את הבתים לכל טבלה ב-library_update_cache/verify_table_bytes.json, אוסף את חיתוך deferredTables של כל הצעדים, ואחרי refreshAfterDbUpdate מריץ verifyTableHashes על החיתוך מול toTableContentHashes של הצעד האחרון.
  • סטייה שמתגלית אחרי ה-commit אינה rollback (העדכון תקין לטבלאות שנגע בהן): נרשמת ל-errors.txt (Library Update: content drift in untouched tables), וזורקת LibraryDeltaContentDriftException עם תוצאת ה-apply. ה-bloc מנתב ל-needsFullConfirmation עם LibraryMessages.libraryContentDriftAfterUpdate, ושומר changedBookIds/requiresFullIndexRefresh כך שהאינדוקס לא אובד.
  • כשל של הבדיקה המושהית עצמה נרשם ל-errors.txt ואינו הופך עדכון תקין לשגיאה.
  • מניפסט בלי מפות — התנהגות זהה לקודם: אין שלב חדש, אין קובץ חדש, אותם progress ואותן חריגות.

PRים מקושרים (מענפים נפרדים) — סדר מיזוג

  1. עדכון דלתא: hash תוכן לכל טבלה במניפסט SeforimLibrary#27 — המפיק כותב את המפות למניפסט.
  2. אימות חלקי לפי טבלאות: hash לכל טבלה, verifyTableHashes (0.4.0) otzaria_library_updater#10 — הלקוח (0.4.0) עם האימות החלקי ו-verifyTableHashes.
  3. PR זה — למזג רק אחרי שניהם: התלות ב-pubspec.yaml היא ref: main של ה-updater, וה-API החדש (verifyTableBytesHint, deferredTables, verifyTableHashes) קיים רק שם. פותח מקומית דרך pubspec_overrides.yaml (לא בקומיט).

הענף כולל גם את c891d0a ("עדכון ספרייה: רישום נסיגה מ-WAL ל-errors.txt") שהיה על בסיס ה-worktree וטרם ב-dev.

איך נבדק

  • test/library_update/library_update_repository_test.dart: מניפסט עם מפות → אימות חלקי, שלב verifyDeferred, קובץ הרמז נשמר; סטייה בטבלה שלא נגעו בה → חריגה אחרי ה-commit, ה-DB מעודכן, refresh נקרא, נרשם ל-errors.txt; שרשרת שבה צעד אחד בלי מפות → אין verifyDeferred; מניפסט בלי מפות → אימות מלא בלבד ואין קובץ.
  • test/library_update/library_update_bloc_test.dart: סטייה → needsFullConfirmation עם ההודעה החדשה ו-changedBookIds שמורים.
  • flutter analyze נקי; flutter test test/library_update/ — 115/115.

palmoni5 and others added 3 commits September 8, 2026 00:35
כשהמניפסט נושא hash לכל טבלה, ה-updater מאמת בתוך ה-transaction רק את הטבלאות שה-patch יכול היה לשנות, ולכן שלב 'מאמת את הספרייה המעודכנת' מתקצר מדקות לשניות. הטבלאות שאף צעד בשרשרת לא נגע בהן נבדקות אחרי שהשרשרת נשמרה וחיבור ה-RO נפתח מחדש — מעבר קריאה-בלבד ב-isolate, בלי תור פעולות, בשלב 'verifyDeferred' ('בודק את שאר הספרייה (ניתן להמשיך לקרוא)').

סטייה שמתגלית בבדיקה הזו אינה rollback: העדכון תקין לטבלאות שנגע בהן. היא נרשמת ל-errors.txt ומנותבת ל-needsFullConfirmation עם LibraryMessages.libraryContentDriftAfterUpdate, תוך שימור changedBookIds לאינדוקס. כשל של הבדיקה עצמה נרשם ואינו הופך עדכון תקין לשגיאה.

רמז הבתים לכל טבלה נשמר ב-library_update_cache/verify_table_bytes.json למד ההתקדמות בריצות הבאות. מניפסט בלי מפות — התנהגות זהה לקודם.

דורש otzaria_library_updater 0.4.0 (Otzaria/otzaria_library_updater — PR מקושר) ו-SeforimLibrary עם המפות במניפסט.
@Y-PLONI
Y-PLONI force-pushed the feat/per-table-verify branch from f08a5d3 to ae468b2 Compare September 7, 2026 21:44
@Y-PLONI
Y-PLONI merged commit 8e521f2 into Otzaria:dev Sep 8, 2026
8 checks passed
@palmoni5
palmoni5 deleted the feat/per-table-verify branch September 8, 2026 07:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants