Lỗi ngớ ngẩn của Firestore
@LugonAPT đang viết một vài tính năng mới trên Firebase functions thì dính lỗi này:
Error: 13 INTERNAL: Received RST_STREAM with code 2 triggered by internal client error: Protocol error
Áp dụng nhuần nhuyễn Nguyên tắt Ba mươi phút, thì tụi mình dành kha khá thời gian để Googling tìm lời giải.
Sau một hồi thì mình thấy có rất nhiều coder cũng dính lỗi này.
(1) https://github.com/googleapis/nodejs-datastore/issues/679
người report lỗi này gặp lỗi giống y chang.
lỗi liên quan đến package @grpc/grpc-js.
có blame là lỗi mức độ P2 mà không được giải quyết. (Về các level của incident bạn có thể tham khảo bài viết này)
By the way, I don't agree this should have priority p2 = moderate importance. This breaks the base use of the service.
(2) https://github.com/googleapis/nodejs-firestore/issues/1023
trong bài này mình chú ý đến cách DEBUG grpc bằng cách set thêm biết môi trường là
GRPC_TRACE=all
GRPC_VERBOSITY=DEBUG
Sau đó deploy và thử lại
Eureka! Eureka! tìm ra lỗi rồi!
Firestore đang gọi về localhost:80, nếu đúng ra phải gọi về firestore.googleapis.com:443. Sau cùng thì mình phát hiện ra lỗi do biến môi trường FIRESTORE_EMULATOR_HOST=localhost:8080
. Biến này dùng để cấu hình chạy emulator trên môi trường dev.
Source code để reproduce lại lỗi: https://gist.github.com/toanalien/712768a1b1e03352e5bd22d60a26c350#file-index-js
Recap
Tất nhiên trong quá trình coding sẽ gặp vấn đề mà không thể giải quyết được ngay, cần phải tìm sự trợ giúp bên ngoài như StackOverflow chẳng hạn.
Nên đặt câu hỏi: tại sao lúc trước chạy được? giờ không chạy được? từ lúc trước đến giờ đã có những thay đổi nào?
Nếu lỗi đến từ một thư viện phổ biến nên tìm các câu hỏi hoặc cách debug thư viện đó.
Nếu đã tìm ra lời giải nên viết lại tài liệu cho người đến sau.