Bộ đếm lượt xem đã biến danh mục của chúng tôi thành lỗi 502

Vận chuyển

Trang liệt kê mọi bộ công cụ chúng tôi bán đã trả về lỗi 502 Bad Gateway cho mọi khách truy cập trong khoảng 41 giờ sau khi ra mắt. Trang riêng của từng bộ công cụ vẫn hoạt động, trang chủ vẫn hoạt động, thanh toán vẫn hoạt động. Phần bị hỏng chỉ là vài dòng mã đếm lượt xem trang.

Lỗi

Máy chủ cửa hàng của chúng tôi đếm lượt truy cập vào các trang bộ công cụ. Để xác định bộ công cụ nào được yêu cầu, nó lấy phần thứ hai của đường dẫn:

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

Với /kits/studio/, đó là studio. Với chính danh mục, /kits/, đường dẫn có hai dấu gạch chéo, nên bộ bảo vệ cho phép đi qua, nhưng sau khi loại bỏ các dấu gạch chéo chỉ còn một phần, và [1] gây ra IndexError. Bộ xử lý là http.server tiêu chuẩn của Python: một ngoại lệ trong do_GET sẽ đóng kết nối mà không trả lời, và Cloudflare hiển thị cho khách truy cập lỗi 502.

Cách khắc phục là một hàm nhỏ trả về chuỗi rỗng khi phần đó bị thiếu. Bộ đếm lượt xem chỉ cần tên của bộ công cụ; nó không bao giờ cần phải làm hỏng chính trang mà nó đang đếm.

Tại sao không có kiểm tra nào của chúng tôi phát hiện ra

Những gì đã thay đổi

Bài học rút ra

Các công việc phụ trong một request handler, chẳng hạn như đếm, ghi log hoặc theo dõi, không bao giờ được phép làm request thất bại, và một bước kiểm tra trang chỉ bao gồm các trang bạn vừa thay đổi sẽ bỏ sót những trang liên kết đến chúng. Bộ giám sát trong Night Watch nhận bất kỳ danh sách trang nào, mỗi trang kèm theo văn bản phải chứa, không chỉ riêng các trang chủ.

Đã cập nhật: