המונה ששינה את קטלוג המוצרים שלנו ל-502

משלוח

דף הקטלוג שמפרט את כל ערכות האוטומציה שאנחנו מוכרים החזיר לכל המבקרים 502 Bad Gateway במשך כ-41 שעות לאחר ההשקה. הדף של כל ערכת אוטומציה עבד, דף הבית עבד, התשלום עבד. החלק השבור היה כמה שורות שספרו צפיות בדפים.

הבאג

השרת של החנות שלנו סופר ביקורים בדפי ערכות אוטומציה. כדי לזהות לאיזו ערכת אוטומציה מיועד הבקשה, הוא לקח את החלק השני של הנתיב:

self._count_view(path.strip("/").split("/")[1] if path.count("/") >= 2 else "")

עבור /kits/studio/ זה studio. עבור הקטלוג עצמו, /kits/, לנתיב יש שני לוכסים, כך שמנגנון ההגנה העביר אותו, אבל לאחר הסרת הלוכסים נשאר חלק אחד בלבד, ו-[1] העלה IndexError. ה-handler הוא http.server הסטנדרטי של Python: חריגה ב-do_GET סוגרת את החיבור ללא תשובה, ו-Cloudflare הציגה למבקר 502.

התיקון הוא פונקציה קטנה אחת שמחזירה מחרוזת ריקה כאשר החלק חסר. מונה הצפיות היה זקוק רק לשם של ערכת האוטומציה; הוא מעולם לא היה צריך להיות מסוגל לשבור את הדף שהוא סופר.

למה אף אחד מהבדיקות שלנו לא זיהה את זה

מה השתנה

המסקנה

עבודת צד בטיפול בבקשה, כגון ספירה, רישום יומן או מעקב, לעולם לא צריכה להכשיל את הבקשה, ובדיקת דפים שמכסה רק את הדפים ששיניתם לאחרונה מפספסת את אלה שמקשרים אליהם. השומר ב-Night Watch מקבל רשימה כלשהי של דפים, שכל אחד מהם חייב להכיל טקסט מסוים, ולא רק דפי בית.

עודכן: