Hacker News Nổi bật (buzzing.cc bản dịch tiếng Trung)
92

Thủ thuật

Phá vỡ giới hạn: Dùng Antithesis và Claude tái hiện lỗi WAL-Reset của SQLite trong 15 phút

(giờ Việt Nam)

Tóm tắt AI

Sự kết hợp giữa AI và Antithesis đã giúp tái hiện thành công lỗi WAL-Reset tồn tại suốt 14 năm trong SQLite chỉ sau 15 phút, một kỳ tích mà trước đây các kỹ sư phải mất nhiều tháng mới giải quyết được.

Bản dịch AI

Breaking the WAL | Antithesis

Chào mọi người, lại là Carl đây. Chắc các bạn vẫn còn nhớ tôi là người đã dạy Claude cách sử dụng Antithesis.

Đầu năm nay, SQLite đã phát hành phiên bản (3.51.3), giúp khắc phục một lỗi tồn tại từ lâu trong hệ thống con Write-Ahead Logging (WAL) có tên là lỗi WAL-Reset. Lỗi này đã tồn tại từ năm 2010, nhưng đội ngũ SQLite dường như không hề hay biết về sự hiện diện của nó cho đến đầu năm nay (chi tiết hơn ở bên dưới). Như họ đã viết vào thời điểm đó:

“Lỗi này là một tình trạng tranh chấp dữ liệu (data race) với các ràng buộc thời gian cực kỳ khắt khe. Nó rất khó xảy ra trong quá trình sử dụng thông thường. Các nhà phát triển chưa bao giờ có thể tái hiện lỗi này một cách tự nhiên và phải thêm logic kiểm thử đặc biệt vào SQLite để cố tình tạo ra các điều kiện gây lỗi nhằm xác minh rằng vấn đề đã được giải quyết.”

Thực ra tôi đang đi du lịch cùng bạn gái khi đọc được tin này, nhưng vì là một "gã mọt" cơ sở dữ liệu chính hiệu, tôi đã bị cuốn vào ngay lập tức. Suy cho cùng, các lỗi trong SQLite vốn cực kỳ hiếm gặp. Hơn nữa, đây giống như một "viên kẹo M&M nâu" hoàn hảo: một lỗi đã biết, đầy thách thức mà chúng tôi có thể truy vết bằng Antithesis (chúng tôi đã làm điều này rất nhiều trong các bản POC của mình). Thêm vào đó, tôi vừa mới hoàn thiện các kỹ năng cho Claude xong.

Thế là, khi đang ngồi trên một sườn đồi ở Sunshine Coast, tôi lấy điện thoại ra và yêu cầu Claude bắt tay vào việc. Tôi bảo nó thiết lập SQL 3.51.2 – phiên bản vẫn còn lỗi – vào Antithesis, sau đó cài cắm vào mã nguồn một loạt các khẳng định (assertions) của Antithesis. Bạn có thể xem phiên bản đã được cài cắm tại đây.

Gửi lời chào đến quê hương British Columbia xinh đẹp không gì sánh bằng của tôi.

Sau đó, tôi yêu cầu nó viết một khối lượng công việc (workload) đơn giản để kiểm tra mã chèn và kiểm tra (checkpoint) của WAL. Đáng chú ý, đây là một khối lượng công việc hoàn toàn phổ quát. Nó chỉ chạy các lệnh ghi và checkpoint đồng thời – những thứ mà bạn mong đợi sẽ thực sự xảy ra trong môi trường thực tế, mọi lúc mọi nơi. Các khẳng định cũng mang tính phổ quát đối với lỗi này, chúng đều là các khẳng định tiêu chuẩn mà bạn sẽ thêm vào bất kỳ cơ sở dữ liệu nào, chẳng hạn như “không mất dữ liệu đã cam kết” và “cơ sở dữ liệu không bị hỏng” (được gọi là kiểm tra tính toàn vẹn trong sqlite).

