לפני לא מעט שנים בתחילת הקריירה שלי הייתי פרוייקטור בכל מיני משרדים ממשלתיים.
באותה התקופה הטמעתי מערכת לניהול פניות לקוח במשרד ממשלתי גדול, מהסוג שכולנו אוהבים לשנוא ושמחזיק הרבה מהכסף שלנו.
העבודה בדרך כלל היתה דיי מונוטונית ומשעממת, ועבדתי עם אנשים שבדרך כלל רצו שיפריעו להם כמה שפחות בזמן שהם במשרד עד שהם מגיעים הביתה. אבל לא באותו היום. באותו היום הם רצו משהו מיוחד, הם רצו להכניס חיים חדשים למערכת - הם רצו צבע. כן, הדרישה הסופר חשובה היתה היכולת להכניס טקסט עשיר בצבעים לתיאור הפניה של הלקוח.
אז זה מה שעשיתי. הורדתי איזה ג׳אווהסקריפט של עורך טקסט עשיר מהאינטרנט והחלפתי את שדה הטקסט הקיים בו. הלקוח היה מרוצה מהביצוע המהיר, אבל יותר מזה, הוא היה מרוצה שבדוחות היומיים שהוא הדפיס היה צבע.
אגב, הטפסים המודפסים נועדו כדי שהוא יחתום עליהם, יפקסס אותם אל המשרד הראשי (מה שגם ככה מאבד את הפואנטה של צבע) ולתייק. שאלתי אותו למה הוא לא מעביר את זה במייל וזהו, אבל הוא אמר לי שזה יותר קל ככה, יש עובדים ותיקים שלא מסתדרים טוב עם מחשב. (לא מאמינים לי?
https://www.calcalist.co.il/local/artic ... 95,00.html )
הבוס שלי היה קצת פחות מרוצה, הוא ציפה שהדבר יסתיים בשבוע ואני אוכל לחייב את הלקוח על שבועיים (מה, תכנון ופיתוח גם לוקחים זמן). התנצלתי בפניו על היעילות.
Overall, job well done
אחרי יומיים, קיבלתי הודעה מהלקוח שאומר שלפעמים אי אפשר לפתוח קריאות חדשות. באופן פרטני, כשהוא מסמן הרבה דברים בצבע, או משנה את הגודל פונט.
🤦‍♀️
הבנתי דיי מהר את הבעיה.
הטקסט העשיר הוא בפועל html, ואני, בטעות של מתחילים - עשיתי encoding מלא לכל התוכן, מה שניפח את כמות הטקסט שבפועל נרשמה לדאטהבייס, ככה שהקלדה של 1000 תווים הפכה לכמה אלפים בפועל. הרבה מעבר למגבלה של השדה בדאטהבייס.
MIGRATION
אז הבנתי שאני צריך לעשות מיגרציה כלשהי. הדבר הראשון שעשיתי הוא לעדכן את הסכימה של הדאטהבייס כדי להוסיף שדה חדש עם מגבלת תוכן עצומה ולכתוב את המידע אליה.
הדבר הבא שעשיתי הוא מיגרציה של כל התוכן שכבר נכתב אל השדה הזה, ולכתוב סקריפט קטן שינקה את התוכן העשיר מהמקור. זה לקח כמה שעות, אבל בסופו של דבר המיגרציה הוכתרה כהצלחה מסחררת.
מעכשיו, טקסט המקור תמיד נשמר נקי, ובשדה העשיר תמיד נוצר עותק שמכיל את כל פרטי העיצוב.
שוב, קיבלתי טפיחה על השכם מהלקוח, ועוד פרצוף חמוץ מהבוס. 🤷🏻‍♂️
לא עבר חודש, והלקוח עדכן אותי שעכשיו המערכת לא עולה בכלל. אי אפשר לקרוא, אי אפשר לכתוב, אי אפשר לשלוח לאזרחים בקשות תשלום.
כמובן שנסעתי אליהם מהר מאד, כדי להבין את גודל הבעיה. הדאטהבייס שהם הגדירו היה mssql מדור ישן מאד, שישב על שרת פיזי ישן מאד. הם הגבילו במקור את הגודל של בסיס הנתונים לכמה ג׳יגות בודדים, כי זה היה בערך חצי ג׳יגה מעבבר למה שהיה פנוי מלכתחילה על השרת לאחר התקנת מערכת ההפעלה. לא היה אפשר להגדיל את הגודל של בסיס הנתונים, ולא היה אפשר להקים שרת חדש, כי ה DBA של המשרד, היחיד עם הרשאות להקים DB חדש היה בחופשה בגיאורגיה. הוא היה צריך לחזור בעוד שבועיים.
סיכמתי עם מנהל המחשוב במשרד משהו פשוט - קריאות היסטוריות, שסגורות מעל שבוע ישתמשו רק בטקסט המקור, ובכל ערב יימחק המידע המעוצב, כדי שנוכל לפנות מקום עד שה DBA יחזור.
אז כתבתי את הסקריפט שעושה את זה.
DATA LOSS
מה הסיכוי שאחרי 8 שעות debugging אני חושב כמו שצריך?
לא גבוה.
אז באמת בכל ערב מחקתי את המידע המעוצב הישן. השלב הבא היה להסיר את המידע המקורי מהטבלה המקורית כדי להעביר אותו לשדה של הטקסט העשיר. למה? כי זה השדה שהמערכת קוראת ממנו עכשיו. בעולם אידיאלי הייתי משאיר את המידע המקורי עבור ביטחון, אבל כבר סיכמנו שיש לנו מגבלה על כמות השטח.
אז השאילתה שלי היתה קצת שגויה, ובמקום להעתיק את הטקסט ולהסיר אותו מהמקור, עדכנתי את השדה המעוצב ל ״ ״ (רווח) ואז מחקתי מהמקור.
בלילה אחד, כל ההיסטוריה מתחילת החודש נמחקה.
יופי.
RECOVERY
אז קיבלתי טלפון נוסף מהמשרד והם סיפרו על על מה שקרה. כמובן שכבר רציתי למות. הדבר אולי הכי גרוע בלהגיע כל יום למשרד ממשלתי הוא לשתות קפה שחור מצנצנת ישנה, בכוס קלקר חד פעמית ולערבב אותה עם כפית פלסטיק.
בכל אופן, שאלתי אותם בשיא התמימות אם יש גיבוי שאני יכול למשוך ממנו את הנתונים.
התשובה הקצרה היתה ״לא״
אובד עצות ניסיתי לחשוב על פתרון יצירתי. אולי היה איזה שהוא cache בשרת ובמערכת.
לא.
נזכרתי שבלוגים של הסקריפט שלי אני מדפיס את המידע שאני מוחק. ידעתי שכדאי לעשות את זה.
- שיט. זה rolling log. על כל 10 קבצים בלוג הוא דורס את הישן ביותר. היו לי גג 100 פניות לשחזור מתוך 1000 שנמחקו.
מובס, פניתי למנהל המחשוב ובאתי להגיד לו שאני לא מצליח לשחזר את המידע. אבל ראיתי משהו מונח על השולחן שלו. היה לו קלסר. אותו הקלסר שמכיל את הדוחות שהוא חותם עליהם ומפקסס. אספתי את עצמי מהר מאד ואמרתי לו שמצאתי דרך לשחזר את הנתונים.
כמובן שלא הודיתי בפניו שמדובר בקלסר. במקום זה, ביקשתי לשאול ממנו את הקלסר על מנת לוודא את תקינות הנתונים בשחזור.
באותו השבוע ישבתי בכל יום, 9 שעות, והקלדתי אירועים ישנים מהקלסר ישירות אל תוך הדאטהבייס.
לאחר שכל ״השחזור״ הסתיים, קיבלתי מילים חמות גם מהבוס שלי, כי הוא סוף סוף יכול היה לחייב את המשרד על השעות שעשיתי.
Crisis Avoided
אביתר