פרויקט יומן רשומות עם התאוששות¶
בפרויקט הביניים השלישי נבנה יומן append-only שמחזיר אישור רק אחרי סנכרון. כל רשומה תכיל גרסת פורמט, מספר רצף, אורך ו־checksum. בזמן פתיחה מחדש נבדוק את היומן מההתחלה, נקבל רק רצף תקין ונבדיל בין זנב חלקי לבין רשומה שלמה עם שיבוש.
החוזה מאפשר לרשומה שהלקוח לא קיבל עליה אישור להופיע אחרי התאוששות. למשל, המערכת יכולה להשלים סנכרון ואז התהליך ימות לפני שליחת התשובה. לעומת זאת, כל רשומה שאושרה צריכה להיות ניתנת לשחזור תחת מודל הכשל והאחסון שהגדרנו. הלקוח צריך להשתמש במזהה פעולה אם הוא רוצה למנוע ביצוע עסקי כפול אחרי תשובה שאבדה.
הגבילו גודל רשומה וגודל יומן לפני הקצאה. הגדירו כותב יחיד באמצעות פרוטוקול נעילה מוסכם, ואל תאפשרו append אחרי שגיאת כתיבה או סנכרון בלי פתיחה והתאוששות מחדש. בעת יצירת היומן סנכרנו גם את פרסום השם בספרייה.
בדקו את parser ההתאוששות באמצעות חיתוך של קובץ בדיקה בכל גבול בייט. הוסיפו שינוי ביט בכותרת, ברצף, ב־payload וב־checksum. בדקו סדר לא תקין, אורך ענק, קובץ ריק ושתי רשומות תקינות עם זנב חלקי אחריהן.
בדקו בנפרד את שכבת האחסון. הריגת תהליך אחרי כל שלב בודקת ניקוי ופרוטוקול משתמש, אבל אינה מספיקה להוכיח עמידות מול אובדן מערכת. במעבדת VM ייעודית בצעו גם תרחיש כשל של האורחת או התקן בדיקה שמזריק שגיאות, ושמרו גרסאות, אפשרויות mount ומדיניות cache.
תנאי הסיום הוא שכל prefix חלקי משחזר בדיוק את הרשומות השלמות שלפניו, שיבוש מלא אינו נעלם בשקט, אישור נשלח רק אחרי נקודת הסנכרון, והדוח מפריד בין מה שנבדק בקוד לבין מה שנבדק במערכת האחסון. הוסיפו טבלת אי־ודאות שמסבירה מה הלקוח צריך לעשות אחרי כשל מאוחר.