Trong lần chạy đầu tiên, Antithesis đã bắt được lỗi chỉ trong 15 phút. Đây là báo cáo. Phần bạn cần tìm là:

Sau đó, tôi lặp lại quy trình với bản 3.51.3, cùng khối lượng công việc và các cài cắm của Antithesis. Đúng như dự đoán, kết quả chạy đã hiển thị màu xanh (thành công).

Tôi nghĩ về điều này hôm nay vì Tailscale vừa viết một bài blog xuất sắc về việc giải quyết các vấn đề về thời gian hoạt động (uptime) mà họ gặp phải trong năm 2025. Những vấn đề đó chính là cách đội ngũ SQLite phát hiện ra lỗi WAL-Reset. Tailscale đã phải chịu đựng 6 tháng với thời gian hoạt động chập chờn, sau đó họ và đội ngũ SQLite đã mất nhiều tuần để săn lùng lỗi, triển khai rồi lại phải gỡ bỏ một bản sửa lỗi gây ra vấn đề khác, rồi phải đợi thêm hai tháng nữa để xem liệu bản sửa lỗi “thực sự” (3.51.3) có hiệu quả hay không.

Để tìm ra nguyên nhân gốc rễ của vấn đề, họ đã phải viết một đường ống ghi nhật ký giao dịch mới trong Tailscale, sau đó chèn thêm một công cụ gỡ lỗi mới cho lớp hệ thống tệp ảo trong SQLite. Trong Antithesis, quy trình này không hẳn chỉ gói gọn trong một cú nhấp chuột, nhưng một cú nhấp chuột sẽ cung cấp cho bạn phân tích nguyên nhân giúp xác định chính xác vấn đề trong tích tắc, cùng với khả năng gỡ lỗi du hành thời gian (time-travel debugging) có tính tất định, cho phép bạn thực hiện các phân tích giả định (what-if) và phân tích phá hủy.

Như đội ngũ Tailscale đã viết: “không ai muốn chúng tôi dành sáu tháng để tìm lỗi trong SQLite cả. Đây là một trải nghiệm vô cùng thất vọng cho cả khách hàng và nhân viên của chúng tôi”.

Việc tìm ra những lỗi như WAL-Reset là cực kỳ khó khăn (có lẽ giống như việc bò trên những mảnh thủy tinh vỡ) – nhưng với những lỗi hiếm và khó, sự tra tấn thực sự có thể đến khi bạn phải chờ đợi để xem liệu bản sửa lỗi của mình có thực sự hiệu quả hay không. Tôi đã làm việc với đủ loại cơ sở dữ liệu và đã tự mình trải qua điều này rất, rất nhiều lần.

Vì vậy, thật tỉnh táo nhưng cũng đầy phấn khởi khi nhận ra lỗi này đã gây đau đầu như thế nào trong thực tế. Bằng cách cung cấp cho các tác nhân (agents) kỹ năng sử dụng Antithesis, tôi vừa tìm thấy và xác minh nó chỉ trong khoảng một giờ, ngay trên điện thoại của mình, khi đang ngồi dưới những tán cây vân sam trong ánh nắng. Tôi biết các kỹ năng tác nhân của chúng tôi hiệu quả, nhưng tôi không ngờ chúng lại hiệu quả đến mức này. Nếu bạn có một vấn đề cơ sở dữ liệu hóc búa, hãy gọi cho tôi.

SQLiteAntithesisKiểm thử phần mềmAI ứng dụngLỗi hệ thống
Đọc bài gốc

Bài viết được AI dịch và tổng hợp tự động từ Hacker News Nổi bật (buzzing.cc bản dịch tiếng Trung). Liên kết bài gốc ở phía trên. Dữ liệu đồng bộ qua API công khai được ghi nguồn tại AI HOT (canonical) ↗. AIHOT.vn luôn dẫn nguồn đầy đủ — nếu bạn thấy điểm cần chỉnh sửa, hãy gửi ý kiến tại trang phản hồi.