31/05/2020
Chuyện kinh dị ngày thứ 6 - DEBUG trong 3h.
Thứ 6 vừa qua, tôi cứ nghĩ sẽ có một ngày làm việc cuối tuần kết thúc thật nhẹ nhàng. Tôi vẫn chỉ nghĩ như vậy cho đến khi người đàn ông với mái tóc đuôi ngựa - là boss thì thầm vào tai và nói: " $ #$ #@$ #@$ #@@" - tạm dịch ra là: "Lỗi này từ 2 tháng trước không phải Hoangさん bảo đã fix rồi hay sao mà giờ tôi kiểm tra vẫn vậy". Thú thật với các bạn, làm ở đây, vị trí này ( ý tôi ở Nhật và làm Cầu nối ), việc đã thông báo điều gì đó dù lớn hay bé thì phải như kiểu đinh đống cột, bột gọt thành hồ rồi ấy! Mất gần 5s, não tôi mới chuyển tải hết đóng tiếng Nhật kèm biểu cảm của Boss thành ngôn ngữ mẹ đẻ với nhiều cảm xúc xen lẫn trong đó. Như phản xạ đầu tiên là tôi xin lỗi trước sau đó thì tôi tập trung hết tinh hoa để ngồi xem cái lỗi quái quỷ này là gì và tại sao lại đến vào thứ 6 đẹp trời à mà cũng mưa sml như vậy!
Chuyện debug bắt đầu ...
Để các bạn dễ hình dung tôi xin phép miêu tả qua trạng thái của con bug như sau. Kiểu là website tôi đang phát triển có một trang gọi là download (có thể xem ở đây: https://vi.ac-illust.com/clip-art/870636), người dùng nếu thích thì sẽ bấm like cho bức ảnh ở trang này. Vấn đề là bức ảnh với số like lên đến 200 like đột nhiên trở về số 0 tròn trĩnh một cách kỳ lạ. Việc của tôi là phải đi tìm lý do của vụ mất tích bí ẩn này... Giờ thì tôi bắt đầu debug < debug = điều tra, sửa lỗi ... >
Lật lại ký ức, tôi nhớ rằng 2 tháng trước khi lần đầu gặp con BUG này, tôi đã liên hệ đến founder của nó - tức là mấy chàng trai đội offshore người tạo ra nó để thông báo và yêu cầu fix. Tìm kiếm trên Trello tôi thấy Card mà tôi tạo ra để trao đổi với đội Offshore. Đọc comment cuối cùng của cha để đoạn code, anh ấy khẳng định rằng: "Đã kiểm tra max kỷ nhưng không thấy lỗi, blah blah...". Thế quái nào lúc đấy tôi lại tin vào những lời ngọt ngào ấy nhỉ !!!
Sau khi đã hình dung ra tất cả vấn đề, tôi nhìn đồng hồ chỉ còn 3 tiếng là kết thúc giờ làm việc. Không còn quá nhiều thời gian, tôi nhanh chóng setup một cuộc meeting với phía Việt Nam liền, trong 10 phút tôi thông báo đấy đủ tình trạng vấn đề và yêu cầu phải debug và fix lại còn bug này trong vòng 3 giờ nữa. Tôi rời cuộc họp với con laptop trở về bàn làm việc. Nhưng một khi lòng tin đã bị đánh mất thì sự bất an cứ dai dẵng trong tâm trí. Tôi nghĩ rằng không thể đợi đội offshore fix được nữa, mình phải chủ động thôi,...
Nói là làm tôi mở source code lên rồi bắt đầu thám hiểm. Với một loạt thao tác debug, sau 30 phút tôi phát hiện ra logic code của phần này .... chả sai tẹo nào cả, thậm chí cha đẻ của nó còn code rất chuẩn. Tôi còn học được vài kỷ thuật mới khi đọc code nữa chứ,... vậy vấn đề là ở đâu ? Tôi thử lập lại thao tác LIKE trên ảnh, thì số like vẫn tăng lên, vậy tại sao cứ sau một khoản thời gian lại bị reset về 0. Thật ảo diệu !!! Nhưng vấn đề càng khó thì tôi càng bị kích thích, tôi không còn lo lắng vì con bug này nữa mà trở thành cảm giác thích thú đến lạ lùng. Tôi nhất định phải tìm ra được cái mà ông bạn Nhật tôi hay nói: "違和感があるかな!”ー"Có điều gì đó không đúng ở đây"
Phải có tý kích thích mới "RA" được ... ý tôi là CAFE ☕
Sau khi làm tý cafe cho tỉnh táo, tôi lại tiếp tục. Giờ thì để xem nào !!! Nếu mà logic code không sai thì thử kiểm tra kỷ hơn table trong Database xem. Chỉ mất một ít giây tôi đã xem được record của con ảnh bị lỗi. Nhìn vào column LIKE thì tôi thấy số LIKE đúng bằng số LIKE hiển thị ở website. Tôi thử like phát nữa thì số LIKE ở column cũng được tăng theo. Nếu như vậy, tôi đoán phải có một thao tác gì đó làm thay đổi trực tiếp giá trị của record ảnh này. Tôi bèn kiểm tra hai giá trị unix time trong column CREATED_AT và UPDATED_AT. Giá trị UPDATED_AT thì đúng là hôm nay rồi cơ mà từ từ hình như CREATED_AT có vấn đề: sao lại là 15/10/2017 lúc 3pm nhã @@"... Con ảnh này được thêm vào từ thời khai thiên lập quốc mà sao lại được tạo ra tuần trước... Đến đây thì vẫn chưa đủ dữ kiện lắm, tôi thử query để xem thử có bao nhiêu ảnh trong DB có CREATED_AT là ngày 15/10/2017. Đệt ... @@... những 130 ảnh từ kết quả cho ra. Bí ẩn bất đầu được khai sáng. Đầu tôi lúc đó nghĩ rằng, chỉ cần biết 130 ảnh này tại sao hôm đó lại được thao tác thì chắc chắn sẽ tìm ra nguyên nhân cho vụ này. Nghĩ vậy, tôi bèn in ra ID và TITLE của các bức ảnh ra giấy và mang nó sang phòng Marketing và Designer để hỏi.
CHÂN TƯỚNG SỰ VIỆC.
Bằng tiếng Nhật cùi bắp pha lẫn một chút tiếng Anh bồi tôi cố trình bày câu hỏi của mình. Và điều tôi mong đợi cũng đến. Đúng là ngày 15/10 đội Design có thao tác với 130 cái ảnh này. Công việc của họ đã làm là update thêm Tag cho từng ảnh. Nghe đến đây, tôi mĩm cười, tôi tin rằng mình đã tìm thấy câu trả lời cho mọi chuyện. Cuối chào thật chuẩn Nhật và trở về bàn làm việc của mình.
Dựa theo thông tin của team Designer cung cấp, tôi đoán nguyên nhân của vấn đề này chính là ở màn hình management TAG của site admin. Nhưng đừng vôi mừng, thử kiểm tra xem, ....sột xoạt... Á đây rồi! Đoạn code có vấn đề đây rồi, ... thì ra là vậy! Vấn đề như mình nghĩ: một thanh niên nào đó (không để tên trên đoạn code) đã code một cách đầy sáng tạo làm tôi xúc động đại khái như sau: function ###() cứ chạy tạo ra record hoàn toàn mới thay vì update lại trên record có sẵn! Ôi tôi chết mất !!! Cảm xúc ứ biết diễn tả thế nào lúc đó, ... chỉ muốn hét lên " What the folk ? "
Nhưng sau đó tôi cũng bình tĩnh và hoàn tất phần còn lại của công việc! Tuy nhiên nổi đau vào ngày đó đến giờ trong tôi vẫn chưa nguôi ngoi ...
P/s: Bài học rút ra là...
- Để làm BreSE thì phải là SE trước
- Đừng tin report miệng phải tin Report kèm evidence